doc: API: Document the modification of stable APIs
In order to make technical progress possible, some stable APIs may sometimes need to be modified in a non backwards-compatible way. Describe the process for integrating such changes in the documentation. Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
This commit is contained in:
parent
e4ad515530
commit
788d6eb29f
3 changed files with 121 additions and 6 deletions
|
@ -77,9 +77,90 @@ An API can be declared ``stable`` after fulfilling the following requirements:
|
||||||
- Stable APIs can get backward compatible updates, bug fixes and security fixes
|
- Stable APIs can get backward compatible updates, bug fixes and security fixes
|
||||||
at any time.
|
at any time.
|
||||||
|
|
||||||
|
.. _stable_api_changes:
|
||||||
|
|
||||||
|
Introducing incompatible changes
|
||||||
|
================================
|
||||||
|
|
||||||
|
A stable API, as described above strives to remain backwards-compatible through
|
||||||
|
its life-cycle. There are however cases where fulfilling this objective prevents
|
||||||
|
technical progress or is simply unfeasible without unreasonable burden on the
|
||||||
|
maintenance of the API and its implementation(s).
|
||||||
|
|
||||||
|
An incompatible change is defined as one that forces users to modify their
|
||||||
|
existing code in order to maintain the current behavior of their application.
|
||||||
|
The need for recompilation of applications (without changing the application
|
||||||
|
itself) is not considered an incompatible change.
|
||||||
|
|
||||||
|
In order to restrict and control the introduction of a change that breaks the
|
||||||
|
promise of backwards compatibility the following steps must be followed whenever
|
||||||
|
such a change is considered necessary in order to accept it in the project:
|
||||||
|
|
||||||
|
#. An :ref:`RFC issue <rfcs>` must be opened on GitHub with the following
|
||||||
|
content:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
Title: RFC: API Change: <subsystem>
|
||||||
|
Contents: - Problem Description:
|
||||||
|
- Background information on why the change is required
|
||||||
|
- Proposed Change (detailed):
|
||||||
|
- Brief description of the API change
|
||||||
|
- Detailed RFC:
|
||||||
|
- Function call changes
|
||||||
|
- Device Tree changes (source and bindings)
|
||||||
|
- Kconfig option changes
|
||||||
|
- Dependencies:
|
||||||
|
- Impact to users of the API, including the steps required
|
||||||
|
to adapt out-of-tree users of the API to the change
|
||||||
|
|
||||||
|
Instead of a written description of the changes, the RFC issue may link to a
|
||||||
|
Pull Request containing those changes in code form.
|
||||||
|
#. The RFC issue must be labeled with the GitHub ``Stable API Change`` label
|
||||||
|
#. The RFC issue must be submitted for discussion in the next `Zephyr API meeting`_
|
||||||
|
#. An email must be sent to the ``devel`` mailing list with a subject identical
|
||||||
|
to the RFC issue title and that links to the RFC issue
|
||||||
|
|
||||||
|
The RFC will then receive feedback through issue comments and will also be
|
||||||
|
discussed in the Zephyr API meeting, where the stakeholders and the community at
|
||||||
|
large will have a chance to discuss it in detail.
|
||||||
|
|
||||||
|
Finally, and if not done as part of the first step, a Pull Request must be
|
||||||
|
opened on GitHub. It is left to the person proposing the change to decide
|
||||||
|
whether to introduce both the RFC and the Pull Request at the same time or to
|
||||||
|
wait until the RFC has gathered consensus enough so that the implementation can
|
||||||
|
proceed with confidence that it will be accepted.
|
||||||
|
The Pull Request must include the following:
|
||||||
|
|
||||||
|
- A title that matches the RFC issue
|
||||||
|
- A link to the RFC issue
|
||||||
|
- The actual changes to the API
|
||||||
|
|
||||||
|
- Changes to the API header file
|
||||||
|
- Changes to the API implementation(s)
|
||||||
|
- Changes to the relevant API documentation
|
||||||
|
- Changes to Device Tree source and bindings
|
||||||
|
|
||||||
|
- The changes required to adapt in-tree users of the API to the change.
|
||||||
|
Depending on the scope of this task this might require additional help from
|
||||||
|
the corresponding maintainers
|
||||||
|
- An entry in the "API Changes" section of the release notes for the next
|
||||||
|
upcoming release
|
||||||
|
- The labels ``API``, ``Stable API Change`` and ``Release Notes``, as well as
|
||||||
|
any others that are applicable
|
||||||
|
|
||||||
|
Once the steps above have been completed, the outcome of the proposal will
|
||||||
|
depend on the approval of the actual Pull Request by the maintainer of the
|
||||||
|
corresponding subystem. As with any other Pull Request, the author can request
|
||||||
|
for it to be discussed and ultimately even voted on in the `Zephyr TSC meeting`_.
|
||||||
|
|
||||||
|
If the Pull Request is merged then an email must be sent to the ``devel`` and
|
||||||
|
``user`` mailing lists informing them of the change.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Incompatible changes will be announced in the release notes.
|
Incompatible changes will be announced in the "API Changes" section of the
|
||||||
|
release notes.
|
||||||
|
|
||||||
Deprecated
|
Deprecated
|
||||||
***********
|
***********
|
||||||
|
@ -87,6 +168,8 @@ Deprecated
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Unstable APIs can be removed without deprecation at any time.
|
Unstable APIs can be removed without deprecation at any time.
|
||||||
|
Deprecation and removal of APIs will be announced in the "API Changes"
|
||||||
|
section of the release notes.
|
||||||
|
|
||||||
The following are the requirements for deprecating an existing API:
|
The following are the requirements for deprecating an existing API:
|
||||||
|
|
||||||
|
@ -100,6 +183,8 @@ The following are the requirements for deprecating an existing API:
|
||||||
|
|
||||||
- Mark as deprecated
|
- Mark as deprecated
|
||||||
- Document the deprecation
|
- Document the deprecation
|
||||||
|
- Include the deprecation in the "API Changes" of the release notes for the
|
||||||
|
next upcoming release
|
||||||
- Code using the deprecated API needs to be modified to remove usage of said
|
- Code using the deprecated API needs to be modified to remove usage of said
|
||||||
API
|
API
|
||||||
- The change needs to be atomic and bisectable
|
- The change needs to be atomic and bisectable
|
||||||
|
@ -134,3 +219,6 @@ the release notes, mailing lists, Github issues and pull-requests.
|
||||||
If it's not OK to remove the API, the maintainers will continue to support
|
If it's not OK to remove the API, the maintainers will continue to support
|
||||||
migration and update the roadmap with the aim to remove the API in the next
|
migration and update the roadmap with the aim to remove the API in the next
|
||||||
release.
|
release.
|
||||||
|
|
||||||
|
.. _`Zephyr TSC meeting`: https://github.com/zephyrproject-rtos/zephyr/wiki/Zephyr-Committee-and-Working-Group-Meetings#technical-steering-committee-tsc
|
||||||
|
.. _`Zephyr API meeting`: https://github.com/zephyrproject-rtos/zephyr/wiki/Zephyr-Committee-and-Working-Group-Meetings#zephyr-api-meeting
|
||||||
|
|
|
@ -105,14 +105,14 @@ Security
|
||||||
Changes that appear to have an impact to the overall security of the system need
|
Changes that appear to have an impact to the overall security of the system need
|
||||||
to be reviewed by a security expert from the security working group.
|
to be reviewed by a security expert from the security working group.
|
||||||
|
|
||||||
TSC
|
TSC and Working Groups
|
||||||
++++
|
++++++++++++++++++++++
|
||||||
|
|
||||||
Changes that introduce new features or functionality or change the way the
|
Changes that introduce new features or functionality or change the way the
|
||||||
overall system works need to be reviewed by the TSC or the responsible Working
|
overall system works need to be reviewed by the TSC or the responsible Working
|
||||||
Group. For example for API changes, the API working group needs to be consulted
|
Group. For example for :ref:`stable API changes <stable_api_changes>`, the
|
||||||
and made aware of such changes.
|
proposal needs to be presented in the API meeting so that the relevant
|
||||||
|
stakeholders are made aware of the change.
|
||||||
|
|
||||||
A Pull-Request should have an Assignee
|
A Pull-Request should have an Assignee
|
||||||
=======================================
|
=======================================
|
||||||
|
@ -278,6 +278,16 @@ Description The issue is to be discussed in the following
|
||||||
|
|
||||||
.. _`dev-review/TSC meeting`: https://github.com/zephyrproject-rtos/zephyr/wiki/Zephyr-Committee-and-Working-Group-Meetings
|
.. _`dev-review/TSC meeting`: https://github.com/zephyrproject-rtos/zephyr/wiki/Zephyr-Committee-and-Working-Group-Meetings
|
||||||
|
|
||||||
|
Stable API changes
|
||||||
|
==================
|
||||||
|
|
||||||
|
============= ===============================================================
|
||||||
|
Labels ``Stable API Change``
|
||||||
|
Applicable to PRs and issues
|
||||||
|
Description The issue or PR describes a change to a stable API. See
|
||||||
|
additional information in :ref:`stable_api_changes`
|
||||||
|
============= ===============================================================
|
||||||
|
|
||||||
Minimum PR review time
|
Minimum PR review time
|
||||||
======================
|
======================
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,8 @@ by any project member or the community. You should contact an assigned owner if
|
||||||
you'd like to discuss or contribute to that feature's implementation
|
you'd like to discuss or contribute to that feature's implementation
|
||||||
|
|
||||||
|
|
||||||
|
.. _rfcs:
|
||||||
|
|
||||||
Proposals and RFCs
|
Proposals and RFCs
|
||||||
*******************
|
*******************
|
||||||
|
|
||||||
|
@ -67,6 +69,7 @@ examples that would benefit from an RFC are:
|
||||||
|
|
||||||
- A new feature that creates new API surface area, and would require a feature
|
- A new feature that creates new API surface area, and would require a feature
|
||||||
flag if introduced.
|
flag if introduced.
|
||||||
|
- The modification of an existing stable API
|
||||||
- The removal of features that already shipped as part of Zephyr.
|
- The removal of features that already shipped as part of Zephyr.
|
||||||
- The introduction of new idiomatic usage or conventions, even if they do not
|
- The introduction of new idiomatic usage or conventions, even if they do not
|
||||||
include code changes to Zephyr itself.
|
include code changes to Zephyr itself.
|
||||||
|
@ -88,6 +91,17 @@ Some changes do not require an RFC:
|
||||||
- Addition of new boards, SoCs or drivers to existing subsystems
|
- Addition of new boards, SoCs or drivers to existing subsystems
|
||||||
- ...
|
- ...
|
||||||
|
|
||||||
|
The process in itself consists in creating a GitHub issue with the :ref:`RFC
|
||||||
|
label <gh_labels>` that documents the proposal thoroughly. There is an `RFC
|
||||||
|
template`_ included in the main Zephyr GitHub repository that serves as a
|
||||||
|
guideline to write a new RFC.
|
||||||
|
|
||||||
|
As with Pull Requests, RFCs might require discussion in the context of one of
|
||||||
|
the `Zephyr meetings`_ in order to move it forward in cases where there is
|
||||||
|
either disagreement or not enough voiced opinions in order to proceed. Make sure
|
||||||
|
to either label it appropriately or include it in the corresponding GitHub
|
||||||
|
project in order for it to be examined during the next meeting.
|
||||||
|
|
||||||
Roadmap and Release Plans
|
Roadmap and Release Plans
|
||||||
*************************
|
*************************
|
||||||
|
|
||||||
|
@ -132,3 +146,6 @@ and main stakeholders of the project can make progress on.
|
||||||
|
|
||||||
Items labeled as ``features`` are short or long term release items that shall
|
Items labeled as ``features`` are short or long term release items that shall
|
||||||
have an assignee and a milestone set.
|
have an assignee and a milestone set.
|
||||||
|
|
||||||
|
.. _`RFC template`: https://github.com/zephyrproject-rtos/zephyr/blob/master/.github/ISSUE_TEMPLATE/rfc---proposal.md
|
||||||
|
.. _`Zephyr meetings`: https://github.com/zephyrproject-rtos/zephyr/wiki/Zephyr-Committee-and-Working-Group-Meetings
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue