DNF
By Fedora Project
DNF, short for Dandified YUM, is the next-generation package manager used by Fedora and other RPM-based Linux distributions, responsible for installing, updating, and removing software packages while automatically resolving their…
Definition
DNF, short for Dandified YUM, is the next-generation package manager used by Fedora and other RPM-based Linux distributions, responsible for installing, updating, and removing software packages while automatically resolving their dependencies across an entire running system. It replaced YUM as Fedora's default package manager, offering a rewritten, considerably faster dependency-resolution engine built on a more maintainable, more efficient codebase overall.
Overview
DNF was created to replace YUM, Fedora's original package manager, whose dependency resolver had accumulated performance problems and design limitations as Fedora's package repositories grew larger and more complex over the years. Rather than patching YUM's aging internals indefinitely, the Fedora Project rewrote the tool from the ground up, keeping YUM's basic command-line conventions familiar to existing users while replacing the dependency-solving engine underneath with a more modern library. Mechanically, DNF resolves package dependencies using libsolv, a satisfiability-based dependency resolution library also used by other package managers, which is significantly faster and more reliable at finding a consistent set of packages to install than YUM's older resolver. DNF reads package metadata from configured repositories, which describe available RPM packages and their dependency relationships, computes a transaction that satisfies all requested installs, updates, or removals without breaking existing dependencies, and then downloads and installs the resulting RPM files. It also supports plugins, modularity for installing different versions of the same software stream, and a history mechanism that lets administrators undo previous transactions. Among RPM-based package managers, DNF is the direct successor to YUM and the default on Fedora, RHEL from version 8 onward, and their derivatives, filling a role analogous to APT on Debian-based distributions like Ubuntu. Compared to lower-level tools like rpm itself, which installs individual packages without resolving dependencies, DNF operates at a higher level, handling the full dependency graph so users rarely interact with raw RPM files directly. In practice, system administrators and developers use DNF daily to install software, apply security updates, and manage package groups on Fedora and RHEL-family systems, relying on its dependency resolver to keep a system consistent even across many interdependent packages. Automation and configuration management tools also invoke DNF non-interactively as part of provisioning scripts and container image builds based on Fedora or RHEL base images. The trade-offs are largely inherited from the RPM ecosystem itself: DNF's package format and repository structure are not compatible with Debian's APT-based ecosystem, so switching between RPM-based and Debian-based distributions means learning a different tool and package format. DNF's dependency resolution, while much faster than legacy YUM, can still take noticeably longer than APT on very large transactions, though this gap has narrowed considerably since DNF's introduction. Teams standardized on Debian-based distributions simply use APT instead, since the two ecosystems are not interchangeable. Because DNF and APT manage entirely different package formats and repository conventions, organizations running mixed Debian-based and RPM-based fleets typically maintain separate provisioning logic for each rather than trying to unify them under one tool.
Key Features
- Uses the libsolv library for satisfiability-based dependency resolution
- Replaced YUM as the default package manager on Fedora and RHEL 8+
- Reads and installs software from configured RPM repositories
- Supports modularity for installing different versions of a software stream
- Provides a transaction history for undoing previous package operations
- Supports a plugin system for extending package management behavior
- Resolves complex dependency graphs faster than the legacy YUM resolver
- Maintains familiar command-line syntax carried over from YUM