Tento článek berte jako krátký návod na to, jak se zapojit do upstreamového vývoje projektu DNF. O DNF se už psalo, je to moderní balíčkovací systém s ambicemi nahradit Yum v budoucích Fedorách.

Budu tady mluvit o tom, jak se zapojit zejména do programovací stránky věci. Ne každý člověk má ale chuť programovat. Bereme jakoukoliv pomoc v ostatních oblastech: design CLI rozhraní (v mezích kompatibility s Yumem), překlady, administrátorské práce, psaní dokumentace, inspekce kódu, testování DNF na Fedoře, reportování bugů, webdesign blogu, velebení projektu na internetu.

Pravidlo #1 zní dát o sobě vědět. Pokud si s něčím nedokážeš poradit nebo nevíš, jaký druh změn chceme v upstreamu vidět, přijď se zeptat na IRC: irc.freenode.net, kanál #yum, monitorujeme ho celkem důkladně. Není tam třeba chodit kolem horké kaše a ceremonovat, prostě se přihlas a zeptej.

Ať už chceš fixovat bugy, přidávat featury nebo psát dokumentaci, začni tím, že si opatříš klon repozitáře DNF:

git clone https://github.com/akozumpl/dnf/

Build je rychlý a přímočarý:

cd dnf
mkdir build
cmake .. && make
make doc # provede build dokumentace, volitelné

Platí, že master branch tohoto repozitáře má vždy 100% procházející unit testy:

cd dnf
nosetests tests/

Dokud vidíš jakékoliv chyby v unit testech, nemá cenu se pouštět dál. Většinou půjde o chybějící závislosti na tvém systému: v současnosti pracujeme hodně "rameno na rameno" s projekty hawkey, librepo a libcomps a nefungují-li jejich zabalíčkované verze, zkus nasměrovat PYTHONPATH na lokální buildy nejnovějších verzí. Z fedpkg a z koji lze také získat zdrojový kód zabalíčkované verze DNF, pokud je tato ale velmi stará (nyní jsou např. verze z F18 a F20/rawhide celkem rozdílné), hrozí, že patche nepůjdou bez modifikací použít na hlavní větvi (master) a podobně. S procházejícími unit testy lze také pustit DNF z lokálního checkoutu:

sudo dnf/bin/dnf list installed

Když všechno vypadá, že šlape, vrhni se na kód. Hlavní balíčky jsou:

  • dnf, moduly přímo v tomto balíčku jsou nejobecnější vrstva DNF. Soubory s často používanými třídami směřujeme sem.
  • dnf.cli, zpracování příkazů a výstup na konzoli, tedy zajišťování funkcionality specifické pro běh programu "dnf" z příkazové řádky.
  • dnf.yum, starý, leč stále zhusta využívaný kód převzatý z Yumu, nyní již notně změněný. Zajímavá je zejména třída dnf.yum.base.Base implementující jádro většiny tradičních operací jako upgrade nebo erase.
  • dnf.rpmUtils moduly pro komunikaci s librpm. Pro čtenáře ke studiu zatím docela nevhodné.

S kódem můžeš samozřejmě dělat cokoliv, co licence GPLv2+ dovolí. Ale změny, o které se v upstreamu zajímáme, jsou zejména opravené bugy (např. ty fedorácké, které si v bugzille zatím nikdo nevzal ) nebo vlastnosti, které jsou v Yumu, ale v DNF ne, a chybí tam. Nebo zkus naprogramovat věci, které v DNF už dávno postrádáš, je velká šance, že nejsi sám.

Když přijde na změny, snažíme se dodržovat určitý coding standard. Jeho nejzákladnější pravidlo zní: dodržuj PEP 0008. Moc rádi vidíme unit testy, ale nejsou striktně vyžadovány, ne vše je testovatelné. Faktem je, že v Pythonu je, i díky báječnému balíčku mock, testovatelné víc, než by si člověk odvážil doufat. Zen programování DNF dále říká, že smysl mají jen takové patche, kde jsou dlouhodobě náklady na jejich vývoj/review/integraci/udržování alespoň vykoupeny užitnou hodnotou pro uživatele Fedory.

Následuje otevření pull requestu, přes GitHub nebo neformálně emailem na ales@redhat.com. Patch je zevrubně prozkoumám a pokud odpovídá principům vytyčeným výše, je integrován do větve master a tvé jméno má nárok na zapsání do souboru AUTHORS.

Těšíme se!