All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Richardson, Bruce" <bruce.richardson-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: Neil Horman <nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>,
	Thomas Monjalon
	<thomas.monjalon-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
Cc: "dev-VfR2kkLFssw@public.gmane.org" <dev-VfR2kkLFssw@public.gmane.org>
Subject: Re: [PATCH 0/4] Add DSO symbol versioning to support backwards compatibility
Date: Fri, 19 Sep 2014 08:57:50 +0000	[thread overview]
Message-ID: <59AF69C657FD0841A61C55336867B5B0343F3852@IRSMSX103.ger.corp.intel.com> (raw)
In-Reply-To: <20140918191401.GP20389-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>

> -----Original Message-----
> From: Neil Horman [mailto:nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org]
> Sent: Thursday, September 18, 2014 8:14 PM
> To: Thomas Monjalon
> Cc: dev-VfR2kkLFssw@public.gmane.org; Richardson, Bruce
> Subject: Re: [PATCH 0/4] Add DSO symbol versioning to support backwards
> compatibility
> 
> On Thu, Sep 18, 2014 at 08:23:36PM +0200, Thomas Monjalon wrote:
> > Hi Neil,
> >
> > 2014-09-15 15:23, Neil Horman:
> > > The DPDK ABI develops and changes quickly, which makes it difficult for
> > > applications to keep up with the latest version of the library, especially when
> > > it (the DPDK) is built as a set of shared objects, as applications may be built
> > > against an older version of the library.
> > >
> > > To mitigate this, this patch series introduces support for library and symbol
> > > versioning when the DPDK is built as a DSO.  Specifically, it does 4 things:
> > >
> > > 1) Adds initial support for library versioning.  Each library now has a version
> > > map that explicitly calls out what symbols are exported to using applications,
> > > and assigns version(s) to them
> > >
> > > 2) Adds support macros so that when libraries create incompatible ABI's,
> > > multiple versions may be supported so that applications linked against older
> > > DPDK releases can continue to function
> > >
> > > 3) Adds library soname versioning suffixes so that when ABI's must be broken
> in
> > > a fashion that requires a rebuild of older applications, they will break at load
> > > time, rather than cause unexpected issues at run time.
> > >
> > > 4) Adds documentation for ABI policy, and provides space to document
> deprecated
> > > ABI versions, so that applications might be warned of impending changes.
> > >
> > > With these elements in place the DPDK has some support to allow for the
> extended
> > > maintenence of older API's while still allowing the freedom to develop new
> and
> > > improved API's.
> > >
> > > Implementing this feature will require some additional effort on the part of
> > > developers and reviewers.  When reviewing patches, must be checked
> against
> > > existing exports to ensure that the function prototypes are not changing.  If
> > > they are, the versioning macros must be used, and the library export map
> should
> > > be updated to reflect the new version of the function.
> > >
> > > When data structures change, if those structures are application accessible,
> > > apis that accept or return instances of those data structures should have new
> > > versions created so that users of the old data structure version might co-
> exist
> > > at the same time.
> >
> > Thanks for your efforts.
> > But I feel this change has too many constraints for the current status of
> > the DPDK. It's probably too early to adopt such policy.
> >
> I think you may be misunderstanding something.  What constraints do you
> beleive
> that this patch imposes?  Note it doesn't in any way prevent changes to the ABI
> of the DPDK, but rather gives us infrastructure to support multiple ABI
> revisions at the same time, so that applications built against DPDK shared
> libraries can continue to function properly at least for some time until we
> decide to deprecate that ABI level.
> 

I view all this as a positive step. I consider backward compatibility as something that should always be encouraged, and I agree with Neil that this should allow us to guarantee compatibility for our customers while still having a path open to us to change things if we really need to.

> This is all based on the versioning strategy outlined here:
> http://www.akkadia.org/drepper/dsohowto.pdf
> 
> That may help clarify things for you.
> 
> > By the way, this versioning doesn't cover structure changes.
> No, it doesn't.  No link-time mechanism does so.
> 
> > How could it be managed?
> Thats a subject that is open to discussion, but my initial thinking is that we
> need to handle it on a case by case basis:
> 
> * For minor updates, where allocation of a structure is done on the heap and
> new
> fields need to be added, appending them to the end of a structure and providing
> an initial value is sufficient.
> 
> * For major changes, where fields need to be removed, or re-arranged, mostly
> likely the API surfaces which accept or return those structures as
> inputs/outputs will need to have new versions written to accept the new version
> of the structure, and internally we will have to support both formats for a time
> (according to the policy I documented, that is currently a single major
> release).  I.e. if you want to change struct foo, which is accepted as a
> parameter for the function bar(struct foo *ptr), then for a release we would
> need to create struct foo_v2 with the new format, map a new function foo_v2
> to
> the exported foo@@DPDK_1.(X+1), and internally make the foo functions
> understand
> both the origional and v2 versions of the structure.  Then in DPDK release
> 1.X+2, we can remove the old version after posting a deprecation notice with
> version 1.(X+1)

I really, really like having an official deprecation policy. The one proposed seems reasonable as a start point - we can always decide later whether we want a 1, 2 or 3 release gap between marking something as deprecated and having it removed.

/Bruce

 

  parent reply	other threads:[~2014-09-19  8:57 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-15 19:23 [PATCH 0/4] Add DSO symbol versioning to support backwards compatibility Neil Horman
     [not found] ` <1410809031-19114-1-git-send-email-nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2014-09-15 19:23   ` [PATCH 1/4] compat: Add infrastructure to support symbol versioning Neil Horman
     [not found]     ` <1410809031-19114-2-git-send-email-nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2014-09-23 10:39       ` Sergio Gonzalez Monroy
     [not found]         ` <20140923103923.GA4642-IWE99D/oH1/+pXziaqXtF9h3ngVCH38I@public.gmane.org>
2014-09-23 14:58           ` Neil Horman
     [not found]             ` <20140923145829.GB12884-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-09-23 16:29               ` Sergio Gonzalez Monroy
     [not found]                 ` <20140923162947.GA22463-IWE99D/oH1/+pXziaqXtF9h3ngVCH38I@public.gmane.org>
2014-09-23 17:31                   ` Neil Horman
2014-09-25 18:52       ` [PATCH 1/4 v2] " Neil Horman
     [not found]         ` <1411671152-27245-1-git-send-email-nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2014-09-26 14:16           ` Sergio Gonzalez Monroy
     [not found]             ` <20140926141608.GA10993-IWE99D/oH1/+pXziaqXtF9h3ngVCH38I@public.gmane.org>
2014-09-26 15:16               ` Neil Horman
     [not found]                 ` <20140926151630.GD5619-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-09-26 15:33                   ` Sergio Gonzalez Monroy
     [not found]                     ` <20140926153304.GA16923-IWE99D/oH1/+pXziaqXtF9h3ngVCH38I@public.gmane.org>
2014-09-26 16:22                       ` Neil Horman
     [not found]                         ` <20140926162256.GF5619-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-09-26 19:19                           ` Neil Horman
2014-09-29 15:44       ` [PATCH 1/4 v3] " Neil Horman
     [not found]         ` <1412005443-20000-1-git-send-email-nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2014-09-30  8:13           ` Sergio Gonzalez Monroy
2014-09-30 15:18       ` [PATCH 1/4 v4] " Neil Horman
     [not found]         ` <1412090280-9306-1-git-send-email-nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2014-10-01 10:15           ` Sergio Gonzalez Monroy
     [not found]             ` <20141001101530.GA28292-IWE99D/oH1/+pXziaqXtF9h3ngVCH38I@public.gmane.org>
2014-10-01 10:38               ` Neil Horman
2014-10-01 11:28           ` Sergio Gonzalez Monroy
2014-09-15 19:23   ` [PATCH 2/4] Provide initial versioning for all DPDK libraries Neil Horman
     [not found]     ` <1410809031-19114-3-git-send-email-nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2014-09-19  9:45       ` Bruce Richardson
2014-09-19 10:22         ` Neil Horman
2014-10-01 11:25       ` Sergio Gonzalez Monroy
     [not found]         ` <20141001112546.GA17019-IWE99D/oH1/+pXziaqXtF9h3ngVCH38I@public.gmane.org>
2014-10-01 14:43           ` Neil Horman
2014-09-15 19:23   ` [PATCH 3/4] Add library version extenstion Neil Horman
     [not found]     ` <1410809031-19114-4-git-send-email-nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2014-10-01 11:27       ` Sergio Gonzalez Monroy
2014-09-15 19:23   ` [PATCH 4/4] docs: Add ABI documentation Neil Horman
     [not found]     ` <1410809031-19114-5-git-send-email-nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2014-10-01 16:06       ` Sergio Gonzalez Monroy
2014-09-18 18:23   ` [PATCH 0/4] Add DSO symbol versioning to support backwards compatibility Thomas Monjalon
2014-09-18 19:14     ` Neil Horman
     [not found]       ` <20140918191401.GP20389-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-09-19  8:57         ` Richardson, Bruce [this message]
2014-09-19 14:18         ` Venkatesan, Venky
     [not found]           ` <541C3B3C.9070105-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-09-19 17:45             ` Neil Horman
2014-09-24 18:19         ` Neil Horman
     [not found]           ` <20140924181940.GB4651-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-09-26 10:41             ` Thomas Monjalon
2014-09-26 14:45               ` Neil Horman
     [not found]                 ` <20140926144549.GA5619-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-09-26 22:02                   ` Stephen Hemminger
2014-09-27  2:22                     ` Neil Horman
2014-10-01 18:59                   ` Neil Horman
     [not found]                     ` <20141001185940.GA27437-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-10-07 21:01                       ` Neil Horman
     [not found]                         ` <20141007210135.GH27719-B26myB8xz7F8NnZeBjwnZQMhkBWG/bsMQH7oEaQurus@public.gmane.org>
2014-10-08 15:57                           ` Thomas Monjalon
2014-10-08 18:46                             ` Butler, Siobhan A
2014-10-08 19:09                             ` Neil Horman

Reply instructions:

You may reply publicly 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=59AF69C657FD0841A61C55336867B5B0343F3852@IRSMSX103.ger.corp.intel.com \
    --to=bruce.richardson-ral2jqcrhueavxtiumwx3w@public.gmane.org \
    --cc=dev-VfR2kkLFssw@public.gmane.org \
    --cc=nhorman-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org \
    --cc=thomas.monjalon-pdR9zngts4EAvxtiuMwx3w@public.gmane.org \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.