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