Proposal: how to make incompatible changes
Brad Bishop
bradleyb at fuzziesquirrel.com
Mon Apr 27 23:47:00 AEST 2020
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
time.
> I'd personally
> like to have #1 implemented by the end of Sept at the latest.
Nice!
> 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 :-)
More information about the openbmc
mailing list