glibc Version Reference
This table maps Linux distributions to their shipped glibc versions and corresponding FlatRoot remotes. Choosing the right target suite is critical for binary compatibility.
Version Table
| Distribution | Release Year | glibc Version | FlatRoot Remote |
|---|---|---|---|
| CentOS 7 / RHEL 7 | 2014 | 2.17 | centos:7 |
| Debian 9 (Stretch) | 2017 | 2.24 | debian:stretch |
| CentOS 8 / RHEL 8 | 2019 | 2.28 | centos:8 |
| AlmaLinux 8 / Rocky 8 | 2021 | 2.28 | alma:8, rocky:8 |
| Debian 10 (Buster) | 2019 | 2.28 | debian:buster |
| Ubuntu 20.04 (Focal) | 2020 | 2.31 | ubuntu:focal |
| Fedora 33 | 2020 | 2.32 | fedora:33 |
| Debian 11 (Bullseye) | 2021 | 2.31 | debian:bullseye |
| Fedora 35 | 2021 | 2.34 | fedora:35 |
| Ubuntu 22.04 (Jammy) | 2022 | 2.35 | ubuntu:jammy |
| Debian 12 (Bookworm) | 2023 | 2.36 | debian:bookworm |
| Fedora 39 | 2023 | 2.38 | fedora:39 |
| CentOS Stream 9 | 2024 | 2.34 | centos:stream9 |
| AlmaLinux 9 / Rocky 9 | 2022 | 2.34 | alma:9, rocky:9 |
| openSUSE Leap 15.6 | 2024 | 2.38 | opensuse:15.6 |
| Ubuntu 24.04 (Noble) | 2024 | 2.39 | ubuntu:noble |
| Fedora 41 | 2024 | 2.40 | fedora:41 |
| Debian 13 (Trixie) | 2025 | 2.41 | debian:trixie |
| Fedora 42 | 2025 | 2.41 | fedora:42 |
Why glibc Version Matters
The GNU C Library (glibc) uses symbol versioning to maintain backward compatibility. Each function in glibc is tagged with the version in which it was introduced or last changed (e.g., GLIBC_2.17, GLIBC_2.34). When a binary is compiled and linked against glibc, the linker records which symbol versions it requires.
At runtime, the dynamic linker checks whether the system's glibc provides all required symbol versions. If the binary was compiled against glibc 2.36 and uses a symbol introduced in that version, it will fail to run on a system with glibc 2.28:
This is a hard failure -- there is no workaround short of recompiling, providing a compatible glibc, or binary patching / compatibility tools.
Targeting for Compatibility
To maximize the number of systems a binary can run on, build against the oldest glibc version that provides the features you need. The general principle: targeting an older release gives broader compatibility at the cost of newer library features.
Common scenarios
Target centos:7 (glibc 2.17) when:
- You need maximum compatibility back to 2014-era systems.
- Your target includes RHEL 7, Amazon Linux 2, or other long-lived enterprise systems.
Target debian:buster, alma:8, or rocky:8 (glibc 2.28) when:
- You are building a portable CLI tool or library that must run on enterprise distros: RHEL 8, Ubuntu 18.04, Amazon Linux 2.
- You are shipping a self-contained application bundle and want broad compatibility.
- For RPM-based toolchains,
alma:8orrocky:8provide actively maintained packages at the same glibc version.
Target debian:bullseye (glibc 2.31) when:
- You need newer package versions than Buster provides but still want broad compatibility.
- Your minimum supported platform is Ubuntu 20.04 or RHEL 9.
Target debian:bookworm (glibc 2.36) when:
- You do not need to support systems older than 2022-era distributions.
- You want the latest stable packages and security patches.
Target debian:stretch (glibc 2.24) for maximum compatibility back to 2017-era systems, though some modern software may not compile against a glibc this old.
Verifying the installed glibc
After building your rootfs, verify which glibc is installed by executing the libc shared object directly — glibc's .so file prints version information when run as a program:
Expected output (for Buster):
See chroot for details on running programs inside a rootfs.
Checking a binary's glibc requirements
To inspect which glibc versions a binary requires, use objdump or readelf:
This lists every GLIBC_ symbol version the binary references. The highest version in the output determines the minimum glibc required at runtime.
Related pages
- Appendix / Versioning / Version Comparison — Every package format carries upstream version strings that must be compared to decide "is A newer than B?", "does X satisfy >= 1.2.3?", and "which candidate wins when several...
appendix versioning - Appendix / System / ldconfig — ldconfig(8) is the glibc utility that builds /etc/ld.so.cache — the lookup index used by the dynamic linker to find shared libraries at program startup. Without a current...
appendix glibc post-install - Appendix / Formats / ar (Unix archive) — ar is one of the oldest Unix archive formats — originally used to pack object files into static libraries (libfoo.a). It is not a compression format: it just concatenates...
appendix formats