The big problem here is the fact that existing software in Linux is not designed to be base for a stable system. Kernel and some basic libraries (GLibC, Xlib and some other libraries) are designed to offer such an interface, but everything above it... it's a mess.
Developers hate the fact that distributors make it hard to distribute software, but when they act as upstream… they break ABI left and right. And you can not have your cake and eat it too: either ABI breakage is tolerated, expected and distributions constantly paper it or developers of the software must keep it stable and upgradeable.
And it's even worse than just libraries! Most languages in Linux world are developed with complete disregard to compatibility! C works fine (using versioned symbols), C++ has namespaces (but note that this is quite new invention: 2006 year, to be exact), but other languages... ugh. Python breaks everything in each release and Perl does the same. You literally can not offer any sort of compatibility if you use them - and yet they are considered to be part of the core (and distribution maintainers are start spewing bad words if package brings it's own version of python).
To have a sane system you need core system developers at least as disciplined as GNU C++ developers—who accidentally broke compatibility between C++98 and C++11 in GCC 4.7 and fixed the problem in GCC 4.7.2 even if that made GCC less compatible with a C++ standard! Looks like they will break the ABI with GCC 4.8 - but hey, previous ABI was with us for a six years! And the plan is to still make it possible to use libraries with old ABI and a new ABI in the same process.
So yes, we have sane foundation, but everything on top of it… I'm not sure what to do with that. As I've said just a few days ago It is hard. It's also necessary.
Copyright © 2017, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds