This is an automated email from the ASF dual-hosted git repository.

lupyuen pushed a commit to branch releases/12.9
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/releases/12.9 by this push:
     new 2e365e437c 202503 Apache NuttX RTOS Contributing Guidelines update.
2e365e437c is described below

commit 2e365e437c4cdcba8006705978229f39dd939da4
Author: Tomasz 'CeDeROM' CEDRO <to...@cedro.info>
AuthorDate: Fri Mar 7 06:13:01 2025 +0100

    202503 Apache NuttX RTOS Contributing Guidelines update.
    
    * This change comes from vast mailing list discussions on low PR/COMMIT
      quality, breaking changes, code quality, long term self-compatibility
      and maintenance, review problems, and how to improve things.
    * Contributing Guidelines updates vote history:
      1. https://www.mail-archive.com/dev@nuttx.apache.org/msg12584.html
      2. https://www.mail-archive.com/dev@nuttx.apache.org/msg12723.html
    
    Signed-off-by: Tomasz 'CeDeROM' CEDRO <to...@cedro.info>
---
 CONTRIBUTING.md | 446 +++++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 379 insertions(+), 67 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b14b339bb3..0efbc0e7ba 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,90 +1,403 @@
-# Contributing to Apache NuttX RTOS
+# Apache NuttX RTOS Contributing Guidelines
 
-Hi! Thank you for your interest in contributing to Apache NuttX RTOS :-)
+Thank you for your interest in contributing to Apache NuttX RTOS :-)
 
-## Guidelines
+If you haven't yet read
+[The Inviolable Principles of NuttX]( 
https://github.com/apache/nuttx/blob/master/INVIOLABLES.md)
+please do so first.
 
-To help us successfully review your contribution, it is very
-important that you follow these guidelines.
+Please note that NuttX supports over 15 different architectures, 360+ boards,
+and 1600+ configurations, that are used in various projects and products around
+the world. Remember that any code change may affect different users and their
+businesses. Please try to keep your contributions high quality and compatible.
 
-If you need more information please read the [Full Contributing 
Documentation](https://nuttx.apache.org/docs/latest/contributing/index.html).
+To help us process your contributions smoothly, it is very important that you
+follow the guidelines. NuttX is maintained by a small team of volunteers from
+around the world. These rules are based on daily experiences and help us
+to preserve long term self-compatibility and maintenance of the project.
 
-### Coding Standard
+This document is split into two main parts:
 
-* You should follow [NuttX C Coding 
Standard](https://nuttx.apache.org/docs/latest/contributing/coding_style.html).
+ 1. Contribution Rules.
+ 2. Contribution Templates.
 
-* Your code will be automatically checked by GitHub Continuous Integration
-  (CI) system. If you see the "check" step fails, it is possible that this
-  happens due to style errors.
+If you need more information please read the
+[Full Contributing 
Documentation](https://nuttx.apache.org/docs/latest/contributing/index.html)
+or ask questions at our [Social Media 
channels](https://nuttx.apache.org/community).
 
-* Note that we require you to solve these issues and adapt all modified files
-  even if you didn't introduce the problem yourself (this way,
-  every contribution gets us closer to compliance).
 
 
-### Commits
 
-* Each commit **must** contain a meaningful **commit message** that consist of:
-  * **topic** (mandatory).
-  * **description** (optional, separate with blank line from topic).
+## 1. Contribution Rules.
 
-* **Prefix** commit topic with a functional context
-  (i.e.  `sched: Fixed compiler warning.`).
+### 1.1. Goals.
 
-* Provide only **signed commits** (`git commit -s`) with valid author
-  and email fields.
+The rules presented are here to ensure high quality code and documentation,
+standardized pull requests processing, as well as long term self-compatibility
+and maintenance of the project.
 
-* Valid commit message example:
+Because every change may affect users, products, or services around the world,
+all rules apply equally to all authors, reviewers, committers and maintainters.
 
-    ```
-    net/can: Add g_ prefix to can_dlc_to_len and len_to_can_dlc.
+This is our Check-List for processing every incoming pull request.
+Also, we filter out breaking changes and handle them accordingly.
 
-    Add g_ prefix to can_dlc_to_len and len_to_can_dlc to
-    follow NuttX coding style conventions for global symbols,
-    improving code readability and maintainability.
-    * you can also use bullet points.
-    * to note different thing briefly.
 
-    Signed-off-by: AuthorName <Valid@EmailAddress>
-    ```
+### 1.2. Requirements are mandatory.
 
-* If you create a proper commit message as explained above, the first line
-  will be automatically used as pull-request title and the rest is added as
-  description. Use it as a starting point to describe your Pull-Request (PR).
+Each Contribution is a Pull Request (PR) that consists of one or more git
+commits (COMMIT). Both PRs and COMMITs **must** adhere to requirements
+presented in the Contributing Guidelines or will be auto-rejected
+until fixed. Special cases are possible and outlined in a separate section
+of dedicated rules.
 
 
-### Pull Requests
+### 1.3. Proper change description.
 
-* Be sure to **fill in the pull-request report** with meaningful content.
-  Be very descriptive, take your time. Good explanation, as for someone who
-  can see the issue for the first time, will help understand the change and
-  improve the assessment process. Please provide short descriptions even for
-  a trivial change.
+Proper description of change is mandatory. Description **must** contain
+detailed explanation on:
 
-  * **Summary:** It is important to provide information on why change is
-    necessary, what it exactly does and how, if new feature shows up,
-    provide references (dependencies, similar problems and solutions), etc.
+ * what is the purpose of change
+ * why it is necessary
+ * what it does / adds / fixes
+ * how things are added / changed / fixed / updated
+ * what is the impact (build / runtime / api / what area)
+ * how it was tested (build host, compiler, target, logs)
+ * references (i.e. `nuttx` and `nuttx-apps` changes).
+ * dependencies (if change depends on another change).
 
-  * **Impact:** State how (where applicable) that change affects users, build
-    process, hardware, documentation, security, compatibility, etc.
+Local code build and real world hardware runtime test logs
+**must** be provided (for code related changes), at least short form.
+For fixes, "before" and "after" logs comparison is welcome.
 
-  * **Testing:** Please provide details on how did you verify the change,
-    what Host was used for build (OS, CPU, compiler, ..), what Target was
-    used for verification (arch, board:config, ..), etc.
-    Providing build and runtime logs from before and after change is highly
-    appreciated.
+Description can be a single sentence, several sentences long, or bullet
+points, but must be enough for anyone to understand change goals and details.
+Usually it will look similar for PR and git commit message.
 
-* Introduce only one functional change per pull-request.
+Good description when read once will make others understand your work.
+This allows faster review, quick understanding of change history (what
+changed, why, how), and eventual problem identification / fix in future.
 
-* Provide finished and verified solutions.
-  Clearly mark Work-In-Progress pull requests not yet ready for assessment.
 
+### 1.4. COMMIT and PR descriptions are equally important.
 
-## References
+Git commit messages are as important as PR descriptions.
 
-### Example Pull Request Report
+Git log provides offline descriptions of each change that is
+git client / interface independent.
 
-#### Summary
+
+### 1.5. COMMIT requirements.
+
+Proper git commit message according to template (see 2.1) is **mandatory**,
+or change is auto-rejected until fixed. Build and runtime logs are
+optional here if these are too long and already provided in the PR.
+
+Git commit message consists of:
+
+ 1. Topic with functional area prefix, `:` mark, short self-explanatory
+    functional context, `.` mark.
+ 2. Blank line.
+ 3. Description on what is changed, how, and why. May use several
+    lines, short sentences, or bullet points (see 1.3).
+ 4. Blank line.
+ 5. Signature (created with `git commit -s`).
+
+Valid git commit example:
+
+```
+net/can: Add g_ prefix to can_dlc_to_len and len_to_can_dlc.
+
+Add g_ prefix to can_dlc_to_len and len_to_can_dlc to
+follow NuttX coding style conventions for global symbols,
+improving code readability and maintainability.
+* you can also use bullet points.
+* to note different things briefly.
+
+Signed-off-by: AuthorName <Valid@EmailAddress>
+```
+
+
+### 1.6. COMMIT message mandatory fields.
+
+Each git commit message **must** contain these fields, or change is
+auto-rejected until fixed:
+
+ 1. topic.
+ 2. description.
+ 3. signature (`git commit -s`).
+
+Although this seems to repeat rule 1.5, it clearly filters out commits
+with no topic, description, or signature.
+
+
+### 1.7. PR requirements.
+
+1. Proper description (see 1.3) of PR according to template (see 2.3)
+   is **mandatory**. All fields are required or change is auto-rejected
+   until fixed.
+2. For code changes build and runtime logs are **mandatory** to prove code
+   was tested on **at least one** real world hardware target.
+3. Pull Requests should be as small as possible and focused on only one
+   functional change.
+4. Changes affecting different functionalities must be provided in a separate
+   Pull Requests.
+5. PR may contain several commits but every single commit included
+   must not break overall build, runtime, and compatibility,
+   especially for other components.
+6. PR that breaks build or runtime in any way is considered a Breaking Change
+   (see 1.12), is not welcome, and requires special handling (see 1.13).
+7. PR that introduces new feature must have Documentation included (see 1.8).
+8. Work-in-progress PRs should be marked `[WIP]` tag and set as "draft".
+9. When changes for a dedicated function must be bundled together in order
+   to maintain functionality and self-compatibility, exception can
+   be made, and it must be clearly stated that there is no other way and
+   that this is not a Breaking Change.
+
+Note that our small team of maintainers is processing hundreds of PRs every
+month. Providing high quality COMMITs and PRs really helps a lot!
+
+Please provide only finished and verified solutions. Every PR code update
+(`git push -f` to your branch that represents the PR) each time triggers big
+GitHub CI machinery that builds / cross-compiles your code to various targets
+on various build hosts. This is not only slow but also expensive.
+
+
+### 1.8. Documentation requirements.
+
+Changes **must** come with a documentation update (where applicable).
+
+Documentation is part of the `nuttx` git repository. If code change is part
+of `nuttx-apps` repository then separate PR in `nuttx` repository is required.
+Otherwise documentation should come in the same PR as the code update.
+
+It is advised that the code and documentation should be split into two
+separate commits in the same PR. This helps backporting and separates
+possible code and documentation build errors. Squashing code together with
+documentation into a single commit should be avoided, but is acceptable.
+
+If change presents new functionality documentation **must** be provided
+in the same PR along with the code (not in the future).
+
+If change requires existing documentation update it must be contained
+in the same PR along with the code change (not in the future).
+
+Successful documentation build logs (shortcut) are welcome.
+
+This helps us keep documentation in sync with the code.
+
+See:
+1. https://github.com/apache/nuttx/tree/master/Documentation
+2. https://github.com/apache/nuttx/blob/master/INVIOLABLES.md
+
+
+### 1.9. Zero Trust approach to user testing.
+
+We implement zero trust approach to user-provided testing.
+
+It is the change author's duty to provide real world hardware build and runtime
+logs for **at least one** real world hardware device.
+
+Remember that any code change may break things for others.
+Please do your utmost to avoid that.
+
+This helps us filter out untested code commits.
+
+See: https://github.com/apache/nuttx/blob/master/INVIOLABLES.md
+
+
+### 1.10. Long term maintenance and self-compatibility.
+
+Long term maintenance and self-compatibility is our ultimate goal.
+
+Alternative solutions and non-invasive approaches are preferred. Offer
+user a choice and compatibility instead of breaking existing features.
+
+Breaking changes are avoided and planned towards next major release (see 1.12).
+
+See: https://github.com/apache/nuttx/blob/master/INVIOLABLES.md
+
+
+### 1.11. Experimental features.
+
+Experimental code and incomplete or experimental features that do not impact
+overall project self-compatibility in terms of Breaking Changes (see 1.12)
+**must** be clearly marked with a `[EXPERIMENTAL]` tag in the git commit topic
+and PR title that will propagate to Release Notes.
+
+See: https://github.com/apache/nuttx/blob/master/INVIOLABLES.md
+
+
+### 1.12. Breaking changes not welcome.
+
+Breaking changes are not welcome. **We do not "break by design"**. Please
+provide only high quality code and think about other NuttX users.
+
+Because thousands of users / companies and their projects / products depend
+on NuttX code, we strongly prefer self-compatibility and long-term maintenance
+over "change is good" or "enforced changes" ideologies.
+
+"Breaking change" is anything that alters Build / Kernel / Architecture / API,
+alters both nuttx and nuttx-apps repo at the same time, breaks
+build / runtime / api for a single or many boards / architectures /
+applications, breaks self-compatibility, breaks maintenance,
+breaks build / runtime compatibility with existing release code (packages)
+both for nuttx and nuttx-apps, etc.
+
+Remember that any code change may impact other users and their businesses!
+
+Changes should provide maximum self-compatibility with existing solutions,
+should not impact build and runtime in a negative way, or may require design
+reconsiderations such as providing alternative non-invasive user selectable
+solutions (see 1.10).
+
+When breaking changes are unavoidable, these may be accepted, but need prior
+discussion and agreement of the community and special handling (see 1.13).
+
+See: https://github.com/apache/nuttx/blob/master/INVIOLABLES.md
+
+
+### 1.13. Breaking changes handling process.
+
+This rule complements "Breaking changes not welcome" rule.
+
+We avoid breaking changes unless absolutely necessary and unavoidable
+(i.e. security fix, broken code, etc). Special case considerations apply:
+
+ 1. First reviewer that recognizes a breaking change should block
+    accidental merge with "Request Changes" mark and ask for discussion.
+    This PR cannot be merged until all requests are resolved.
+ 2. PR is marked as "Draft" to avoid accidental merge.
+ 3. Detailed discussion should follow both in PR **and**
+    [dev@ Mailing List](https://nuttx.apache.org/community/#mailing-list).
+ 4. Alternative non-breaking solution is researched alongside the community.
+ 5. Breaking change after discussion / updates is voted on the mailing
+    list and requires at least 4 +1 binding votes with no -1 binding votes.
+    Any -1 binding vote is a
+    [veto](https://apache.org/foundation/voting.html#Veto) and blocks
+    the change. NuttX PMC members cast binding votes.
+    See [Apache Voting Process](https://apache.org/foundation/voting.html).
+ 6. Breaking changes **must** be verified on **various different real
+    world hardware architectures**, build and runtime logs are
+    **mandatory**. Help of the community is welcome.
+ 7. Breaking change requires at least 4 independent positive PR reviews
+    (see 1.16), all discussions resolved, and zero "request changes".
+ 8. Change must be well documented (buid / runtime test logs, pr, git
+    commit, documentation, release notes, etc) with clear notes on how to
+    fix the introduced problems.
+ 9. Breaking Change must be clearly marked with a `[BREAKING]` tag in the
+    git commit topic and PR title that will propagate to Release Notes.
+
+See: https://github.com/apache/nuttx/blob/master/INVIOLABLES.md
+
+
+### 1.14. Breaking changes build and runtime test logs are mandatory.
+
+Breaking changes are special case where build and runtime test logs
+(i.e. `apps/ostest`) for **more than one** different architecture is
+**mandatory**. Community support is welcome.
+
+QEMU tests **do not count** here as in the past they did not catch problems
+that revealed on a real world hardware after change was already merged.
+
+Although this seems to repeat rule 1.13, it ensures real world hardware
+verification and minimizes possible negative impact on various users.
+
+See: https://github.com/apache/nuttx/blob/master/INVIOLABLES.md
+
+
+### 1.15. Reviews reuqirements.
+
+Before PR can be merged to the master repository it requires:
+
+ * 2 or more independent positive reviews.
+ * 4 or more independent positive reviews for Breaking Changes (see 1.12).
+
+In future we plan to add "areas" (such as trivial typo fixes or documentation
+only updates) that may require only one reviewer.
+
+
+### 1.16. Reviews independence.
+
+PR reviews should come from independent organizations.
+NuttX is an Open-Source independent and unbiased project.
+
+Each PMC Member, Committer, and Reviewer must report up-to-date Affiliation
+for clear identification. Commits should contain business email where
+applicable.
+
+When code comes from the same organization as positive review, then review
+is not considered independent, but still may provide helpful insight.
+
+Self review is not allowed.
+
+See: https://github.com/apache/nuttx/blob/master/INVIOLABLES.md
+
+
+### 1.17. Merge rules.
+
+1. Each change **must** be provided as PR that undergoes independent review
+   process (see 1.16).
+2. Single company / organization commit, review, and merge is not allowed.
+3. Merge of PRs with unresolved discussions and "change request" marks
+   is not allowed.
+3. Self committed code merge with or without review is not allowed.
+4. Direct push to master is not allowed.
+
+Breaking these rules will be punished.
+
+See: https://github.com/apache/nuttx/blob/master/INVIOLABLES.md
+
+
+
+
+## 2. Contribution Templates.
+
+### 2.1. Source Code.
+
+Your source code **must** conform to the [NuttX C Coding 
Standard](https://nuttx.apache.org/docs/latest/contributing/coding_style.html).
+
+Code is automatically checked for each PR (and PR updates) by GitHub Continuous
+Integration (CI) system. Fails at `lint/*` step indicate code style errors.
+
+You may verify the code styling issues with:
+
+ 1. `./tools/checkpatch.sh -g HEAD~...HEAD`
+ 2. `./tools/checkpatch.sh -f path/to/your/file.c`
+
+Note that we require you to solve encountered issues and adapt all modified
+files even if you did not introduce the problem yourself. This way, every
+contribution gets us closer to compliance. Thank you!
+
+
+### 2.2. Commits.
+
+This template provides git commit example as described in requirement 1.5.
+
+```
+net/can: Add g_ prefix to can_dlc_to_len and len_to_can_dlc.
+
+Add g_ prefix to can_dlc_to_len and len_to_can_dlc to
+follow NuttX coding style conventions for global symbols,
+improving code readability and maintainability.
+* you can also use bullet points.
+* to note different thing briefly.
+
+Signed-off-by: AuthorName <Valid@EmailAddress>
+```
+
+Note that first line of the commit message (topic) will be automatically
+used as pull request title and the rest is added as description.
+Use it as a starting point to describe your Pull-Request (PR).
+
+
+### 2.3. Pull Requests.
+
+This template uses MarkDown and provides example Pull Request content
+as described in requirement 1.7.
+
+````
+## Summary
 
   * Why change is necessary (fix, update, new feature)?
   * What functional part of the code is being changed?
@@ -92,42 +405,41 @@ If you need more information please read the [Full 
Contributing Documentation](h
   * Related [NuttX Issue](https://github.com/apache/nuttx/issues) reference if 
applicable.
   * Related NuttX Apps [Issue](https://github.com/apache/nuttx-apps/issues) / 
[Pull Request](https://github.com/apache/nuttx-apps/pulls) reference if 
applicable.
 
-#### Impact
+## Impact
 
-  * Is new feature added? Is existing feature changed?
+  * Is new feature added? Is existing feature changed? NO / YES (please 
describe if yes).
   * Impact on user (will user need to adapt to change)? NO / YES (please 
describe if yes).
   * Impact on build (will build process change)? NO / YES (please descibe if 
yes).
   * Impact on hardware (will arch(s) / board(s) / driver(s) change)? NO / YES 
(please describe if yes).
   * Impact on documentation (is update required / provided)? NO / YES (please 
describe if yes).
   * Impact on security (any sort of implications)? NO / YES (please describe 
if yes).
   * Impact on compatibility (backward/forward/interoperability)? NO / YES 
(please describe if yes).
-  * Anything else to consider?
+  * Anything else to consider or add?
 
-#### Testing
+## Testing
 
   I confirm that changes are verified on local setup and works as intended:
   * Build Host(s): OS (Linux,BSD,macOS,Windows,..), CPU(Intel,AMD,ARM), 
compiler(GCC,CLANG,version), etc.
   * Target(s): arch(sim,RISC-V,ARM,..), board:config, etc.
+  * you can also provide steps on how to reproduce the problem and verify the 
change.
 
   Testing logs before change:
 
   ```
-  runtime / build logs before change goes here
+  build and runtime logs before change goes here
   ```
 
   Testing logs after change:
 
   ```
-  runtime / build logs after change goes here
+  build and runtime logs after change goes here
   ```
 
-  How to repeat:
-    * you can also provide steps on how to reproduce problem and verify the 
change.
-
-#### PR verification
+## PR verification Self-Check
 
   * [ ] This PR introduces only one functional change.
   * [ ] I have updated all required description fields above.
   * [ ] My PR adheres to Contributing 
[Guidelines](https://github.com/apache/nuttx/blob/master/CONTRIBUTING.md) and 
[Documentation](https://nuttx.apache.org/docs/latest/contributing/index.html) 
(git commit title and message, coding standard, etc).
   * [ ] My PR is still work in progress (not ready for review).
   * [ ] My PR is ready for review and can be safely merged into a codebase.
+````

Reply via email to