разница между DNF и YUM? Почему YUM заменили в CentOS?

Thank you for reading this post, don't forget to subscribe!

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) и чле­ны команды