|
|
|
|
|
by p_l
1444 days ago
|
|
Glibc is major source of "binary from X years ago doesn't work" in my experience, to the point that if I want to run stuff older than let's say 5 years I start by getting a docker container - or a specially taylored set of libs starting with dynamic linker itself. Somehow proprietary OpenGL drivers still worked, it was glibc related files that caused crashes. Thanks to symbol versioning I never know if a binary will work unless I can dismiss it early by versioning causing it to not link at all. And given that glibc backward compatibility for all practical purposes is shorter than 10 years, having to support centos can get you a lot of those issues |
|
As far as I’m able to tell[1], Glibc has never removed a versioned symbol as long as symbol versioning has existed, so the intended backwards compatibility is “forever”. No binary built against a(n unpatched) Glibc should fail to load on a later Glibc due to an absent Glibc symbol version. (Of course, if you play non-version-aware dynamic linker and dlsym() not dlvsym() things in libc, you lose; if you bundle an “updated” part of libc with the application[2], you lose; etc., so this may be true but still not entirely foolproof. And given how many things there are in libc, if you’re going to lose it’s probably going to be there.)
[1] E.g. https://sourceware.org/git/?p=glibc.git;a=history;f=stdlib/V...
[2] https://news.ycombinator.com/item?id=29479903