EL 10: Module streams retired
AppStream module streams — introduced in EL 8 and debated ever since — retire in EL 10: the repositories no longer ship modular content, and while the dnf module command still exists, it only prints deprecation warnings. The era of picking software versions via module streams is over, replaced by versioned packages, third-party repositories, and containers.
What changed
Section titled “What changed”Module streams were designed so AppStream could offer several major versions of one piece of software (PHP, PostgreSQL, Node.js, …) side by side, selected with dnf module enable php:8.1. In practice they brought repository-metadata bloat, image and Kickstart complexity, and module lifecycles shorter than the release itself.
EL 10’s answer is to stop distributing modular content:
dnf module list/dnf module enableprint deprecation warnings and show no usable modules;- multi-version software moves to plain versioned package names (whatever the repository offers), or to EPEL / upstream repositories / container images.
EL 8 → EL 9 → EL 10
Section titled “EL 8 → EL 9 → EL 10”| Item | EL 8 | EL 9 | EL 10 |
|---|---|---|---|
| Modular content | introduced, widely used | still shipped, narrower scope | no longer distributed |
dnf module | fully functional | functional | deprecation warnings only |
| Getting multiple versions | module streams | streams + versioned packages | versioned packages / third-party repos / containers |
What it means for you
Section titled “What it means for you”- Automation that depends on
dnf module: Kickstartmodule --name=…lines anddnf module enablecalls in Ansible or shell scripts all stop working (or warn) on EL 10 and must be cleaned up beforehand. - Multi-version needs: for a non-default PostgreSQL / Redis / PHP, look to EPEL and third-party repos or containers; several projects (Redis among them) have already moved to versioned package names in third-party repos.
- Upgrading from EL 8/9: enabled streams do not “migrate” — after the upgrade you get whatever version the EL 10 repositories provide, so confirm each one.
Checking and adapting
Section titled “Checking and adapting”dnf module list --enableddnf module list # deprecation warning only, no module content- Export the enabled-module inventory before the upgrade;
- Pick an EL 10 replacement for each stream (default-version package / versioned name / third-party repo / container);
- Remove
moduledirectives from automation and image templates; - After the upgrade, verify service versions the new way.
Further reading
Section titled “Further reading”- EL 8: BaseOS and AppStream — the repository design where modularity was born
- DNF basics — DNF 4.20 and everyday commands
- EPEL & third-party repos — where multi-version software lives now
- Upgrading EL 9 → EL 10 — the full upgrade path