blob: 205ce425f1c8f980c7a47f0c4a8c4cf18b92acdd [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>The Inviolable Principles of NuttX &mdash; NuttX latest documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/copybutton.css" type="text/css" />
<link rel="stylesheet" href="../_static/tabs.css" type="text/css" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="../_static/jquery.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/clipboard.min.js"></script>
<script src="../_static/copybutton.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Supported Platforms" href="../platforms/index.html" />
<link rel="prev" title="Documentation" href="../contributing/documentation.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../latest" selected="selected">latest</option>
<option value="../../10.0.0" >10.0.0</option>
<option value="../../10.0.1" >10.0.1</option>
<option value="../../10.1.0" >10.1.0</option>
<option value="../../10.2.0" >10.2.0</option>
<option value="../../10.3.0" >10.3.0</option>
<option value="../../11.0.0" >11.0.0</option>
<option value="../../12.0.0" >12.0.0</option>
<option value="../../12.1.0" >12.1.0</option>
<option value="../../12.2.0" >12.2.0</option>
<option value="../../12.2.1" >12.2.1</option>
<option value="../../12.3.0" >12.3.0</option>
<option value="../../12.4.0" >12.4.0</option>
<option value="../../12.5.0" >12.5.0</option>
<option value="../../12.5.1" >12.5.1</option>
<option value="../../12.6.0" >12.6.0</option>
<option value="../../12.7.0" >12.7.0</option>
<option value="../../12.8.0" >12.8.0</option>
<option value="../../12.9.0" >12.9.0</option>
<option value="../../12.10.0" >12.10.0</option>
<option value="../../12.11.0" >12.11.0</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../quickstart/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing/index.html">Contributing</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">The Inviolable Principles of NuttX</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#definition">Definition</a></li>
<li class="toctree-l2"><a class="reference internal" href="#strict-posix-compliance">Strict POSIX compliance</a></li>
<li class="toctree-l2"><a class="reference internal" href="#modular-architecture">Modular Architecture</a></li>
<li class="toctree-l2"><a class="reference internal" href="#clear-consistent-standardized-coding-style">Clear, Consistent, Standardized Coding Style</a></li>
<li class="toctree-l2"><a class="reference internal" href="#open-and-unencumbered-license">Open and Unencumbered License</a></li>
<li class="toctree-l2"><a class="reference internal" href="#all-users-matter">All Users Matter</a></li>
<li class="toctree-l2"><a class="reference internal" href="#nuttx-branding">NuttX Branding</a></li>
<li class="toctree-l2"><a class="reference internal" href="#the-enemies">The Enemies</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#no-short-cuts">No Short Cuts</a></li>
<li class="toctree-l3"><a class="reference internal" href="#sometimes-code-duplication-is-ok">Sometimes Code Duplication is OK</a></li>
<li class="toctree-l3"><a class="reference internal" href="#keep-the-big-picture">Keep the Big Picture</a></li>
<li class="toctree-l3"><a class="reference internal" href="#conform-to-standards">Conform to Standards</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../platforms/index.html">Supported Platforms</a></li>
<li class="toctree-l1"><a class="reference internal" href="../components/index.html">OS Components</a></li>
<li class="toctree-l1"><a class="reference internal" href="../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../glossary.html">Glossary</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">The Inviolable Principles of NuttX</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/introduction/inviolables.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="the-inviolable-principles-of-nuttx">
<h1>The Inviolable Principles of NuttX<a class="headerlink" href="#the-inviolable-principles-of-nuttx" title="Permalink to this heading"></a></h1>
<p>These are properties of NuttX that we can be certain of for all time:</p>
<section id="definition">
<h2>Definition<a class="headerlink" href="#definition" title="Permalink to this heading"></a></h2>
<p><em>in·vi·o·la·ble</em>
/inˈvīələbəl/</p>
<p>adjective
adjective: inviolable</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>never to be broken, infringed, or dishonored.
&quot;an inviolable rule of chastity&quot;
synonyms: inalienable, absolute, untouchable, unalterable,
unchallengeable, unbreakable, impregnable; sacrosanct,
sacred, holy, hallowed; rare intemerate
&quot;the inviolable right to life&quot;
</pre></div>
</div>
<p>Source: Oxford Dictionary of the English Language</p>
</section>
<section id="strict-posix-compliance">
<h2>Strict POSIX compliance<a class="headerlink" href="#strict-posix-compliance" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>Strict conformance to the portable standard OS interface as defined at
OpenGroup.org.</p></li>
<li><p>A deeply embedded system requires some special support. Special
support must be minimized.</p></li>
<li><p>The portable interface must never be compromised only for the sake of
expediency.</p></li>
<li><p>Expediency or even improved performance are not justifications for
violation of the strict POSIX interface.</p></li>
</ul>
</section>
<section id="modular-architecture">
<h2>Modular Architecture<a class="headerlink" href="#modular-architecture" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>The internal modular architecture of the OS must be maintained.</p></li>
<li><p>This means formalizing and documenting all internal interfaces (in the
porting guide), minimal use of global variables at the interface, and
only well defined functional interfaces.</p></li>
</ul>
</section>
<section id="clear-consistent-standardized-coding-style">
<h2>Clear, Consistent, Standardized Coding Style<a class="headerlink" href="#clear-consistent-standardized-coding-style" title="Permalink to this heading"></a></h2>
<ul>
<li><p>Strict conformance to the NuttX coding style. No “revolutionary”
changes to the coding standard (but perhaps some “evolutionary”
changes).</p></li>
<li><p>Personal or organizational preference is not a justification for a
coding style change.</p></li>
<li><p>Nothing can come into NuttX that does not follow the coding standard.</p></li>
<li><p>Expediency is not a justification for violating the coding standard.</p>
<p>The NuttX coding standard can be found here:
<a class="reference external" href="https://nuttx.apache.org/docs/latest/contributing/coding_style.html">https://nuttx.apache.org/docs/latest/contributing/coding_style.html</a></p>
</li>
</ul>
</section>
<section id="open-and-unencumbered-license">
<h2>Open and Unencumbered License<a class="headerlink" href="#open-and-unencumbered-license" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>Currently BSD 3-clause or compatible: BSD 3-clause with constraints,
BSD 3 and 4 clause, MIT, public domain.</p></li>
<li><p>Other unencumbered licenses such as Apache may be considered.
NuttX will never be licensed under a restrictive, “Copyleft” license.</p></li>
</ul>
</section>
<section id="all-users-matter">
<h2>All Users Matter<a class="headerlink" href="#all-users-matter" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>All support must apply equally to all supported platforms. At present
this includes Linux, Windows MSYS, Windows Cygwin, Windows Ubuntu,
Windows native, macOS, Solaris, and FreeBSD. No tool/environment
solutions will be considered that limit the usage of NuttX on any of
the supported platforms.</p></li>
<li><p>Inclusive rather than exclusive.</p></li>
<li><p>Hobbyists are valued users of the OS including retro computing hobbyists
and DIY “Maker” hobbyists.</p></li>
<li><p>Supported toolchains: GCC, Clang, SDCC, ZiLOG ZDS-II (c89), IAR.
Others?</p></li>
<li><p>No changes to build system should limit use of NuttX by any user.</p></li>
<li><p>Simplifying things for one user does not justify excluding another user.</p></li>
<li><p>We should seek to expand the NuttX user base, not to limit it for
reasons of preference or priority.</p></li>
<li><p>We must resist the pull to make NuttX into a Linux-only, GCC-only, and
ARM-only solution.</p></li>
</ul>
</section>
<section id="nuttx-branding">
<h2>NuttX Branding<a class="headerlink" href="#nuttx-branding" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>The official name of authentic NuttX will always be “NuttX”.</p></li>
<li><p>This name is trademarked and may not be used by other OSs or forks of
NuttX.</p></li>
</ul>
</section>
<section id="the-enemies">
<h2>The Enemies<a class="headerlink" href="#the-enemies" title="Permalink to this heading"></a></h2>
<section id="no-short-cuts">
<h3>No Short Cuts<a class="headerlink" href="#no-short-cuts" title="Permalink to this heading"></a></h3>
<ul class="simple">
<li><p>Doing things the easy way instead of the correct way.</p></li>
<li><p>Reducing effort at the expense of Quality, Portability, or
Consistency.</p></li>
<li><p>Focus on the values of the organization, not the values of the Open
Source project. Need to support both.</p></li>
<li><p>It takes work to support the Inviolables. There are no shortcuts.</p></li>
</ul>
</section>
<section id="sometimes-code-duplication-is-ok">
<h3>Sometimes Code Duplication is OK<a class="headerlink" href="#sometimes-code-duplication-is-ok" title="Permalink to this heading"></a></h3>
<ul class="simple">
<li><p>Sometimes is better to duplicate some logic than to introduce coupling.</p></li>
</ul>
</section>
<section id="keep-the-big-picture">
<h3>Keep the Big Picture<a class="headerlink" href="#keep-the-big-picture" title="Permalink to this heading"></a></h3>
<ul class="simple">
<li><p>Too much focus on solving the problem in hand, loss of the Big Picture.</p></li>
<li><p>Insufficient understanding of the architectural principles.</p></li>
</ul>
</section>
<section id="conform-to-standards">
<h3>Conform to Standards<a class="headerlink" href="#conform-to-standards" title="Permalink to this heading"></a></h3>
<ul class="simple">
<li><p>Changing things only to suit a personal or organizational preference.</p></li>
<li><p>Inflexibility, Inability to adapt.</p></li>
<li><p>Not Invented Here (NIH) syndrome.</p></li>
</ul>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../contributing/documentation.html" class="btn btn-neutral float-left" title="Documentation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../platforms/index.html" class="btn btn-neutral float-right" title="Supported Platforms" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2020, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>