In general, running binaries that were compiled for an older glibc version (e.g. 2.13) will run fine on a system with a newer glibc (e.g. 2.14, like your system).
Running a binary that was built for a newer glibc (e.g. 2.15, like the one that fails) on a system with an older glibc will probably not work.
In short, glibc is backward-compatible, not forward-compatible.
Answer from Kenneth Hoste on Stack OverflowIn general, running binaries that were compiled for an older glibc version (e.g. 2.13) will run fine on a system with a newer glibc (e.g. 2.14, like your system).
Running a binary that was built for a newer glibc (e.g. 2.15, like the one that fails) on a system with an older glibc will probably not work.
In short, glibc is backward-compatible, not forward-compatible.
There are only minor binary compatibility issues between glibc 2.14 and glibc 2.15 according to the report from the Linux upstream tracker.
The report is generated by the abi-compliance-checker and abi-tracker tools.

See also https://sourceware.org/glibc/wiki/Testing/ABI_checker.
Valve Employee: glibc not prioritizing compatibility damages Linux Desktop
Binaries for Arch Linux are not compatible with older GLIBC versions (I'm trying to create AppImages for other GNU/Linux distributions).
linux - Can new glibc versions be used with an old kernel? - Unix & Linux Stack Exchange
Inquiry: Linux Kernel and glibc Compatibility Policy
Distributions ship with older/newer glibc versions depending in the stability wanted.
From all reading it seems that glibc cannot be manually updated on a system; the only way to version up with it is to jump to a complete newer version of a Linux operating system. Is this true?
No. glibc is updated every time your package manager finds a new version of glibc. The main file is /lib/libc.so.6. Which is the dynamic library programs are linked to (so they can run C functions included in the C standard library).
Although you can update glibc manually by compiling a desired version of glib and copying the resulting libc.so.6 to lib, this isn't recommended because the binaries could complain at the moment of execution, and because newer versions of glibc haven't been tested by the distribution's package maintainers. So you can expect an unstable system.
There are versioned symbols within the library. If the new code hits one of the versioned symbols, and that version is newer than anything in your libc, you’ll not be able to run
Can they build static?
In general, running binaries that were compiled for an older glibc version (e.g. 2.13) will run fine on a system with a newer glibc (e.g. 2.14, like your system).
Running a binary that was built for a newer glibc (e.g. 2.15, like the one that fails) on a system with an older glibc will probably not work.
In short, glibc is backward-compatible, not forward-compatible.
Answer from Kenneth Hoste on Stack OverflowIn general, binaries that were compiled for an older glibc version will run fine on a system with a newer glibc, as glibc is backward-compatible and handles automatically changes to its application binary interface (ABI). It achieves this wizardry by using symbol versioning, where basically to each symbol is attached a tag specifying its glibc version.
In case of semantics changes to function calls, glibc will include two versions, one for the old semantics and another for the new semantics, so each function is tagged with its version. The linker will consider both versions as two distinct functions.
This sophisticated mechanism is required since glibc is not one file but consists of many pieces (more than 200 shared libraries).
The backward-compatibility of glibc versions is under constant tracking. You may consult the ABI Laboratory report for API/ABI changes review for glibc. The report is generated by the abi-compliance-checker and abi-tracker tools.
For your question:
So if I'm overwriting with a newer libc.so.6 with additional glibc ABI versions inside it, how does it break older apps or leads system to breakage? Or doesn't it...?
Glibc compatibility is not fool-proof, but I believe that you will have to go way back to products compiled on quite old Linux versions to break it. I would also say that products may break not only because of glibc when run on versions of Linux different than where they were compiled.
So the best answer I can give is :
"It's not supposed to break anything,
and there is an excellent chance that it won't".
For more information, see:
- The GNU C Library With Versioned Interface
- ABI compliance checker Notes
- ABI Policy and Guidelines
The direct answer to your question, is that if you use the newer (not necessarily supported) version. You have no guarantee that a function wasn't removed, or changed in such a way, that your other (older) applications will be able to cope with those changes. In fact they won't be able to cope with your new version, if your new version doesn't provide "shims" to support the so-called "legacy" functions that were removed, or incompatibly changed.
So, if your hoping for success in your endeavor, you'll need to examine the Changelog(s) following the "supported" Glibc version. To safely determine what changed. :)
Hi, I'm the developer of Arch-Deployer, a script to bulk download Arch Linux packages from the main repositories (and from Chaotic-AUR) with all their dependences to finally compile AppDirs to study (the AppRun script and other internal components) before their exportation in AppImage packages. When I created it, my goal was to create AppImages to upload on my other repository named AM Application Manager, to made all these programs available for all the others GNU/Linux distributions. But I had not taken care of a particular issue: GLIBC compatibility!
All my tests and the creation of this script were done initially in December, when Arch Linux and my main system, Debian Testing/Unstable, were both with support for GLIBC 2.33, and in fact I was able to launch applications like GIMP, VLC, Chromium for Arch Linux on Debian Testing/Unstable. Then I realized that these applications were not compatible with older GNU/Linux distributions, so I've worked much on creating AppImages using PPAs for older Ubuntu versions or Debian Stable and OldStable as base for my AppImages, so I've abandoned the development of Arch-Deployer in favour of other sources.
In these latest months I've tried to compile again the same applications from Arch, that in the meantime has the GLIBC version 2.34, while Debian Sid still have GLIBC 2.33, so there is a lot of additional work to do in my AppRun scripts... so I left Arch Deployer. Just think that Chromium for Slackware (that I use on my repository) works on Ubuntu 18.04 (GLIBC 2.27), while Chromium for Arch still requires the latest GLIBC version for Arch instead. The same happens with OBS Studio, GIMP and other programs for Arch Linux.
The question is: why the binaries of applications for Arch Linux have this needing of the newer GLIBC version when the same version of the same binaries for other distributions like Slackware (rolling release) have not this needing? Is there a way to patch these binaries to made them work anywhere?
PS: I have the same issue with another program named Firedragon, the Firefox/LibreWolf fork for Garuda Linux, I have already talked with the developer about this issue. The main binary cannot work on other Linux distributions because the GLIBC version is not compatible. Any tips?
Thanks in advance.
If
libc.so.6from 21.04 is not compatible withlibc.so.6from 21.10, then why isn't the libc on 21.10 calledlibc.so.7instead?
libc.so is as core a library as they come. Nearly everything depends on it. One of glibc's goals is to provide backwards compatibility - a program that could run with an older libc.so.6 should (usually) also work fine with a newer release. However, if you bump the soname to libc.so.7 only because you added some new function, then all of these previously-built programs will need a rebuild for no good reason. There hasn't been a truly major break in API for glibc to warrant this yet.
I don't understand why a binary built on 21.10 is not compatible with an 21.04 system.
I don't see anybody guaranteeing forwards compatibility (which was what you expect by 21.04 being able to run something from 21.10) - why would you expect that if you don't take precautions to ensure it?
According to packages.ubuntu.com, 21.04 uses glibc 2.33, whereas 21.10 uses glibc 2.34, which are not completely compatible.
However, you should be able to build binaries for Ubuntu 21.04 from the source code.
Unless the source is interpreted, you usually need to build binary packages separately for different versions of Ubuntu. Launchpad can automate that for you.
why isn't the libc on 21.10 called libc.so.7 instead?
That is a decision only the developers of glibc can make.
For some versions of glibc, the announcement email says which kernel versions are compatible.
glibc Released Requires Linux kernel version
----------------------------------------------------------
2.34 1 Aug 2021 ? (same as 2.26?)
2.33 1 Feb 2021 ? (same as 2.26?)
2.32 5 Aug 2020 ? (same as 2.26?)
2.31 1 Feb 2020 ? (same as 2.26?)
2.30 1 Aug 2019 ? (same as 2.26?)
2.29 1 Feb 2019 ? (same as 2.26?)
2.28 1 Aug 2018 ? (same as 2.26?)
2.27 2 Feb 2018 ? (same as 2.26?)
2.26 2 Aug 2017 3.2 (or higher)
2.25 5 Feb 2017 ? (same as 2.24?)
2.24 4 Aug 2016 on i[4567]86 and x86_64 -> 2.6.32
2.24 4 Aug 2016 on other platforms -> 3.2
Note 1: Some minor architectures require a higher kernel version than
listed above.
Note 2: Your Linux distribution may vary from the above, as Glibc can
optionally be configured at compile time to require a kernel
version newer than the oldest supported version.
It may be possible to extend the above table by tracking down and reading more of the announcement emails for older (or newer) versions of glibc.
For reference:
Linux distribution glibc version Requires Linux kernel version
Debian 11 Bullseye 2.31 3.2 ?
Debian 10 Buster 2.28 3.2 ?
Debian 9 Stretch 2.24 on x86 2.6.32
Debian 9 Stretch 2.24 on other 3.2
Ubuntu 20.04 2.31 3.2
Ubuntu 18.04 2.27 3.2
Ubuntu 17.10 2.26 3.2
Ubuntu 17.04 2.24 ?
Ubuntu 16.10 2.24 ?
Ubuntu 16.04 2.23 ?
Sources:
The GNU C Library Release Timeline
The GNU C Library (glibc)
The GNU C Library version 2.27 is now available
The GNU C Library version 2.26 is now available
The GNU C Library version 2.25 is now available
The GNU C Library version 2.24 is now available
DistroWatch.com: Ubuntu
Ubuntu glibc MIN_KERNEL_SUPPORTED
You can check in in the sources. General dependency is defined in sysdeps/unix/sysv/linux/configure.ac and currently (in master branch, before 2.32 release) is: 3.2.0
There are some architecture specific dependencies, search for arch_minimum_kernel in sysdeps/unix/sysv/linux/[arch]/configure, e.g. in the current master branch (before 2.32 release):
- aarch64: 3.7.0
- csky: 4.20.0
- ia64: 3.2.18
- mips: 4.5.0
- nios2: 3.19.0
- powerpc64: 3.10.0
- riscv: 4.15.0
- x32: 3.4.0
Although this is not 100% correct, see RISC-V change in NEWS: 64-bit RISC-V requires a minimum kernel headers version of 5.0.