DNF, a new Package Manager
A preview of the next-generation Yum package manager, using hawkey/libsolv for backend.
- Name: Aleš Kozumplík
- Email: firstname.lastname@example.org
- Targeted release: Fedora 18
- Last updated: 2012-05-31
- Percentage of completion: 40%
DNF is a fork of Yum 3.4 that uses libsolv for a backed. The main goals of the project are:
- using a SAT solver for dependency resolving
- allowing us to eventually use the same solver in rpm too
- strict API definition for plugins
- strict API definition for extending projects (Anaconda)
- leaner codebase than Yum, allowing for easier maintenance
- better performance and memory footprint.
For Fedora 18 this is mainly meant as a preview. The package can be installed along yum so user's workflow is not disturbed when DNF malfunctions.
The effort on DNF happens in parallel to the Hawkey development, a library providing simplified libsolv C and Python bindings.
Why not zif/zypp?
People are asking why we didn't choose to adopt zif (or SUSE's zypp) instead of fixing yum. The reasons are:
- dnf looks for a middle ground between a sane API and some backwards compatibility.
- dnf and hawkey are first steps toward using the same resolver accross the entire stack.
- Libsolv is a well tested and proven code base, currently the most sophisticated and optimized dependency solving implementation.
Benefit to Fedora
Faster and simpler package manager. Eventually simplified client code.
How To Test
Unit tests included.
Manual testing is done by performing actions one would normally do through yum, e.g. 'dnf install virt-manager'.
To test-drive dnf use 'dnf <command>' instead of 'yum <command>'. list/update/install/erase are currently all supported.
This feature will not disturb any existing Fedora software.
In the future if DNF gets accepted as the main package manager of the platform, yum plugins will have to be updated for the new API and so will Anaconda. I am prepared to assist in this effort with documentation and patches.
If DNF doesn't work the user can use yum instead.
Maintained at github wiki.