Yum Package Manager был заменен DNF Package Manager так как в Yum было множество нерешенных проблем. Это проблемы быстродействия, чрезмерного потребления ОЗУ, медленного разрешения зависимостей.
Перечислим основные отличия
DNF использует библиотеку “libsolv” для разрешения зависимостей, разработанную и поддерживаемую SUSE для улучшения производительности. Он был написан в основном на python, и у него есть свой собственный способ справиться с разрешением зависимостей. Его API полностью документирован, а его система расширений позволяет использовать не только модули Python.
YUM – это фронтенд для RPM, который управляет зависимостями и репозиториями, а затем использует RPM для установки, загрузки и удаления пакетов. Почему создали новый инструмент DNF вместо того, чтобы исправлять в YUM существующие проблемы?
Алесь Козамблак (Ales Kozamblak) объяснил, что исправление не было технически осуществимо и что команда YUM не была готова принять изменения немедленно. Кроме того, большая проблема заключается в том, что существует 56 тысяч строк кода в YUM, и только 29 тысяч строк в DNF. Так что нет никакого способа избежать этого, кроме форка.
| № | DNF (Dandified YUM) | YUM (Yellowdog Updater, Modified) |
|---|---|---|
| 1 | DNF использует библиотеку “libsolv” для разрешения зависимостей, разработанную и поддерживаемую SUSE | YUM использует публичный API для разрешения зависимостей |
| 2 | API полностью документирован | API не полностью документирован |
| 3 | Написан на C, C++, Python | Написан только на Python |
| 4 | DNF уже используется в Fedora, Red Hat Enterprise Linux 8 (RHEL), CentOS 8, OEL 8 и Mageia 6/7. | YUM сейчас используется в Red Hat Enterprise Linux 6/7 (RHEL), CentOS 6/7, OEL 6/7. |
| 5 | DNF поддерживает различные расширения | YUM поддерживает только Python расширения |
| 6 | Можно легко делать дополнительные функции через API | Очень сложно добавить новые функции, так как API плохо документирован |
| 7 | DNF использует меньше ОЗУ | YUM использует больше ОЗУ |
| 8 | Использует эффективные алгоритмы для разрешения зависимостей | Медленное разрешение зависимостей, через API |
| 9 | Производительность хороша с точки зрения использования памяти и разрешения зависимостей метаданных репозитория | В целом производительность оставляет желать лучшего с точки зрения многих факторов |
| 10 | Если пакет содержит нерелевантные зависимости во время процесса обновления DNF, пакет не будет обновлен | YUM попытается обновить пакет, не проверяя нужно это или нет |
| 11 | Если подключенный репозиторий не отвечает, DNF пропустит его и продолжит транзакцию с доступными репозиториями | Если репозиторий недоступен, YUM немедленно остановит процесс |
| 12 | dnf update и dnf upgrade – это одно и то же | В YUM это разные вещи |
| 13 | Зависимости при установке пакета не обновляются | YUM предложил вариант такого поведения |
| 14 | При удалении пакета DNF автоматически удаляет все пакеты зависимостей, явно не установленные пользователем. | YUM этого не делает |
| 15 | Расписание обновления кэша репозиториев. По-умолчанию, через десять минут после загрузки системы, после обновления настроенных репозиториев проверяются ежечасно. | YUM тоже так делает |
| 16 | Пакеты ядра не защищены в DNF. В отличие от YUM, вы можете удалить все пакеты ядра, включая тот, который работает. | YUM этого не допустить сделать |
| 17 | libsolv: для разрешения пакетов и чтения репозиториев
hawkey: библиотека, предоставляющая упрощенный C и Python API для libsolv. librepo: библиотека, предоставляющая API C и Python (libcURL like) для загрузки метаданных и пакетов репозитория Linux. libcomps: альтернатива для yum.comps, она написана на чистом языке С, как библиотека и есть зависимости для python2 и python3 |
YUM не использует отдельные библиотеки для выполнения этих функции |
| 18 | DNF содержит 29.000 строк кода | YUM содержит 56.000 строк кода |
| 19 | DNF разработал Алесь Козамблак (Ales Kozumplik) | YUM разработали Зденек Павлас, Ян Силхан (Zdenek Pavlas, Jan Silhan) и члены команды |

YUM этого не допустить – неверно.
YUM этого не допустит – верно.
Спасибо, подправил