Contribution Guidelines
#######################

As an open-source project, we welcome and encourage the community to submit
patches directly to the project.  In our collaborative open source environment,
standards and methods for submitting changes help reduce the chaos that can result
from an active development community.

This document briefly summarizes the full `Contribution
Guidelines <http://docs.zephyrproject.org/contribute/contribute.html>`_
documentation.

* Zephyr uses the permissive open source `Apache 2.0 license`_
  that allows you to freely use, modify, distribute and sell your own products
  that include Apache 2.0 licensed software.

* There are some imported or reused components of the Zephyr project that
  use other licensing and are clearly identified.

* The Developer Certificate of Origin (DCO) process is followed to
  ensure developers are following licensing critera for their
  contributions, and documented with a ``Signed-of-by`` line in commits.

* Zephyr development workflow is supported on Linux, macOS, and Windows,
  (with afew exceptions).

* Source code for the project is maintained in the GitHub repo:
  https://github.com/zephyrproject-rtos/zephyr

* Issue and feature tracking is done using GitHub issues in this repo.

* A Continuous Integration (CI) system runs on every Pull Request (PR)
  to verify several aspects of the PR including Git commit formatting,
  Coding Style, sanity checks builds, and documentation builds.

* The `Zephyr devel mailing list`_ is a great place to engage with the
  community, ask questions, discuss issues, and help each other.

.. _Zephyr devel mailing list: https://lists.zephyrproject.org/g/devel
