DPDK-dev Archive on lore.kernel.org
 help / color / Atom feed
From: Kevin Traynor <ktraynor@redhat.com>
To: Ray Kinsella <mdr@ashroe.eu>, dev@dpdk.org
Cc: thomas@monjalon.net, stephen@networkplumber.org,
	bruce.richardson@intel.com, ferruh.yigit@intel.com,
	konstantin.ananyev@intel.com, jerinj@marvell.com,
	olivier.matz@6wind.com, nhorman@tuxdriver.com,
	maxime.coquelin@redhat.com, john.mcnamara@intel.com,
	marko.kovacevic@intel.com, hemant.agrawal@nxp.com,
	Luca Boccassi <bluca@debian.org>,
	David Marchand <david.marchand@redhat.com>
Subject: Re: [dpdk-dev] [PATCH v3 2/4] doc: changes to abi policy introducing major abi versions
Date: Wed, 25 Sep 2019 13:29:33 +0100
Message-ID: <3cfa4f0d-289b-68e6-74fe-3cee7c9e37d1@redhat.com> (raw)
In-Reply-To: <81d2f70c-62dc-1a73-22a2-79317d09b2da@ashroe.eu>

On 24/09/2019 12:32, Ray Kinsella wrote:
> 
> Thanks Kevin for working through all this.
> Other comments are inline.
> 
> On 30/08/2019 17:20, Kevin Traynor wrote:
>> Hi Ray,
>>
>> On 15/08/2019 11:23, Ray Kinsella wrote:
>>> This policy change introduces major ABI versions, these are
>>> declared every year, typically aligned with the LTS release
>>> and are supported by subsequent releases in the following year.
>>> This change is intended to improve ABI stabilty for those projects
>>> consuming DPDK.
>>>
>>> Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
>>> ---
>>>  doc/guides/contributing/abi_policy.rst | 308 ++++++++++++++++++++++++---------
>>>  doc/guides/contributing/stable.rst     |  38 ++--
>>>  2 files changed, 245 insertions(+), 101 deletions(-)
>>>
>>> diff --git a/doc/guides/contributing/abi_policy.rst b/doc/guides/contributing/abi_policy.rst
>>> index 55bacb4..6190bdc 100644
>>> --- a/doc/guides/contributing/abi_policy.rst
>>> +++ b/doc/guides/contributing/abi_policy.rst
>>> @@ -1,33 +1,46 @@
>>>  ..  SPDX-License-Identifier: BSD-3-Clause
>>> -    Copyright 2018 The DPDK contributors
>>> +    Copyright 2019 The DPDK contributors
>>>  
>>> -.. abi_api_policy:
>>> +.. _abi_policy:
>>>  
>>> -DPDK ABI/API policy
>>> -===================
>>> +ABI Policy
>>> +==========
>>>  
>>>  Description
>>>  -----------
>>>  
>>> -This document details some methods for handling ABI management in the DPDK.
>>> +This document details the management policy that ensures the long-term stability
>>> +of the DPDK ABI and API.
>>>  
>>>  General Guidelines
>>>  ------------------
>>>  
>>> -#. Whenever possible, ABI should be preserved
>>> -#. ABI/API may be changed with a deprecation process
>>> -#. The modification of symbols can generally be managed with versioning
>>> -#. Libraries or APIs marked in ``experimental`` state may change without constraint
>>> -#. New APIs will be marked as ``experimental`` for at least one release to allow
>>> -   any issues found by users of the new API to be fixed quickly
>>> -#. The addition of symbols is generally not problematic
>>> -#. The removal of symbols generally is an ABI break and requires bumping of the
>>> -   LIBABIVER macro
>>> -#. Updates to the minimum hardware requirements, which drop support for hardware which
>>> -   was previously supported, should be treated as an ABI change.
>>> -
>>> -What is an ABI
>>> -~~~~~~~~~~~~~~
>>> +#. Major ABI versions are declared every **year** and are then supported for one
>>> +   year, typically aligned with the :ref:`LTS release <stable_lts_releases>`.
>>> +#. The ABI version is managed at a project level in DPDK, with the ABI version
>>> +   reflected in all :ref:`library's soname <what_is_soname>`.
>>> +#. The ABI should be preserved and not changed lightly. ABI changes must follow
>>> +   the outlined :ref:`deprecation process <abi_changes>`.
>>> +#. The addition of symbols is generally not problematic. The modification of
>>> +   symbols is managed with :ref:`ABI Versioning <abi_versioning>`.
>>> +#. The removal of symbols is considered an :ref:`ABI breakage <abi_breakages>`,
>>> +   once approved these will form part of the next ABI version.
>>> +#. Libraries or APIs marked as :ref:`Experimental <experimental_apis>` are not
>>> +   considered part of an ABI version and may change without constraint.
>>> +#. Updates to the :ref:`minimum hardware requirements <hw_rqmts>`, which drop
>>> +   support for hardware which was previously supported, should be treated as an
>>> +   ABI change.
>>> +
>>> +.. note::
>>> +
>>> +   In 2019, the DPDK community stated it's intention to move to ABI stable
>>> +   releases, over a number of release cycles. Beginning with maintaining ABI
>>> +   stability through one year of DPDK releases starting from DPDK 19.11. This
>>> +   policy will be reviewed in 2020, with intention of lengthening the stability
>>> +   period.
>>> +
>>> +What is an ABI?
>>> +~~~~~~~~~~~~~~~
>>>  
>>>  An ABI (Application Binary Interface) is the set of runtime interfaces exposed
>>>  by a library. It is similar to an API (Application Programming Interface) but
>>> @@ -39,30 +52,67 @@ Therefore, in the case of dynamic linking, it is critical that an ABI is
>>>  preserved, or (when modified), done in such a way that the application is unable
>>>  to behave improperly or in an unexpected fashion.
>>>  
>>> +What is an ABI version?
>>> +~~~~~~~~~~~~~~~~~~~~~~~
>>>  
>>> -ABI/API Deprecation
>>> --------------------
>>> +An ABI version is an instance of a library's ABI at a specific release. Certain
>>> +releases are considered by the community to be milestone releases, the yearly
>>> +LTS for example. Supporting those milestone release's ABI for some number of
>>> +subsequent releases is desirable to facilitate application upgrade. Those ABI
>>> +version's aligned with milestones release are therefore called 'ABI major
>>> +versions' and are supported for some number of releases.
>>> +
>>> +More details on major ABI version can be found in the :ref:`ABI versioning
>>> +<major_abi_versions>` guide.
>>>  
>>>  The DPDK ABI policy
>>> -~~~~~~~~~~~~~~~~~~~
>>> +-------------------
>>> +
>>> +A major ABI version is declared every year, aligned with that year's LTS
>>> +release, e.g. v19.11. This ABI version is then supported for one year by all
>>> +subsequent releases within that time period, until the next LTS release, e.g.
>>> +v20.11.
>>> +
>>> +At the declaration of a major ABI version, major version numbers encoded in
>>> +libraries soname's are bumped to indicate the new version, with the minor
>>> +version reset to ``0``. An example would be ``librte_eal.so.20.3`` would become
>>> +``librte_eal.so.21.0``.
>>> +
>>> +The ABI may then change multiple times, without warning, between the last major
>>> +ABI version increment and the HEAD label of the git tree, with the condition
>>> +that ABI compatibility with the major ABI version is preserved and therefore
>>> +soname's do not change.
>>> +
>>> +Minor versions are incremented to indicate the release of a new ABI compatible
>>> +DPDK release, typically the DPDK quarterly releases. An example of this, might
>>> +be that ``librte_eal.so.20.1`` would indicate the first ABI compatible DPDK
>>> +release, following the declaration of the new major ABI version ``20``.
>>> +
>>> +ABI versions, are supported by each release until such time as the next major
>>> +ABI version is declared. At that time, the deprecation of the previous major ABI
>>> +version will be noted in the Release Notes with guidance on individual symbol
>>> +depreciation and upgrade notes provided.
>>>  
>>> -ABI versions are set at the time of major release labeling, and the ABI may
>>> -change multiple times, without warning, between the last release label and the
>>> -HEAD label of the git tree.
>>> +.. _abi_changes:
>>>  
>>> -ABI versions, once released, are available until such time as their
>>> -deprecation has been noted in the Release Notes for at least one major release
>>> -cycle. For example consider the case where the ABI for DPDK 2.0 has been
>>> -shipped and then a decision is made to modify it during the development of
>>> -DPDK 2.1. The decision will be recorded in the Release Notes for the DPDK 2.1
>>> -release and the modification will be made available in the DPDK 2.2 release.
>>> +ABI Changes
>>> +~~~~~~~~~~~
>>>  
>>> -ABI versions may be deprecated in whole or in part as needed by a given
>>> -update.
>>> +The ABI may still change after the declaration of a major ABI version, that is
>>> +new APIs may be still added or existing APIs may be modified.
>>>  
>>> -Some ABI changes may be too significant to reasonably maintain multiple
>>> -versions. In those cases ABI's may be updated without backward compatibility
>>> -being provided. The requirements for doing so are:
>>> +.. Warning::
>>> +
>>> +   Note that, the process for ABI deprecation should not be undertaken lightly.
>>> +   ABI stability is extremely important for downstream consumers of the DPDK,
>>
>>> +   especially when distributed in shared object form. Every effort should be
>>> +   made to preserve the ABI whenever possible. The ABI should only be changed
>>> +   for significant reasons, such as performance enhancements. ABI breakage due
>>> +   to changes such as reorganizing public structure fields for aesthetic or
>>> +   readability purposes should be avoided.
>>> +
>>
>> This text is not changed and it reads like *any* performance enhancement
>> is a good enough reason for an ABI break. Can't obviously quantify it,
>> but maybe "major performance enhancement" is closer to the intended
>> tone? Sorry for nit-picking over one word!
> 
> I agree, I was in two minds about whether to clarify this section or if
> it was fine as-is. I left it there as a general warning to stop and
> think before you ask to change the ABI. A performance gain alone doesn't
> absolve the contributor from an obligation to preserve ABI compatibility.
> 
> Perhaps reword as follows?
> 
> .. Warning::
> 
>    Note that, this policy details the method by which the ABI may be
> changed, with due regard to preserving compatibility and observing
> depreciation notices. This process however should not be undertaken
> lightly, as a general rule ABI stability is extremely important for
> downstream consumers of DPDK. The ABI should only be changed for
> significant reasons, such as performance enhancements. ABI breakages due
> to changes such as reorganizing public structure fields for aesthetic or
> readability purposes should be avoided.
> 

Hi Ray,

ok, thanks for checking it.

>>
>>> +
>>> +The requirements for changing the ABI are:
>>>  
>>>  #. At least 3 acknowledgments of the need to do so must be made on the
>>>     dpdk.org mailing list.
>>> @@ -71,34 +121,119 @@ being provided. The requirements for doing so are:
>>>       no maintainer is available for the component, the tree/sub-tree maintainer
>>>       for that component must acknowledge the ABI change instead.
>>>  
>>> +   - The acknowledgment of a member of the technical board, as a delegate of the
>>> +     `technical board <https://core.dpdk.org/techboard/>`_ acknowledging the
>>> +     need for the ABI change, is also mandatory.
>>> +
>>>     - It is also recommended that acknowledgments from different "areas of
>>>       interest" be sought for each deprecation, for example: from NIC vendors,
>>>       CPU vendors, end-users, etc.
>>>  
>>> -#. The changes (including an alternative map file) can be included with
>>> -   deprecation notice, in wrapped way by the ``RTE_NEXT_ABI`` option,
>>> -   to provide more details about oncoming changes.
>>> -   ``RTE_NEXT_ABI`` wrapper will be removed when it become the default ABI.
>>> -   More preferred way to provide this information is sending the feature
>>> -   as a separate patch and reference it in deprecation notice.
>>> +#. Backward compatibly with the major ABI version must be maintained through
>>
>> s/compatibly/compatibility/
> 
> ACK
> 
>>
>>> +   :ref:`abi_versioning`, with :ref:`forward-only <forward-only>` compatibility
>>> +   offered for any ABI changes that are indicated to be part of the next ABI
>>> +   version.
>>>  
>>> -#. A full deprecation cycle, as explained above, must be made to offer
>>> -   downstream consumers sufficient warning of the change.
>>> +   - In situations were backward compatibility is not possible, read the
>>
>> s/were/where/
> 
> ACK
> 
>>
>>> +     section on :ref:`abi_breakages`.
>>>  
>>> -Note that the above process for ABI deprecation should not be undertaken
>>> -lightly. ABI stability is extremely important for downstream consumers of the
>>> -DPDK, especially when distributed in shared object form. Every effort should
>>> -be made to preserve the ABI whenever possible. The ABI should only be changed
>>> -for significant reasons, such as performance enhancements. ABI breakage due to
>>> -changes such as reorganizing public structure fields for aesthetic or
>>> -readability purposes should be avoided.
>>> +   - No backward or forward compatibility is offered for API changes marked as
>>> +     ``experimental``, as described in the section on :ref:`Experimental APIs
>>> +     and Libraries <experimental_apis>`.
>>>  
>>> -.. note::
>>> +#. If a newly proposed API functionally replaces an existing one, when the new
>>> +   API becomes non-experimental, then the old one is marked with
>>> +   ``__rte_deprecated``.
>>> +
>>> +    - The depreciated API should follow the notification process to be removed,
>>> +      see  :ref:`deprecation_notices`.
>>> +
>>> +    - At the declaration of the next major ABI version, those ABI changes then
>>> +      become a formal part of the new ABI and the requirement to preserve ABI
>>> +      compatibility with the last major ABI version is then dropped.
>>> +
>>> +    - The responsibility for removing redundant ABI compatibility code rests
>>> +      with the original contributor of the ABI changes, failing that, then with
>>> +      the contributor's company and then finally with the maintainer.
>>> +
>>> +.. _forward-only:
>>> +
>>> +.. Note::
>>> +
>>> +   Note that forward-only compatibility is offered for those changes made
>>> +   between major ABI versions. As a library's soname can only describe
>>> +   compatibility with the last major ABI version, until the next major ABI
>>> +   version is declared, these changes therefore cannot be resolved as a runtime
>>> +   dependency through the soname. Therefore any application wishing to make use
>>> +   of these ABI changes can only ensure that it's runtime dependencies are met
>>> +   through Operating System package versioning.
>>> +
>>> +.. _hw_rqmts:
>>> +
>>> +.. Note::
>>>  
>>>     Updates to the minimum hardware requirements, which drop support for hardware
>>>     which was previously supported, should be treated as an ABI change, and
>>> -   follow the relevant deprecation policy procedures as above: 3 acks and
>>> -   announcement at least one release in advance.
>>> +   follow the relevant deprecation policy procedures as above: 3 acks, technical
>>> +   board approval and announcement at least one release in advance.
>>> +
>>> +.. _abi_breakages:
>>> +
>>> +ABI Breakages
>>> +~~~~~~~~~~~~~
>>> +
>>> +For those ABI changes that are too significant to reasonably maintain multiple
>>> +symbol versions, there is an amended process. In these cases, ABIs may be
>>> +updated without the requirement of backward compatibility being provided. These
>>> +changes must follow the `same process :ref:`described above <abi_changes>` as non-breaking
>>> +changes, however with the following additional requirements:
>>> +
>>> +#. ABI breaking changes (including an alternative map file) can be included with
>>> +   deprecation notice, in wrapped way by the ``RTE_NEXT_ABI`` option, to provide
>>> +   more details about oncoming changes. ``RTE_NEXT_ABI`` wrapper will be removed
>>> +   at the declaration of the next major ABI version.
>>> +
>>> +#. Once approved, and after the depreciation notice has been observed these
>>> +   changes will form part of the next declared major ABI version.
>>> +
>>> +Examples of ABI Changes
>>> +~~~~~~~~~~~~~~~~~~~~~~~
>>> +
>>> +The following are examples of allowable ABI changes occurring between
>>> +declarations of major ABI versions.
>>> +
>>> +* DPDK 19.11 release, defines the function ``rte_foo()``, and ``rte_foo()``
>>> +  as part of the major ABI version ``20``.
>>> +
>>> +* DPDK 20.02 release defines a new function ``rte_foo(uint8_t bar)``, and
>>> +  this is not a problem as long as the symbol ``rte_foo@DPDK20`` is
>>> +  preserved through :ref:`abi_versioning`.
>>> +
>>> +  - The new function may be marked with the ``__rte_experimental`` tag for a
>>> +    number of releases, as described in the section :ref:`experimental_apis`.
>>> +
>>> +  - Once ``rte_foo(uint8_t bar)`` becomes non-experimental ``rte_foo()`` is then
>>> +    declared as ``__rte_depreciated``, with an associated deprecation notice
>>> +    provided.
>>> +
>>> +* DPDK 19.11 is not re-released to include ``rte_foo(uint8_t bar)``, the new
>>> +  version of ``rte_foo`` only exists from DPDK 20.02 onwards as described in the
>>> +  :ref:`note on forward-only compatibility<forward-only>`.
>>> +
>>> +* DPDK 20.02 release defines the experimental function ``__rte_experimental
>>> +  rte_baz()``. This function may or may not exist in the DPDK 20.05 release.
>>> +
>>> +* An application ``dPacket`` wishes to use ``rte_foo(uint8_t bar)``, before the
>>> +  declaration of the DPDK ``21`` major API version. The application can only
>>> +  ensure it's runtime dependencies are met by specifying ``DPDK (>= 20.2)`` as
>>> +  an explicit package dependency, as the soname only may only indicate the
>>> +  supported major ABI version.
>>> +
>>> +* At the release of DPDK 20.11, the function ``rte_foo(uint8_t bar)`` becomes
>>> +  formally part of then new major ABI version DPDK 21.0 and ``rte_foo()`` may be
>>> +  removed.
>>> +
>>> +.. _deprecation_notices:
>>>  
>>>  Examples of Deprecation Notices
>>>  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> @@ -106,46 +241,42 @@ Examples of Deprecation Notices
>>>  The following are some examples of ABI deprecation notices which would be
>>>  added to the Release Notes:
>>>  
>>> -* The Macro ``#RTE_FOO`` is deprecated and will be removed with version 2.0,
>>> -  to be replaced with the inline function ``rte_foo()``.
>>> +* The Macro ``#RTE_FOO`` is deprecated and will be removed with ABI version
>>> +  21, to be replaced with the inline function ``rte_foo()``.
>>>  
>>>  * The function ``rte_mbuf_grok()`` has been updated to include a new parameter
>>> -  in version 2.0. Backwards compatibility will be maintained for this function
>>> -  until the release of version 2.1
>>> +  in version 20.2. Backwards compatibility will be maintained for this function
>>> +  until the release of the new DPDK major ABI version 21, in DPDK version
>>> +  20.11.
>>>  
>>> -* The members of ``struct rte_foo`` have been reorganized in release 2.0 for
>>> +* The members of ``struct rte_foo`` have been reorganized in DPDK 20.02 for
>>>    performance reasons. Existing binary applications will have backwards
>>> -  compatibility in release 2.0, while newly built binaries will need to
>>> -  reference the new structure variant ``struct rte_foo2``. Compatibility will
>>> -  be removed in release 2.2, and all applications will require updating and
>>> +  compatibility in release 20.02, while newly built binaries will need to
>>> +  reference the new structure variant ``struct rte_foo2``. Compatibility will be
>>> +  removed in release 20.11, and all applications will require updating and
>>>    rebuilding to the new structure at that time, which will be renamed to the
>>>    original ``struct rte_foo``.
>>>  
>>>  * Significant ABI changes are planned for the ``librte_dostuff`` library. The
>>> -  upcoming release 2.0 will not contain these changes, but release 2.1 will,
>>> +  upcoming release 20.02 will not contain these changes, but release 20.11 will,
>>>    and no backwards compatibility is planned due to the extensive nature of
>>> -  these changes. Binaries using this library built prior to version 2.1 will
>>> +  these changes. Binaries using this library built prior to ABI version 21 will
>>>    require updating and recompilation.
>>>  
>>> -New API replacing previous one
>>> -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> -
>>> -If a new API proposed functionally replaces an existing one, when the new API
>>> -becomes non-experimental then the old one is marked with ``__rte_deprecated``.
>>> -Deprecated APIs are removed completely just after the next LTS.
>>> -
>>> -Reminder that old API should follow deprecation process to be removed.
>>> +.. _experimental_apis:
>>>  
>>> +Experimental
>>> +------------
>>>  
>>> -Experimental APIs
>>> ------------------
>>> +APIs
>>> +~~~~
>>>  
>>> -APIs marked as ``experimental`` are not considered part of the ABI and may
>>> -change without warning at any time.  Since changes to APIs are most likely
>>> -immediately after their introduction, as users begin to take advantage of
>>> -those new APIs and start finding issues with them, new DPDK APIs will be
>>> -automatically marked as ``experimental`` to allow for a period of stabilization
>>> -before they become part of a tracked ABI.
>>> +APIs marked as ``experimental`` are not considered part of an ABI version and
>>> +may change without warning at any time. Since changes to APIs are most likely
>>> +immediately after their introduction, as users begin to take advantage of those
>>> +new APIs and start finding issues with them, new DPDK APIs will be automatically
>>> +marked as ``experimental`` to allow for a period of stabilization before they
>>> +become part of a tracked ABI version.
>>>  
>>>  Note that marking an API as experimental is a multi step process.
>>>  To mark an API as experimental, the symbols which are desired to be exported
>>> @@ -163,7 +294,16 @@ In addition to tagging the code with ``__rte_experimental``,
>>>  the doxygen markup must also contain the EXPERIMENTAL string,
>>>  and the MAINTAINERS file should note the EXPERIMENTAL libraries.
>>>  
>>> -For removing the experimental tag associated with an API, deprecation notice
>>> -is not required. Though, an API should remain in experimental state for at least
>>> -one release. Thereafter, normal process of posting patch for review to mailing
>>> -list can be followed.
>>> +For removing the experimental tag associated with an API, deprecation notice is
>>> +not required. Though, an API should remain in experimental state for at least
>>> +one release. Thereafter, the normal process of posting patch for review to
>>> +mailing list can be followed.
>>> +
>>> +Libraries
>>> +~~~~~~~~~
>>> +
>>> +Libraries marked as ``experimental`` are entirely not considered part of an ABI
>>> +version, and may change without warning at any time. Experimental libraries
>>> +always have a major version of ``0`` to indicate they exist outside of
>>> +:ref:`abi_versioning` , with the minor version incremented with each ABI change
>>> +to library.
>>> diff --git a/doc/guides/contributing/stable.rst b/doc/guides/contributing/stable.rst
>>> index 6a5eee9..d95c200 100644
>>> --- a/doc/guides/contributing/stable.rst
>>> +++ b/doc/guides/contributing/stable.rst
>>> @@ -1,7 +1,7 @@
>>>  ..  SPDX-License-Identifier: BSD-3-Clause
>>>      Copyright 2018 The DPDK contributors
>>>  
>>> -.. stable_lts_releases:
>>> +.. _stable_lts_releases:
>>>  
>>>  DPDK Stable Releases and Long Term Support
>>>  ==========================================
>>> @@ -53,6 +53,9 @@ year's November (X.11) release will be maintained as an LTS for 2 years.
>>>  After the X.11 release, an LTS branch will be created for it at
>>>  http://git.dpdk.org/dpdk-stable where bugfixes will be backported to.
>>>  
>>> +A LTS release may align with the declaration of a new major ABI version,
>>> +please read the :ref:`abi_policy` for more information.
>>> +
>>
>> Above is worth to mention, but as discussed on call earlier today, the
>> changes below should be dropped from this patchset. At present each LTS
>> minor release (e.g. 18.11.2) maintains the API/ABI of the original LTS
>> release (e.g. 18.11) and that is not changing.
> 
> ACK, I will remove
> 
>>
>> What type of non-ABI breaking things are backported to LTS branches can
>> be discussed during the LTS presentation in DPDK userspace.
> 
> Do you anticipate any updates here?
> 

I should probably update it to add some more info, similar to one of the
slides from Bordeaux re examples etc.

thanks,
Kevin.

> Thanks,
> 
> Ray K
> 
>>
>> thanks,
>> Kevin.
>>
>>>  It is anticipated that there will be at least 4 releases per year of the LTS
>>>  or approximately 1 every 3 months. However, the cadence can be shorter or
>>>  longer depending on the number and criticality of the backported
>>> @@ -68,10 +71,13 @@ point the LTS branch will no longer be maintained with no further releases.
>>>  What changes should be backported
>>>  ---------------------------------
>>>  
>>> -Backporting should be limited to bug fixes. All patches accepted on the master
>>> -branch with a Fixes: tag should be backported to the relevant stable/LTS
>>> -branches, unless the submitter indicates otherwise. If there are exceptions,
>>> -they will be discussed on the mailing lists.
>>> +Backporting is a naturally conservative activity, and therefore should only
>>> +include bug fixes and support for new hardware, were adding support does not
>>> +necessitate DPDK ABI/API changes.
>>> +
>>> +All patches accepted on the master branch with a Fixes: tag should be backported
>>> +to the relevant stable/LTS branches, unless the submitter indicates otherwise.
>>> +If there are exceptions, they will be discussed on the mailing lists.
>>>  
>>>  Fixes suitable for backport should have a ``Cc: stable@dpdk.org`` tag in the
>>>  commit message body as follows::
>>> @@ -86,13 +92,18 @@ commit message body as follows::
>>>       Signed-off-by: Alex Smith <alex.smith@example.com>
>>>  
>>>  
>>> -Fixes not suitable for backport should not include the ``Cc: stable@dpdk.org`` tag.
>>> +Fixes not suitable for backport should not include the ``Cc: stable@dpdk.org``
>>> +tag.
>>>  
>>> -Features should not be backported to stable releases. It may be acceptable, in
>>> -limited cases, to back port features for the LTS release where:
>>> +New features, with the exception of new hardware support, should not be
>>> +backported to stable releases. In the case of new hardware support or any other
>>> +exceptional circumstances limited backporting maybe permitted to the LTS release
>>> +where:
>>>  
>>> -* There is a justifiable use case (for example a new PMD).
>>> -* The change is non-invasive.
>>> +* There is a justifiable use case, for example the change is required to support
>>> +  a new platform or device (for example a new PMD).
>>> +* The change is ABI/API preserving, it does not present an obvious "new feature"
>>> +  to end consumer.
>>>  * The work of preparing the backport is done by the proposer.
>>>  * There is support within the community.
>>>  
>>> @@ -119,10 +130,3 @@ A Stable Release will be released by:
>>>    list.
>>>  
>>>  Stable releases are available on the `dpdk.org download page <http://core.dpdk.org/download/>`_.
>>> -
>>> -
>>> -ABI
>>> ----
>>> -
>>> -The Stable Release should not be seen as a way of breaking or circumventing
>>> -the DPDK ABI policy.
>>>



  reply index

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-15 10:23 [dpdk-dev] [PATCH v3 0/4] " Ray Kinsella
2019-08-15 10:23 ` [dpdk-dev] [PATCH v3 1/4] doc: separate versioning.rst into version and policy Ray Kinsella
2019-08-15 10:23 ` [dpdk-dev] [PATCH v3 2/4] doc: changes to abi policy introducing major abi versions Ray Kinsella
2019-08-30 16:20   ` Kevin Traynor
2019-09-24 11:32     ` Ray Kinsella
2019-09-25 12:29       ` Kevin Traynor [this message]
2019-08-15 10:23 ` [dpdk-dev] [PATCH v3 3/4] doc: updates to versioning guide for " Ray Kinsella
2019-08-15 10:23 ` [dpdk-dev] [PATCH v3 4/4] doc: add maintainer for abi policy Ray Kinsella

Reply instructions:

You may reply publically to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3cfa4f0d-289b-68e6-74fe-3cee7c9e37d1@redhat.com \
    --to=ktraynor@redhat.com \
    --cc=bluca@debian.org \
    --cc=bruce.richardson@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=hemant.agrawal@nxp.com \
    --cc=jerinj@marvell.com \
    --cc=john.mcnamara@intel.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=marko.kovacevic@intel.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=mdr@ashroe.eu \
    --cc=nhorman@tuxdriver.com \
    --cc=olivier.matz@6wind.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

DPDK-dev Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/dpdk-dev/0 dpdk-dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dpdk-dev dpdk-dev/ https://lore.kernel.org/dpdk-dev \
		dev@dpdk.org
	public-inbox-index dpdk-dev

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git