В своё время DNF пришёл в дистрибутиве на смену пакетному менеджеру Yum, который был написан целиком на языке Python. В DNF требовательные к производительности низкоуровневые функции были переписаны и вынесены в отдельные Си-библиотеки hawkey, librepo, libsolv и libcomps, но каркас и высокоуровневые компонеты остались на языке Python. Проект DNF5 нацелен на унификацию имеющихся низкоуровневых библиотек, переписывание на языке С++ остающихся на Python компонентов управления пакетами и вынос базовой функциональности в отдельную библиотеку libdnf5 с созданием вокруг этой библиотеки обвязки для сохранения Python API.
Использование языка С++ вместо Python позволило избавиться от большого числа зависимостей, сократить размер инструментария и повысить производительность. Более высокая производительность достигается не только благодаря применению компиляции в машинный код, но и за счёт улучшенной реализации таблицы транзакций, оптимизации загрузки из репозиториев и реструктуризации БД (разделены базы с состоянием системы и историей операций). Инструментарий DNF5 избавлен от привязки к PackageKit, вместо которого задействован новый фоновый процесс DNF Daemon, заменяющий функциональность PackageKit и предоставляющий интерфейс для управления пакетами и обновлениями в графических окружениях.
Переработка также дала возможность реализовать некоторые улучшения, повышающие удобство работы с пакетным менеджером. Например, в новом DNF реализована более наглядная индикация прогресса выполнения операций; добавлена поддержка использования локальных RPM-пакетов для транзакций; добавлена возможность показа в отчётах о выполненных транзакциях информации, выдаваемой встроенными в пакеты скриптами (scriplets); предложена более продвинутая система автодополнения ввода для bash.
Источник: http://www.opennet.ru/opennews/art.shtml?num=60849