EL 10: A new toolchain
A major release means a wholesale refresh of the base toolchain. EL 10 moves the kernel to 6.12 LTS, the compiler to GCC 14, the system Python to 3.12, and glibc to 2.39, with Podman 5 on the container side — while the package manager stays on the DNF 4 line (4.20), so day-to-day commands feel unchanged.
What changed
Section titled “What changed”Every EL major release aligns with a set of upstream long-term-support versions, and EL 10 aligns with the 2024–2025 upstream mainlines. For users the changes cluster in three places:
- Build side: GCC 14 plus new binutils and glibc headers turn code that “used to compile” into build failures;
- Runtime side: the system Python jumps three minor versions, so old scripts need validation;
- Container side: Podman 5 makes pasta the default rootless network backend and recommends Quadlet for systemd integration.
Meanwhile the package manager is still DNF 4 (currently 4.20), not DNF 5: dnf install, dnf config-manager, and friends keep their EL 9 syntax.
EL 9 vs EL 10
Section titled “EL 9 vs EL 10”| Component | EL 9 | EL 10 | Notes |
|---|---|---|---|
| kernel | 5.14 | 6.12 | LTS; much better new-hardware support |
| GCC | 11 | 14 | stricter default diagnostics; C23 |
| glibc | 2.34 | 2.39 | |
| Python (system default) | 3.9 | 3.12 | distutils and other old modules removed |
| OpenSSL | 3.0.x | 3.5.x | adds post-quantum algorithm support |
| Podman | 4.x | 5.x | rootless networking defaults to pasta |
| Package manager | DNF 4 | DNF 4.20 | still DNF 4, not DNF 5 |
For exact current versions in each distribution’s official repositories, see the package version matrix (synced at build time).
What it means for you
Section titled “What it means for you”- In-house software and kernel modules: GCC 14 promotes implicit function declarations, incompatible pointer types, and friends from warnings to default errors. Old C code and out-of-tree kernel modules may fail on the spot; fix the source, or downgrade with
-Wno-error=…as a stopgap (not long term). - Python workloads: 3.9 → 3.12 spans three minor versions;
distutilsis gone and some stdlib behavior changed. The EL 10 system Python is for system components only — keep application code in a venv. - Container workflows:
podman generate systemdis deprecated in favor of Quadlet; rootless networking defaults to pasta, so scripts that assumed slirp4netns behavior need a check. - Binary compatibility: glibc remains backward compatible, so old binaries usually run; but anything linked against OpenSSL 1.x needs revalidation.
Checking and adapting
Section titled “Checking and adapting”uname -rgcc --version | head -1python3 --versionldd --version | head -1podman --version- Before upgrading, do a full build of your in-house components in an EL 10 container or VM;
- Run Python regression suites under 3.12 in a venv;
- Move container systemd integration to Quadlet.
Further reading
Section titled “Further reading”- Package version matrix — cross-distribution version tables (auto-updated)
- EL 10 changes overview — packaging, modularity, and the rest
- EL 10: Post-quantum cryptography — the security side of OpenSSL 3.5
- EL 9: A new toolchain — the previous generation’s refresh