[Freedesktop-sdk] ABI stability and release model
Tristan Van Berkom
tristan.vanberkom at codethink.co.uk
Fri Mar 22 07:11:42 UTC 2019
Hi all,
It was raised recently by Cameron on this list that there are some
problems with ABI stability which effectively break things for end
users.
Asides from this, I think it is also worth considering concerns about
overusing end users bandwidth (to install new updates) and similarly,
the churn and compute resources we impose on downstream projects who
need to rebuild as a result of releasing new things frequently.
As this is all related to the current release model, I think we can
more effectively resolve these issues if we take a step back and
reexamine our release model and consider its side effects.
Related links can be found at the end of this mail.
Broken ABI stability
~~~~~~~~~~~~~~~~~~~~
This issue Cameron has highlighted is quite specific and in depth, so
instead of discussion that directly, I would prefer to boil this down
to a simpler hypothetical example that is easier to digest.
A.) End user installs a Flatpak, and the current 18.08 release
of the freedesktop-sdk runtime is also installed.
B.) Upstream freedesktop-sdk releases a new 18.08 release, which
is fully backwards compatible.
In this new release of the runtime, new features/symbols are
added in some libraries.
C.) A new Flatpak is built against the new 18.08 release,
and this application uses some of the new symbols in libraries
which were introduced in the latest 18.08 release.
D.) The end user installs this new Flatpak.
When the user tries to run this flatpak, the application cannot
be loaded because the user's runtime does not contain the new
symbols which are required by this new application.
To compound matters further, in Cameron's case we are talking about an
extension point that is released directly from freedesktop-sdk, which
needs to function when combined with the KDE runtime, which has not
been rebuilt and released yet - which means that even if the user had
wanted to update to a new runtime, a new runtime was not available to
the user at the time.
To summarize my understanding of the current setup:
o Runtimes, applications, and extension blobs are all distributed
separately.
o These rely only on the "18.08" version (either directly or
indirectly via a derived runtime like GNOME/KDE) to indicate that
these components are intended to function properly when combined
together on an end users' system.
o Our current model which considers backwards compatibility only,
allowing addition of new symbols in the same 18.08 version of the
runtime.
This means that it is possible to install incompatible combinations
of the Runtime/App/Extension tuple.
My thoughts are that on our side, we must provide a guarantee that a
user cannot install an incompatible runtime/app/extension combination.
Am I missing some important details ?
What does the community think about this, what should we do to ensure
that we don't break end users ?
Cheers,
-Tristan
PS: Some links to related discussion follow here...
Our documented release model:
https://gitlab.com/freedesktop-sdk/freedesktop-sdk/wikis/release
Ensure ABI stability of extensions:
https://gitlab.com/freedesktop-sdk/freedesktop-sdk/issues/669
A lot of discussion in the above is on the associated merge request:
https://gitlab.com/freedesktop-sdk/freedesktop-sdk/merge_requests/1031
Cameron's mailing list report of ABI break:
https://lists.freedesktop.org/archives/flatpak/2019-February/001482.html
Make releases less often:
https://gitlab.com/freedesktop-sdk/freedesktop-sdk/issues/674
Avoid adding new elements in stable branch which are exposed in
platform/sdk:
https://gitlab.com/freedesktop-sdk/freedesktop-sdk/issues/689
More information about the Freedesktop-sdk
mailing list