[OpenIndiana-discuss] How many versions of libs/apps should OI provide?
Alexander Pyhalov
alp at rsu.ru
Thu Dec 22 09:44:45 UTC 2016
Hi, Jim.
On 12/22/16 03:22 AM, Jim Klimov wrote:
>
> We had a sort of a discussion on IRC today, which ended up in a choice better made or at least discussed by community than by the back-alley dealers ;)
>
> So, as software evolution marches on, some projects' newer releases bring new features, bugs and ABI/API incompatibilities that make them different from older releases - and sometimes not backwards compatible (most projects try to make updates easy for their consumers, some don't).
>
> As a result, the distro, such as OI/Hipster (and especially Hipster, posing as bleeding-edge rolling-release), has to balance and make a choice between:
>
> a) providing only the newest versions of libs/apps (accept PRs that integrate a new version and remove old ones);
>
> b) also provide older releases at least partially (e.g. libs that can be runtime-linked against by older binaries - especially if new ABI is not backwards-compatible and/or shared-library's SONAME numbers changed; or even headers, pkgconfig snippets, etc. that can be built against from source - especially if APIs changed), at least in cases where someone (distro maintainers, PR authors) believe that lack of old files can be an issue for end-users - but note that moving forward is often not an issue for binaries, if the ABIs were declared well and kept compatible by upstream sources;
>
> c) don't rush for newest releases - ain't broke don't fix; backport CVE fixes to existing old-version recipes and be reluctant against new unknown bugs in new developments; perhaps try to stay on par with software versions delivered by stable releases of other distros like Debian, RHEL/CentOS or FreeBSD (which often considerably lag behind bleeding-edge as well) and pick up their security and bug fixes ;)
>
I'd like to separate libraries and applications.
In general case we want to provide only latest version of application if
we can.
There are several classes of exceptions, however. These are databases
(when storage format changes between major releases), translators (when
language can significantly change between releases). and some
applications with significant changes in configuration and ABI for
third-party modules (like apache 2.2 and 2.4). Did I miss something here?
As for libraries, I'd go from consumers. I'd be reluctant to add library
just to have it. If we add library without consumers, we even can't be
sure that it actually works as expected. With consumers we can at least
consider that it works for this consumer. So, I'd consider applications
first-class citizens, not libraries.
When do we need to add new major version of some library? If we look
from this point of view - only when some application requires this or,
perhaps, when existing library has significant issues which cannot be
fixed without updating to new major version.
Now, what can we do when we decided to bump library to new major
version? First of all, I'd consider if all in-gate consumers can be
switched to new version. If they can't, we should ship several versions
so that both of them can be used (good examples are gtk2/gtk3, bad
examples - libevent/libevent-2 - these needed significant patches to
coexist). Let's consider, all oi-userland consumers can be switched to
new version.
In this case we have a lot of question - do we ship old version or drop
it? Do we ship just old binaries or all files (headers,pkgconfig),
necessary for development? If we preserve old library, when are we going
to drop it?
I don't have good answers on these questions. So far I've checked if
some library is rather wide used (for example in SFE). If it's not, I'd
rather drop old version and introduce flag day.
I suppose these answers are closely related to having releases and
guaranteed stable API/ABI. So, that we can guarantee that this ABI is
not broken before next major release... Damn, it doesn't work with
Hipster, as it means we'll have not only support one stable release, but
several branches of stable releases.... OK, next idea... This ABI is
preserved for several next releases/snapshots.... Seems more real in
current situation, but for how many snapshots should we keep some
libraries? What libraries should be protected by such guarantees? I'd be
reluctant to give such guarantees for mate/gnome libraries. In theory we
could give such guarantees for some Xorg libraries, but not all... What
about other? Can we create transparent rules, which objects are
protected by ABI-compatibility-guarantees and for how long?
Can we do it without having /stable ?
--
Best regards,
Alexander Pyhalov,
system administrator of Southern Federal University IT department
More information about the openindiana-discuss
mailing list