Proposal: how to make incompatible changes
andrew at aj.id.au
Mon May 4 21:00:20 AEST 2020
On Mon, 27 Apr 2020, at 23:17, Brad Bishop wrote:
> at 10:56 AM, Patrick Williams <patrick at stwcx.xyz> wrote:
> > On Thu, Apr 23, 2020 at 12:20:53PM -0400, Brad Bishop wrote:
> >> at 8:11 AM, Alexander Amelkin <a.amelkin at yadro.com> wrote:
> >>> Internally, for inter-process dbus communication the interface version
> >>> could be checked during compile time to prevent problems that couldn't be
> >>> detected by compiler/linker automatically.
> >> I like the idea of a stable, versioned DBus API. Does anyone else?
> >> In the past there was opposition to that. I’m not sure if there still is.
> > Since we're deprecating the REST-dbus path and moving towards Redfish is
> > there much advantage to a versioned DBus API?
> It helps lower the barrier to comprehension and entry. Unversioned &
> unstable IPC APIs are not normal and probably shocking to anyone that comes
> across them.
> An unstable, unversioned API encourages bad behavior - e.g. I can just make
> this in-compatible change to the API and fix all the applications at the
> same time. lock-step dependencies between 3 different projects
> (phosphor-dbus-interfaces, the client, and the server) is not a good thing.
> Put another way - with an unstable and unversioned API - what is the point
> of having all these different projects and repositories? It just becomes
> one giant monolithic code base. If that is what we want, then we should
> structure it that way. Nothing inherently wrong with that, but it seems
> like it would restrict how the code can be used. Does that bother us?
> > Alexander mentioned
> > compile-time checking of the interface, but we already have that through
> > sdbusplus. The issues are:
> > 1. Client bindings are not currently being generated.
> > 2. Not every implementation is using them.
> > 3. We don't have a good mechanism to deal with cross-repository
> > interface changes.
> > I don't think a versioned DBus API solves any of these, except maybe #3
> That's just it - these are the solution to the problems that an unstable
> and unversioned API bring, not the other way around. It is all work one
> way or the other - we can do something atypical like have an unversioned
> and unstable API, and then write a bunch of frameworks and tooling around
> that so that it can work. Or we can put in the effort to have a stable and
> versioned DBus API. I would rather do the latter because that is how
> people have been using dbus effectively for a really long time.
> > but that is only if we're going to write servers that support N-versions
> > of the interfaces.
> > It seems to me like a better investment is #1 and #2?
> To be clear on #2, use of frameworks is an optional thing. To get
> universal adoption of a framework, you have to first get universal
> acceptance of the merits of the framework. So I suggest interlocking with
> the specific application maintainers before working on #2 to avoid wasting
> > I'd personally
> > like to have #1 implemented by the end of Sept at the latest.
> > Solving
> > #3, I think, requires us to do some CI investment to support Gerrit
> > topic-based testing.
> Or we can avoid entirely, with a stable, versioned API :-)
+1 for stable, versioned APIs.
More information about the openbmc