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/latest/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 criteria for their
  contributions, and documented with a ``Signed-off-by`` line in commits.

* Zephyr development workflow is supported on Linux, macOS, and Windows,
  (with a few 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
