8/19/2026 at 6:54:26 AM
This is a big forwards-compatibility risk. Suppose glibc adds a new symbol, and then a GPU driver adds a dependency on that symbol. The user wants to run an old executable with the updated GPU driver (maybe the old GPU driver doesn’t support their GPU). Normally, this would work fine: the user has to use a new copy of glibc, which will be compatible with both the new GPU driver and the old executable. But with your approach, the GPU driver is forced to use the glibc reimplementation which has been statically linked into the executable. Which, since the executable is old, can’t possibly implement the new symbol.The same issue would occur if glibc adds a new version of an existing symbol and then the GPU driver is recompiled. (Or, for that matter, if a GPU driver adds a dependency on a symbol which glibc has always supported but which isn’t in the subset that you reimplemented, though in theory that could be solved if you reimplemented 100% of the symbols.)
by comex
8/19/2026 at 7:44:22 AM
Yes this is just asking for trouble - and all it does is solve a problem that doesn't really exist. Just dynamically link against the oldest glibc you want to support. Its annoying that Linux toolchains don't have built in easy mode support for that but its much easier to deal with than this thing will be when it breaks.It's also not just new symbols, the loader semantics also aren't static and new enough libraries may not support older semantics - e.g. the loader used to use DT_HASH entries for symbol resolution but now they are no longer present on all distributions.
by account42
8/19/2026 at 8:18:29 AM
> Just dynamically link against the oldest glibc you want to supportI wish it would that simple for practical use cases.
I ship professional software for colorists for Hollywood studios and they absolutely love to never upgrade. We have to ship for RockyLinux 8. Sad.
by egorfine
8/19/2026 at 4:11:20 PM
Something like https://github.com/wheybags/glibc_version_header may be of interest to wean off using older OS’s in your build system.by g0xA52A2A
8/20/2026 at 10:44:47 AM
Indeed this is interesting. Thanks, appreciate it!by egorfine
8/19/2026 at 9:04:58 AM
RockyLinux doesn't sound so bad. It's not even EOL.by eoanermine
8/19/2026 at 1:20:02 PM
We still have RHEL7 hosts in production. Every day it gets harder to find packages with a glibc 2.17 floor.by coredog64
8/19/2026 at 4:50:53 PM
(I'm certain you know this already but I'm posting this for people who might want more context)Part of the problem that people don't really realize is that it's not practical to just 'link against old glibc'.
In order to ensure compatibility with RHEL7 we need to link against RHEL7 libraries, which means we need to build on RHEL7. That means old, unpatched versions of glibc, libpcap, libcurl, openssl, or who knows what else, in case there's some backwards-incompatible change in newer RHEL versions.
Alternately, we can build/patch the libraries we use and compile them statically into the binary, which is vastly more maintenance work for us for very little benefit.
Meanwhile, compiling against older versions of libraries like glibc means we don't get the benefit of updates; not just new features in glibc, but things like more/better SIMD support in glibc algorithms, more/better optimizations in GCC, and so on.
Alternately, we can stop supporting RHEL7, like Redhat did, and build against RHEL8... Or we can build a separate version against each version of RHEL we want to support.
Funnily enough, we've been shipping RHEL7 RPMs of our product for years, and only recently realized that they won't actually run on RHEL7 because at some point the toolchain updated and now we're compiling against too new of a glibc version and then packaging it into a RHEL7 RPM. It wouldn't have worked on RHEL <8 for the past... few years? But no one uses RHEL7 so it went completely untested for ages and we didn't get any customer complaints.
Now we're re-labelling our RPMs as EL8, but it's just a cosmetic change so that we're claiming the version that we actually require.
by danudey
8/19/2026 at 9:48:24 AM
It's just this short of being EOL.by egorfine
8/19/2026 at 10:19:35 AM
Almost three years?>Rocky Linux 8 is supported by the Rocky Linux project until May 2029.
by duskdozer
8/19/2026 at 10:53:19 AM
Yes but only the very last version and only paid support. Don't mind to pay, it's just that no amount of payment would be a proper solution to ancient environment with everything.by egorfine
8/19/2026 at 1:20:36 PM
static link everything? ship a docker image? ship your own userspace (like Oracle DB used (?) to)?by pas
8/19/2026 at 3:25:22 PM
Yeah, to make things spicy, what we ship is a plugin, so there's limit of how static we can link. glibc stays dynamic and that's a huge limiting factor.I've got plans to try to build on RockyLinux9 and package its glibc along with the app. Simple helloworld works, so I have a glimpse of hope that it would be possible to ship like that.
by egorfine
8/19/2026 at 5:21:03 PM
Neither of those fixes issues with system-calls not existing because the linux kernel was so old.by aidenn0
8/19/2026 at 8:13:50 AM
This is not a desirable solution on musl based systems. Whatever you do in that situation ends up horrible, so it is about finding the least bad solution. Which this seems like a workable variant of.by yxhuvud
8/19/2026 at 9:09:36 AM
> Just dynamically link against the oldest glibc you want to support.Just the other day I tried running an older binary and it failed with a glibc error, despite it being linked to a glibc version that's barely 5 releases behind the one on my system. So maybe glibc isn't backwards compatible after all...
by throwaway2046
8/19/2026 at 9:22:59 AM
Or maybe you misunderstood the error message.by account42
8/19/2026 at 10:05:35 AM
Or may be not.by pg83
8/19/2026 at 8:35:07 AM
This means the user will update the binary with my program and continue using it happily.I'm not offering a silver bullet, but the approach I've implemented is much better than what the industry currently offers.
by pg83
8/19/2026 at 3:55:44 PM
Exactly. I think you're doing fine. It's weird that you're using C++ here, since that brings in a lot of crap, but then your programs are probably C++ anyway, so it's not a problem.Honestly I'm impressed by this work. It's a thankless thing to have built, it's definitely feasible to build but more work than almost anyone would have been willing to do. What would be even neater is if Musl had this builtin.
by cryptonector