Hacker Timesnew | past | comments | ask | show | jobs | submitlogin

Is there something special about glibc conflicts that goes beyond normal versioning conflicts?

Package A could depending on glibc-2.13 and package b could depend on glibc-2.17. No conflicts would because by both running at the same time.



I had a hell of a time installing something in Ubuntu that required a particular glibc version that was differnt to the system--wide one. Like I said, I'm not Linux expert and I probably missed a trick. I ended up using a different distro.

Would this new distro have helped?


I think in the Nix world, you would have two or more different glibc versions at different paths. Then the applications are configured to link against the required versions. Nix has extra build metadata that calls GNU configure as far as I can tell, and that is where this knowledge would lie.

So you can run two programs side by side with different glibc versions in Nix. On Ubuntu, I think this is mostly not possible, as you have found.


As far as i understand Nix, two users could have different glibc versions, but two programs of a single user?


I don't see any problems here. libc is nothing special, it's just a library that (almost) every piece of software depends upon.

Two different programs may depend on two different versions of it (/nix/libc-2.10-fdsfgs/lib/libc.so.6 and /nix/libc-2.13-fgsfds/lib/libc.so.6 or even /nix/uclibc-0.9.33.1-blahblah/lib/libc.so) just fine. The only requirement is that both libc versions must support running under the current kernel¹, as you can't have two kernels at the same time.

However, it would be problematic if a single program (foo) would depend on a library (libfoo), which depends on another version of libc that foo does. I.e., dependency graph will be like foo->libc-x.xx, foo->libfoo->libc-y.yy. This would cause symbol conflict and AFAIK this can't be solved without either rebuilding either foo or libfoo or introducing some really nasty hacks to the ELF loader (ld-linux).

___

¹) Google for "FATAL: kernel too old" error message to see the example of what I mean. There are patches to make newer libcs to run with relatively older kernels, though, it just requires building from source.


Two different versions will definitely live at different paths, since the path contains the content hash. The path doesn't have much to do with the user name; that's a separate issue.


As a single user I could run two programs utilizing different glibc versions.


> I had a hell of a time installing something in Ubuntu that required a particular glibc version...

I have been in the same situation. But big changes in glibc that break things are very rare, most glibc version updates are backward compatible.

> Would this new distro have helped?

Yes, but it might have required re-compiling some packages.

Btw. NixOS is not such a new distro, it's been bubbling under for years now.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: