doc/memos/rdm0000.md
This memo describes a template for memos produced by the RIOT maintainers community, targeting primarily RIOT developers.
This document is a product of the community of RIOT maintainers, and aims to represent the consensus within this community. The content of this document is licensed with a Creative Commons CC-BY-SA license.
This memo uses the RFC2119 terminology and the following acronyms:
In order to facilitate RIOT maintenance in the long term and at large scale, additional documentation complementing code and usual code documentation is needed. For instance, such memos are expected to describe and give explanations about architectural design decisions, code structure etc. Other memos might also describe other aspects of RIOT activity, including, but not limited to, RIOT community processes, position with respect to some related external technical debates, pitfalls and best practices...
This memo specifies a format for such memos and the process of discussing their content before publication. Format and processes are somewhat inspired by IETF processes and documents such as Request For Comments (RFC) and Python Enhancement Proposals PEPs.
RIOT Developer Memos (RDM) are written in English, using the Markdown (.md) format, with less than 80 characters per line. Each memo has a unique identification number indicated in its header, e.g. this memo is RDM0.
The structure of a memo MUST contain:
The preamble of the memo should be structured as such:
The core content of the memo is structured as deemed necessary. However, during the review process, care must be taken to follow the below principles as much as possible:
The postamble of the memo should be structured as such:
Each new memo MUST be proposed as a pull-request (PR), and discussed the same way RIOT code PRs are processed on GitHub.
Initially, a proposed RDM is identified by its temporary file name of shape rdm-draft-<author>-<topic>.md (for example: rdm-draft-baccelli-rdm-format.md) instead of a number assigned at a later stage. At this stage, the RDM's header indactes status "draft".
Proposing an RDM is non-compulsory. There is no restriction on when, in the development cycle, an RDM can be PRed. However, RDMs on design decisions and architecture are typically expected to describe something rather stable (that is already merged in the main branch of RIOT, or about to be merged).
Once proposed, a memo MUST have received an ACK by at least 3 maintainers other than the author(s) of the memo, before its publication.
At this stage, the RDM is assigned a permanent RDM number (the next available), its status is changed to "active" and it is merged in the master branch of RIOT. Once merged into the master branch of RIOT, a memo is considered published.
Small changes/clarifications may be subsequently PRed to improve a memo, using the same RDM number. These are defined as: corrections to spelling, punctuation, or grammar; clarifications to individual phrases or diagrams without changing the intended meaning. In this case, a (monotonically increasing) revision number is issued and a changelog is added -- see Revision section in postamble below.
Any other changes should result in a new memo with another RDM number, deprecating the old memo. In this case, the deprecated memo must be modified such that its status indicates "deprecated by RDM XXXX" where X is the RDM number of the new memo. Note that a memo should not be published if there are expected changes, whether small or large.
A dedicated directory in RIOT codebase (RIOT/doc/memos) contains all the memos. It is acceptable to add complementary content such as graphical elements (in RIOT/doc/memos/files/) to illustrate the memo, as done with the RIOT logo below (see Figure 1, given here for pure sake of example). However graphical content should be kept to the bare minimum, as it is easy to get lost in "shiny slideware".
<p align="justify"> Figure 1. The RIOT logo. </p>Thanks to Thomas Eichinger, Oliver Hahm, Ludwig Knüpfer, Martine Lenders, Sebastian Meiling, Hauke Petersen, Dan Petry, Kaspar Schleiser and Matthias Wählisch for their comments and suggestions.
The author of this memo can be contacted via email at [email protected]