• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# The Inviolable Principles of NuttX
2
3These are properties of NuttX that we can be certain of for all time:
4
5## Definition
6
7*in·vi·o·la·ble*
8/inˈvīələbəl/
9
10adjective
11adjective: inviolable
12
13    never to be broken, infringed, or dishonored.
14
15    "an inviolable rule of chastity"
16
17    synonyms:  inalienable, absolute, untouchable, unalterable,
18               unchallengeable, unbreakable, impregnable; sacrosanct,
19               sacred, holy, hallowed; rare intemerate
20
21    "the inviolable right to life"
22
23Source: Oxford Dictionary of the English Language
24
25## Strict POSIX compliance
26
27  - Strict conformance to the portable standard OS interface as defined at
28    OpenGroup.org.
29  - A deeply embedded system requires some special support.  Special
30    support must be minimized.
31  - The portable interface must never be compromised only for the sake of
32    expediency.
33  - Expediency or even improved performance are not justifications for
34    violation of the strict POSIX interface.
35
36## Modular Architecture
37
38  - The internal modular architecture of the OS must be maintained.
39  - This means formalizing and documenting all internal interfaces (in the
40    porting guide), minimal use of global variables at the interface, and
41    only well defined functional interfaces.
42
43## Clear, Consistent, Standardized Coding Style
44
45  - Strict conformance to the NuttX coding style.  No "revolutionary"
46    changes to the coding standard (but perhaps some "evolutionary"
47    changes).
48  - Personal or organizational preference is not a justification for a
49    coding style change.
50  - Nothing can come into NuttX that does not follow the coding standard.
51  - Expediency is not a justification for violating the coding standard.
52
53  The NuttX coding standard can be found here:
54  https://nuttx.apache.org/docs/latest/contributing/coding_style.html
55
56## Open and Unencumbered License
57
58  - Currently BSD 3-clause or compatible:  BSD 3-clause with constraints,
59    BSD 3 and 4 clause, MIT, public domain.
60  - Other unencumbered licenses such as Apache may be considered.
61    NuttX will never be licensed under a restrictive, "Copyleft" license.
62
63## All Users Matter
64
65  - All support must apply equally to all supported platforms.  At present
66    this includes Linux, Windows MSYS, Windows Cygwin, Windows Ubuntu,
67    Windows native, macOS, Solaris, and FreeBSD.  No tool/environment
68    solutions will be considered that limit the usage of NuttX on any of
69    the supported platforms.
70  - Inclusive rather than exclusive.
71  - Hobbyists are valued users of the OS including retro computing hobbyists
72    and DIY “Maker” hobbyists.
73  - Supported toolchains:  GCC, Clang, SDCC, ZiLOG ZDS-II (c89), IAR.
74    Others?
75  - No changes to build system should limit use of NuttX by any user.
76  - Simplifying things for one user does not justify excluding another user.
77  - We should seek to expand the NuttX user base, not to limit it for
78    reasons of preference or priority.
79  - We must resist the pull to make NuttX into a Linux-only, GCC-only, and
80    ARM-only solution.
81
82## NuttX Branding
83
84  - The official name of authentic NuttX will always be "NuttX".
85  - This name is trademarked and may not be used by other OSs or forks of
86    NuttX.
87
88## The Enemies
89
90### No Short Cuts
91
92  - Doing things the easy way instead of the correct way.
93  - Reducing effort at the expense of Quality, Portability, or
94    Consistency.
95  - Focus on the values of the organization, not the values of the Open
96    Source project.  Need to support both.
97  - It takes work to support the Inviolables.  There are no shortcuts.
98
99### Sometimes Code Duplication is OK
100
101  - Sometimes is better to duplicate some logic than to introduce coupling.
102
103### Keep the Big Picture
104
105  - Too much focus on solving the problem in hand, loss of the Big Picture.
106  - Insufficient understanding of the architectural principles.
107
108### Conform to Standards
109
110  - Changing things only to suit a personal or organizational preference.
111  - Inflexibility, Inability to adapt.
112  - Not Invented Here (NIH) syndrome.
113