From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E0998A32A3 for ; Fri, 25 Oct 2019 13:43:22 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6F81C1C122; Fri, 25 Oct 2019 13:43:21 +0200 (CEST) Received: from q2relay211.mxroute.com (q2relay211.mxroute.com [160.202.107.211]) by dpdk.org (Postfix) with ESMTP id 0111F1C117 for ; Fri, 25 Oct 2019 13:43:18 +0200 (CEST) Received: from filter003.mxroute.com [168.235.111.26] (Authenticated sender: mN4UYu2MZsgR) by q2relay211.mxroute.com (ZoneMTA) with ESMTPSA id 16e02ba4f19000f36a.002 for (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256); Fri, 25 Oct 2019 11:43:14 +0000 X-Zone-Loop: 5d29585f75be0786927ad07810f64680ce025ae8355a X-Originating-IP: [168.235.111.26] Received: from galaxy.mxroute.com (unknown [23.92.70.113]) by filter003.mxroute.com (Postfix) with ESMTPS id 564C560004; Fri, 25 Oct 2019 11:43:12 +0000 (UTC) Received: from [192.198.151.44] by galaxy.mxroute.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.91) (envelope-from ) id 1iNxof-0001ti-Fa; Fri, 25 Oct 2019 07:31:37 -0400 To: David Marchand Cc: dev , Thomas Monjalon , Stephen Hemminger , Bruce Richardson , "Yigit, Ferruh" , "Ananyev, Konstantin" , Jerin Jacob Kollanukkaran , Olivier Matz , Neil Horman , Maxime Coquelin , "Mcnamara, John" , "Kovacevic, Marko" , Hemant Agrawal , Kevin Traynor , Aaron Conole References: <1569603283-1857-1-git-send-email-mdr@ashroe.eu> <1569603283-1857-3-git-send-email-mdr@ashroe.eu> From: Ray Kinsella Openpgp: preference=signencrypt Autocrypt: addr=mdr@ashroe.eu; keydata= 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 Message-ID: <6003a454-0025-09b0-9407-926b0526f6b1@ashroe.eu> Date: Fri, 25 Oct 2019 12:43:07 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-AuthUser: mdr@ashroe.eu Subject: Re: [dpdk-dev] [PATCH v6 2/4] doc: changes to abi policy introducing major abi versions X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 15/10/2019 16:11, David Marchand wrote: [SNIP] >> >> Signed-off-by: Ray Kinsella >> --- >> doc/guides/contributing/abi_policy.rst | 321 +++++++++++++++------ >> .../contributing/img/abi_stability_policy.png | Bin 0 -> 61277 bytes >> doc/guides/contributing/img/what_is_an_abi.png | Bin 0 -> 151683 bytes >> doc/guides/contributing/stable.rst | 12 +- >> 4 files changed, 241 insertions(+), 92 deletions(-) >> create mode 100644 doc/guides/contributing/img/abi_stability_policy.png >> create mode 100644 doc/guides/contributing/img/what_is_an_abi.png >> >> diff --git a/doc/guides/contributing/abi_policy.rst b/doc/guides/contributing/abi_policy.rst >> index 55bacb4..8862d24 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 `. >> +#. The ABI version is managed at a project level in DPDK, with the ABI version >> + reflected in all :ref:`library's soname `. >> +#. The ABI should be preserved and not changed lightly. ABI changes must follow >> + the outlined :ref:`deprecation process `. >> +#. The addition of symbols is generally not problematic. The modification of >> + symbols is managed with :ref:`ABI Versioning `. >> +#. The removal of symbols is considered an :ref:`ABI breakage `, >> + once approved these will form part of the next ABI version. >> +#. Libraries or APIs marked as :ref:`Experimental ` are not >> + considered part of an ABI version and may change without constraint. >> +#. Updates to the :ref:`minimum hardware requirements `, 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 > > its? ACK, done > >> + releases, over a number of release cycles. Beginning with maintaining ABI >> + stability through one year of DPDK releases starting from DPDK 19.11. This > > sentence without a verb? ACK, done - rewritten to be clearer. (maintain is a verb BTW). > >> + 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,80 @@ 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. >> >> +.. _figure_what_is_an_abi: >> + >> +.. figure:: img/what_is_an_abi.* >> + >> +*Figure 1. Illustration of DPDK API and ABI .* >> >> -ABI/API Deprecation >> -------------------- >> + >> +What is an ABI version? >> +~~~~~~~~~~~~~~~~~~~~~~~ >> + >> +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? ACK, done > milestone releases ACK, done > >> +versions' and are supported for some number of releases. >> + >> +More details on major ABI version can be found in the :ref:`ABI versioning >> +` 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``. >> >> -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. >> +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. >> >> -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. >> +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 may be deprecated in whole or in part as needed by a given >> -update. >> +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. > > deprecation? Gargh ... ACK, done > > >> >> -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: >> +.. _figure_abi_stability_policy: >> + >> +.. figure:: img/abi_stability_policy.* >> + >> +*Figure 2. Mapping of new ABI versions and ABI version compatibility to DPDK >> +releases.* >> + >> +.. _abi_changes: >> + >> +ABI Changes >> +~~~~~~~~~~~ >> + >> +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. >> + >> +.. Warning:: >> + >> + Note that, this policy details the method by which the ABI may be changed, >> + with due regard to preserving compatibility and observing depreciation > > deprecation? ACK, done > >> + 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. >> + >> +The requirements for changing the ABI are: > > [snip]