3 ms·
Well, then why have any libs if none will be shared? Why not just statically compile the application so it's a single binary?
by lsaferite 11y ago
Well, then why have any libs if none will be shared? Why not just statically compile the application so it's a single binary?
- baldfat 11y agoI love the idea EXCEPT for Desktop Enviroments. Does that mean any KDE/Gnome App has the whole desktop installed in each folder? What about OpenSSH does that mean any program that uses SSH needs its own copy and then we have 12 different versions of SSH? Its not easy but I am sure someone is smart enough to figure this stuff out. NixOS and Gobo Linux have tried.
- digi_owl 11y agoThe scheme that Canonical seems to be playing with is that larger projects (DEs, central libs) are put into what they call frameworks. These are packages that other packages can refer to rather than massively duplicating the content within themselves. These frameworks will in turn be versioned, so that if package X wants framework Z, while Y wants Z+1 they can both be happy without descending into dependency hell. Note that Gobolinux gets around this to a degree by using age old soname and symlinks. This in that ld and similar is pointed at a directory containing symlinks. libxyz.so.1 will be pointing to whatever is the active version of libxyz, while something like libxyz.so.1.1 will be pointing to that specific lib version. Disabling a specific lib version is done by removing the relevant symlinks. Gobolinux provides tools for doing this, but they are basically shell scripts. And so in a pinch someone can do all that manually.
- Kristine1975 11y agoSecurity updates perhaps: If e.g. OpenSSL is shared, a single security update will fix all applications using it. And a single update will most likely be out more quickly than updates to a dozen or so applications.
- takeda 11y agoThe thing is that the libraries are not shared, and every application has its own version of library in its application directory. So if you would want to update OpenSSL you would have to find openssl in every single application and update (or more likely wait for vendor to release new version with more recent openssl). At that point the shared libraries are useless, they don't provide security (update in one place and have all aps using it patched), doesn't save RAM (each app loads their own version of library, instead of multiple apps sharing the same code), and you get worse performance (there's overhead for using shared libraries). What lsaferite suggested makes sense, if the library is used only by given app, why not compile it statically? You have everything in a single file, and at least you're not losing performance by using shared objects.