MythTV je svobodný software šířený pod GNU GPL, což krom jiného znamená, že je komukoliv dostupný zcela zdarma. A taky každý může vzít jeho zdrojový kód a jakkoliv ho upravovat a vylepšovat. Vyvíjí se od roku 2002 a podle automatické analýzy serverem Ohloh obsahuje přes 2 miliony řádků zdrojových textů. Čas věnovaný vývoji MythTV (a knihoven, které používá) se dá vyčíslit na 569 člověko-roků a celková cena tohoto software (vypočítaná podle platu průměrného amerického programátora) přesahuje 31 milionů amerických dolarů. Jinými slovy, je to opravdu velký projekt a investice vložené do něj jeho vývojáři jsou obrovské. Jak něco podobného vůbec může vzniknout?
Otevřený vývoj a spolupráce
Projekt zahájil před téměř osmi lety Isaac Richards, ale zřejmě poměrně brzy se kolem MythTV vytvořila silná komunita čítající asi desítku aktivních vývojářů, která celý vývoj více méně převzala. V posledních několika letech, co vývoj sleduji, Isaac kódem téměř nepřispívá a v projektu moc nevystupuje. Sem tam se ale nečekaně vynoří a provede něco zásadního, jako například na podzim 2008 zachytil vydání VDPAU a bleskově naprogramoval jeho podporu do MythTV. Od té doby je tak MythTV bezvadně použitelný pro přehrávání HD videa i na strojích se slabým procesorem.
Mezi skutečné MythTV vývojáře lze řadit jen ty, kdo si za léta perfektní práce vysloužili důvěru Isaaca Richardse a dalších v týmu a s touto důvěrou dostali i právo zápisu do zdrojového repozitáře. Těmto „vyvoleným“ pomáhá ještě mnoho dalších programátorů či pokročilých uživatelů, kteří přispívají buďto hotovými vlastnostmi, nebo opravami známých chyb, nebo i jen kvalitními hlášeními o existujících chybách. K tomu na MythTV pracují desítky překladatelů a nelze zapomenout ani na stovky přispěvatelů do mailing listů, kteří pomáhají začínajícím uživatelům s řešením problémů.
MythTV je celý napsaný v C++ s využitím knihovny Qt (přesněji téměř celý, protože MythWeb je v PHP a je tu ještě pár drobností v perlu a pythonu). Je to vícevláknová aplikace, což zřejmě s relativně nedávným boomem vícejaderných procesorů autorům místy trochu přerůstá přes hlavu, ale statečně s tím bojují a s pomocí zámků a semaforů a jiných thread-safe řešeních postupně umravňují jednotlivé kolize a tím způsobené problémy (v minulé verzi MythTV 0.21 např. platilo, že kdo chtěl vyhledávat nové TV kanály, musel spustit mythtv-setup zamčený jen na jedno jádro procesoru pomocí „taskset -c 0“, jinak mu to pěkně spadlo – toto je po přepsání channel scanneru v aktuální verzi 0.22 už minulostí).
Vzhledem k obrovskému objemu zpracovávaných informací a nutnosti reagovat na uživatelské povely co nejrychleji jsou mnohé kritické části MythTV různě ručně optimalizované, což spolu s prý nedostatečným množstvím komentářů ve zdrojových kódech dále zvyšuje už tak vysokou laťku pro nástup nových vývojářů. Narazil jsem však na vznikající vývojářskou dokumentaci, která pomůže porozumět i nově příchozím programátorům, co a jak uvnitř MythTV funguje.
Komunikace a vedení projektu
Samotný vývoj probíhá poměrně standardním komunitním způsobem, zdrojový kód je dostupný v SVN, správu úkolů a hlášení nalezených chyb se snaží zvládat Trac (často ale padne, prý je to hodně nestabilní SW). Trac je propojený jak s SVN, tak i s mailing listem, takže kdo chce být informován o každé změně v databázi chyb či ve zdrojových kódech, stačí mu se přihlásit k odběru mythtv-commits listu. MythTV používá ještě další dva mailing listy, jeden pro diskuse ohledně vývoje (mythtv-dev) a druhý pro běžnou podporu uživatelů (mythtv-users).
Je třeba zdůraznit, že vývojáři opravdu neradi vidí uživatelské dotazy typu „nefunguje mi to nebo ono“ ve vývojářském listu. Takoví tazatelé jsou ihned slušně (ale důrazně) požádáni o přestěhování svého dotazu do mythtv-users listu. Je to proto, že většinou je v mythtv-dev listu poměrně rušno a řeší se řada otázek, takže nikdo z místních guru se nechce rozptylovat řešením problémů, které by zvládli vyřešit i pokročilejší uživatelé, kteří jsou doma právě v mythtv-users.
Ostatně podobné (i ještě tvrdší) reakce se dostane tomu, kdo by se pokusil (zne)užít Trac pro laxní hlášení chyby („prostě mi to nejede“) či nedejbože vyjádření nějakého svého přání (typu „bylo by super, kdyby MythTV uměl ještě tohleto takto“). Vývojáři neoblomně trvají na tom, že jakékoliv pády či zatuhnutí aplikace je nezbytné doprovodit kompletním výpisem funkcí volaných těsně předtím (backtrace), jinak nejsou schopni (bez křišťálové koule čaroděje Chechoty) chyby vyřešit. Vlastní přání či nápady na nové vlastnosti potom patří úplně mimo Trac, v MythTV Wiki na to mají své místo.
Rozumím vývojářům i jejich striktním pravidlům – i s jejich dodržováním seznam hlášených chyb narůstá mnohem rychleji, než co vývojářský tým zvládá řešit. Je to zřejmě dáno rozsahem a konfigurovatelností tohoto softwarového balíku, násobeno množstvím a různorodostí hardware, na kterém může běžet. Výsledné myriády kombinací pak někdy odhalují různá zákoutí software, kde žádný z vývojářů při testování třeba ani nikdy nebyl.
Je poněkud nemilé, že přestože vývojový tým není malý (a postupně se snaží rozšiřovat), tak kolikrát nestíhá ani řešit opravy chyb, které jsou v Tracu někdy nahlášené včetně navrhované opravy. Je to daň za to, že to žádný z programátorů nedělá za peníze, ale jen jako hobby ve svém volném čase, kterého bohužel nikdy není dost. Tomuto procesu nepomůžeme naléháním v Tracu („kdy už to konečně opravíte?!“), to vývojáře vždy akorát rozzlobí. Díky dostupnému zdrojovému kódu však každý může testovat navržené opravy a vlastně používat svou vlastní upravenou verzi do doby, než se vývojáři dostanou k dané chybě a opraví ji přímo v hlavním repozitáři.
Můj závěr pro autory jiných svobodných projektů s otevřeným zdrojovým kódem (FOSS) a velkou uživatelskou základnou: pokud se nechcete zamotat do nekonečného diskutování s uživateli o jejich problémech, bude nezbytné rozhodně a trpělivě nové uživatele „vychovávat“ v tom smyslu, aby ctili drahocenný čas a nesmírné osobní investice vývojářů. Je třeba po uživatelích žádat, aby se snažili vlastní problémy řešit vždy nejdříve sami, a nejlépe pak s pomocí ostatních uživatelů – je to takový jejich příspěvek k celkovému dílu. A pokud máte živý projekt s mnoha uživateli a zaneprázdněnými vývojáři, je rozdělení komunikačních kanálů na „vývojářský“ a „uživatelský“ a jejich striktní dodržování asi nezbytné pro přežití a rozvoj projektu i komunity kolem něj.
Dostupné verze MythTV
MythTV je díky zdrojovému kódu přístupnému ve veřejném SVN vlastně kdykoliv dostupný v nejposlednější možné revizi. Této verzi se říká „trunk“, podle názvu místa v SVN, kde probíhá hlavní vývoj. Trunk je pohybující se cíl, každý den přibudou desítky nových revizí. Běžným uživatelům je silně nedoporučeno se pokoušet tuto obecně nestabilní verzi používat, přestože vlastně všichni vývojáři používají jen ji. Pokud se někdo z běžných lidí rozhodne podstoupit to riziko a nainstalovat si „trunk“, je jeho povinností sledovat mythtv-devel a mythtv-commits mailing listy, aby zbytečně nehlásil chyby, které jsou vlastně v tu chvíli vlastnostmi danými třeba rozpracovaností určité věci a podobně.
Po stabilizaci a vydání konkrétní verze (třeba 0.22 teď v listopadu minulého roku) se vytvoří tzv. branch (větev, opět terminologie z SVN) nazvaný dle verze s přídavkem „fixes“ (tedy nyní „0.22-fixes“), ve kterém se průběžně opravují chyby, co se postupně najdou (znáte to – v každém programu je alespoň jedna chyba). Zde vývojáři naopak doporučují všem uživatelům, aby nezůstávali na vydané verzi, ale drželi se této větve a průběžně updatovali na její nejposlednější revizi. Pochopila to už i většina packagerů (lidí vyrábějících binární balíčky) – např. se správně zvolenými repozitáři Mythbuntu nejméně jednou za týden přijede nový balíček (aktuálně „0.22.0+fixes23230–0ubuntu0+mythbuntu3“ – to číslo 23230 je číslo SVN revize, ze které byl balíček vytvořen).
Díky rozdělení zdrojových kódů na „trunk“ a „branch fixes“ (lze připodobnit např. k Debianu unstable a stable) je možné pro většinu uživatelů mít stabilní a dle možností bezchybný systém, zatímco dobrodruhům a vývojářům je k dispozici „bleeding edge“ software. Pro projekty s velkou uživatelskou základnou a rapidním vývojem je to celkem osvědčený model.
Vývojový cyklus
V minulosti byl MythTV znám až nesmyslně dlouhými vývojovými cykly – od jednoho vydání k druhému uběhly i dva roky, takže navenek mohl projekt vypadat chvílemi jak mrtvý. Ve skutečnosti se uvnitř neustále horečně pracovalo, ale vývojáři si dávali tak velké cíle, že jejich dosažení prostě vyžadovalo příliš mnoho času. Mnoho uživatelů z toho bylo krajně nervózních – stabilní verze se stávaly příliš zastaralými, uživatelé lačnící po nových vlastnostech v houfech přecházeli na nestabilní „trunk“, což bylo často zdrojem dalších frustrací i pro vývojáře řešící podporu takových uživatelů.
Příslovečnou poslední kapkou bylo rozhodnutí (po vydání verze 0.21 na jaře 2008) jednak portovat celý MythTV z knihovny Qt verze 3 na (s ní poměrně nekompatibilní) verzi Qt4 a zároveň (aby toho nebylo málo) zahájit dlouho odkládaný přechod GUI z původní knihovny na novou, nazvanou MythUI. Při tom navíc došlo k přepsání channel scanneru (tj. hledání TV kanálů), přidával se VDPAU renderer, konečně přibyla podpora pro DVB-S2, předělával se kód na obraz v obraze (Picture-In-Picture, Picture-By-Picture) a mnoho dalších věcí. Díky tomu se verze 0.22 rodila dlouho předlouho a po několika odkladech byla vydána poněkud nehotová ne náhodou těsně po uvolnění Karmické Koaly a dalších podzimních verzí linuxových distribucí.
Vývojáři sami doznali, že téměř dvouletý cyklus nejenže porušuje důležité pravidlo vývoje otevřeného software „release early, release often“ (vydávej brzy a často), ale přináší více komplikací, než je zdrávo, takže naplánovali další vydání (verze 0.23) už na konec března, tj. za dva měsíce. Předcházet tomu bude zmražení přidávání nových vlastností, které bude završeno velkou bug squashing party (mejdan drcení chyb) už tento víkend! Pokud máte čas a chuť, tak to bude ideální čas na pomoc s vydrcením některých chyb, které trápí i uživatele u nás (například ve verzi 0.22 nefunkční ladění analogových TV karet).
Pro vedoucí FOSS projektů z toho plyne, že dlouhé vývojové cykly ničí uživatele i vývojáře, a proto je lepší snažit se postupovat po menších, ale o to rychlejších krůčcích.
Výhled na jarní verzi 0.23
A na co se můžeme těšit v příští verzi MythTV? Kromě dokončení převodu dalších pluginů na nové MythUI, snad novým tématům vzhledu a dalším důležitým vylepšením VDPAU rendereru (např. ještě kvalitnější upscaling), přechodu OSD na MythUI, možná i novému vzhledu MythMusic pluginu a opravě mnoha chyb bude zřejmě hlavním tahákem zbrusu nový plugin MythNetVision, zvaný též „oficiální Internet Video plugin“ (protože už byly nějaké neoficiální pokusy dříve). Tento plugin má v MythTV pohodlně zpřístupnit videa z YouTube, Joost, Vimeo, Blip.tv, TheMovieDB trailery a mnohé další. Tam snad přidáme i naše archivy českých televizí na internetu, o čemž se můžeme informovat navzájem třeba přes mailing list nebo chat, který nabízí nově spuštěný web na podporu MythTV u nás – tvpc.cz.
Co bude příště
V příštím díle seriálu už konečně oprášíme nedočkavé kompilery a zkusíme něco přeložit. Podíváme se na instalaci MythTV a povíme si, jak to všechno do sebe zapadá, počínaje instalací systému a jeho automatickým vypínáním/zapínáním konče.