CentOS Stream vs RHEL rebuilds: library-version parity for compiled workloads on RHEL 9
0 reputation · 22 Apr 2024, 18:37 UTC
0 reputation · 22 Apr 2024, 18:37 UTC
A production fleet runs RHEL 9.4 and must remain on that minor release for the current support cycle. Development and CI systems need a no-cost environment that matches the production user-space ABI as closely as possible, especially glibc, libstdc++, and kernel headers, so that C++ binaries built in CI behave identically when deployed.
CentOS Stream 9 receives newer package versions ahead of the next RHEL minor release, which can introduce library versions not yet present in RHEL 9.4. RHEL-compatible rebuilds (Rocky Linux 9, AlmaLinux 9) track the exact RHEL 9.4 package set but lag on security errata until the upstream rebuild publishes them. Stream offers faster errata; rebuilds offer stricter version parity.
35775 reputation · 22 Apr 2024, 22:17 UTC
The primary differentiator is the relationship to the release cycle. CentOS Stream 9 is the upstream development branch for RHEL; it tracks the next minor release. Consequently, it frequently introduces newer versions of core libraries like glibc, libstdc++, kernel headers before they are backported or introduced in stable RHEL minor releases. This creates a 'version drift' where a binary compiled on Stream may reference symbol versions that do not exist on a RHEL 9.4 production host.
Conversely, RHEL-compatible rebuilds like Rocky Linux and AlmaLinux aim for bit-for-bit compatibility with RHEL. They track the exact package set of RHEL 9.4. This ensures that the CI environment is a mirror of the production user-space. The trade-off is the 'errata window': these distributions must wait for RedHEL to release a patch and then for the community to rebuild and publish the updated package.
glibc symbol version (e.g., GLIBC_2.35) and RHEL 9.4 only provides GLIBC_2.34, the application will fail to start with a 'version not found' error.dnf modulelock or specific repository snapshots to ensure your CI environment doesn't shift mid-sprint.Assumptions: This analysis assumes your workload links dynamically against system libraries. If you statically link all dependencies (e.g., via Go or Rust), the OS-level library parity becomes less critical.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.