Nejsme první, kdo objevil na CVS řadu much a problémů. Někteří z kritiků zvolili místo slov činy a někteří z nich své úsilí dokonce korunovali nějakým prakticky použitelným výtvorem. A těm nejlepším z nich se právě dnes podíváme na zoubek a pokusíme se zhodnotit, ve kterých ohledech se blíží IVS, našemu ideálnímu verzovacímu systému vysněnému v minulém dílu (minimálně pro pochopení terminologie ho čtenářům doporučuji alespoň zběžně přelétnout, pokud již tak neučinili). Budeme se přitom však řídit oblíbenou zásadou UNIXu: „Dělej pouze jednu věc, ale zato pořádně.“ Nebudou nás proto příliš vzrušovat různá komplexní řešení, která integrují kontrolu verzí, evidenci bugreportů, build system…
Pozn.: I autor tohoto článku měl v úmysl proměnit svá slova v činy, ovšem nakonec mu v tom zabránil nedostatek času, proto jeho PaVS již necelý rok klidně spí a čeká na svůj okamžik. Za tu dobu ovšem udělala konkurence velký skok dopředu, proto zdaleka není jisté, jestli se PaVS ještě někdy probere zpět k životu.
Subversion
Subversion neboli SVN sídlí na subversion.tigris.orga v současnosti představuje pro CVS v jeho aréně zřejmě nejsilnější konkurenci. Filosofií, technickými principy i stylem použití se CVS hodně podobá, ovšem narazíme i na několik výrazných rozdílů. Jedná se o výrazný krok vpřed, ovšem některé z klíčových vlastností IVS chybí, proto mnozí namítají, že mělo SVN udělat krok větší.
Subversion podporuje sady změn (changesety), přesouvání souborů, rozumnou práci s adresáři i verzování metadat. Díky Apache-like licenci jde navíc o opensource software (i když s určitými výhradami, jeho licence není totiž kompatibilní s GNU GPL). Ovšem zaostává v moderním trendu distribuovaného vývoje, pro který přímo v rámci SVN podporu nenajdeme, stejně jako pro uspokojivé slučování větví (Subversion si samo neporadí s opakovaným slučováním, ani neumí slučovat historii daných větví, i přesto, že samotný mechanismus větvení je velmi originální a zajímavý). Navíc v současnosti ani nedokáže dostatečně efektivně komunikovat po síti. A sice existuje konvertor z CVS repository do Subversion, ovšem pouze jednorázový, ani kompatibilitu s CVS tedy nemůžeme považovat za přijatelnou.
Pokud začínáte nový projekt, který opravdu nehodláte vyvíjet distribuovaně ani neplánujete intenzivněji využívat větvení, Subversion určitě stojí za úvahu, zejména pokud jste dosud uvažovali pouze o CVS či podobném zaostalém nástroji. Nabízí stabilní, odladěný a stále poměrně moderní systém, který rozhodně pohodlně předčí CVS. (Osobně však jsem zastáncem toho názoru, že budoucnost leží až na řídké výjimky jinde, a to právě v distribuovaném vývoji.)
GNU Arch
Homepage systému GNU Arch nalezneme na www.gnuarch.org. Oproti SVN zaujímá mnohem radikálnější postoj, a tak se i mnohem méně podobá CVS. Tím si však získal manévrovací prostor pro zásadnější změny, a proto se mu podařilo dosáhnout i na ty pokročilejší vlastnosti IVS. To je však vykoupeno velmi strmou „křivkou učení“ při přechodu z CVS a poněkud spornou praktickou použitelností. Celkově systém může působit na různé uživatele dojmem překomplikovaným a odpudivým stejně dobře jako naprosto okouzlujícím.
Arch se vypořádá s changesety, přesouváním souborů i verzováním metadat. Používá licenci GNU GPL, jedná se tedy o svobodný software. Neobyčejně flexibilně je zde řešena komunikace přes síť, lze použít prakticky jakýkoliv protokol pro přenos souborů – HTTP, FTP, rsync, … To je však vykoupeno dosti neefektivním ukládáním souborů v repository, a tím také velmi nízkou rychlostí. Co se větveného vývoje a slučování větví týče, nenalezne Arch mezi ostatními opensource nástroji mnoho konkurence. Poradí si s vícenásobným slučováním, tzv. cherrypickingem (slučování pouze vybraných revizí) i s mnoha jinými záludnostmi. Navíc Arch plně podporuje distribuovaný vývoj. Co se týče kompatibility, existují konverzní nástroje i určité metody pro používání Archu i CVS zároveň, jsou však dosti krkolomné a nepohodlné.
Není vše tak růžové, jak by se mohlo zdát. Osobně totiž hodnotím Arch jako nástroj s vynikajícím návrhem, ovšem hroznou praktickou realizací. Je velmi pomalý, používá dosti nepraktická a rušivá jména souborů a velmi špatně se používá – příkazy jsou zmatené, při psaní dlouhatánských jmen revizí dostáváte křeče do prstů a i pro jednoduché úkony je nutné používat zbytečně zdlouhavé sekvence příkazů. Žádný z těchto problémů není neřešitelný, ovšem je z toho jasně patrné, že na rozdíl např. od SVN má Arch před sebou k reálnému nasazení ještě kus cesty a k řešení některých ze zmíněných problémů je třeba ještě najít mezi jeho vývojáři určitou „politickou vůli“.
Rozhodně GNU Arch vyzkoušejte, pokud máte chuť experimentovat a příliš jste si nestihli zvyknout na práci s CVS. Buď vás chytne a už na něj v životě nedáte dopustit, nebo i když se znechuceně odtáhnete, poznáte alespoň poněkud rozdílný způsob myšlení a styl práce, než jaký praktikuje CVS, SVN a rodinka okolo. A to je vždy hodnotná zkušenost.
SVK
SVK sídlí na svk.elixus.org. Podobnost se SVN není pouze zdáním, tento nástroj staví na „souborovém systému“ (tedy v podstatě formátu repository) Subversion, ovšem je jinak koncipován dosti odlišně, jedná se totiž o systém distribuovaný.
Vzhledem k tomu, že je SVK založen na Subversion, mají tyto dva nástroje mnoho společných rysů. I SVK je postaven na changesetech a bez zaváhání zvládá záležitosti jako přesouvání souborů či verzování metadat. Je zde však mnoho důležitých rozdílů. Hlavní silou SVK je podpora distribuovaného vývoje, ovšem i slučovací schopnosti SVK rychle dotahují Arch, nalezneme zde podporu cherrypickingu i známého pokročilého slučovacího algoritmu z Archu, tzv. „star merge“ (který zajišťuje bezproblémové slučování i těch větví, které se někdy dříve již sloučily nebo si i vzájemně pomocí cherrypickingu vyměňovaly pouze některé revize). Navíc je SVK velmi rychlé, třikrát rychlejší než Subversion a ještě mnohem svižnější než Arch.
SVK je ale bohužel stále ve velmi rané fázi vývoje, není tedy ještě příliš zralé pro ostré nasazení a má mizernou dokumentaci. Ovšem pokud jste odvážní, líbí se vám SVN, distribuovaný vývoj a hodně větvení, ale nesnášíte Arch, určitě SVK vyzkoušejte.
BitKeeper
BitKeeper (www.bitkeeper.com) je rozšířený zejména (ale nejen) v kruzích kolem linuxového kernelu, kterým také nejvíce imponuje díky vysoce distribuovanému charakteru vývoje jádra. Jedná se totiž o systém, který je pro distribuovaný vývoj od základu vystavěný a i díky jeho ostatním charakteristikám můžeme říci, že se našemu IVS blíží ze všech zde zmiňovaných programů nejvíce.
Radost nám však kazí jeho dosti problematická licence. Jedná se totiž o komerční software s uzavřeným zdrojovým kódem, který sice můžeme používat zdarma, ovšem pouze s určitými nepříjemnými omezeními. Kód našeho projektu musí být stejně jako veškeré verzovací informace volně dostupný přes Internet (což by pro opensource projekt neměl být vážný problém), my ani náš zaměstnavatel se nesmíme podílet na vývoji žádného konkurenčního verzovacího systému a jsme povinni vždy používat nejnovější verzi BitKeeperu. To má sice ospravedlnitelné technické důvody, ovšem licence BitKeeperu postupně přibírá další a další omezení (už jich za svůj život řadu přibrala, naopak některé kladné body z ní zmizely), která jsme nuceni přijímat, pokud chceme BitKeeper dále používat.
BitKeeper podporuje changesety (i když trochu jinak než konkurence, každý soubor má totiž stále navíc i vlastní číslo revize, což má rozhodně něco do sebe), samozřejmě i přesouvání souborů a verzování metadat. V zásadě se s ním pracuje velmi podobně jako s CVS (už čísla revizí ve stylu 1.234 zahřejí na duši); řekl bych, že se ovládání CSV podobá to BitKeeperovské více než ovládání SVN, i když k sobě má SVN a CVS na nižší úrovni mnohem blíže, BitKeeper pracuje diametrálně rozdílným způsobem. Existuje možnost exportu do CVS, ovšem nevím o tom, že by to šlo i obráceně. Pokud je mi známo, přes síť komunikuje BitKeeper poměrně efektivně.
Největší důraz však BitKeeper klade na větvení, slučování a zejména distribuovaný vývoj. Při jeho vývoji bylo vynaloženo velké úsilí na maximální vyladění optimálního chování ve všech možných scénářích, samozřejmě mu nedělá problém slučování na kterýkoliv způsob, velmi efektivně pracuje s více větvemi najednou, využívá i vylepšený algoritmus pro řešení možných konfliktů.
Pokud vám nevadí licence BitKeeperu a s ní spojená nebezpečí, rozhodně ho alespoň vyzkoušejte. Z hlediska funkcionality dle mého názoru stále jednoznačně vede, a to s velkým náskokem.
Shrnuli jsme si systémy nejrozšířenější a nejpopulárnější (alespoň ve světě opensource), ovšem je dlužno alespoň krátce zmínit i několik dalších:
Perforce
Perforce (www.perforce.com) je komerční software s uzavřeným zdrojovým kódem a omezenými možnostmi šíření. Oproti CVS nabízí například podporu changesetů a rozšířený systém přístupových práv, ovšem obecně neobsahuje žádné převratné koncepty a populární je zejména díky tomu, že se jednalo o jednoho z prvních vážných konkurentů CVS.
DCVS
Distribuované CVS (www.elegosoft.com/index_dcvs.html) by spíše patřilo do dílu o různých rozšířeních CVS, tam se ovšem nevešlo a bylo by škoda ho opomenout. Kombinuje CVS a CVSup, rozšiřujíc ho o distribuovaný vývoj. Pomocí CVSup se totiž repository může libovolně replikovat, přičemž každá kopie repository si může udržovat vlastní „soukromé“ větve, do kterých lze commitovat. Uživatelé jiných repository pak tyto větve mohou samozřejmě slučovat zpět k sobě. Bohužel však řešení formou nadstavby CVS skýtá řadu nepříjemných skrytých i zjevných omezení, DCVS se navíc nijak nesnaží obejít ani překonat ostatní problémy CVS.
DARCS
Davidův pokročilý systém kontroly revizí (abridgegame.org/darcs) je velmi netradiční, avšak neobyčejně zajímavý nástroj napsaný v Haskellu, který se filosofií nejvíce podobá Archu, je však založen na teorii patchů. Primárnímy objekty zde tak nejsou stromy, mezi kterými si můžeme mimochodem vygenerovat patche. Naopak jsou primárnímy objekty patche, jejichž postupným aplikováním na prázdný strom můžeme vytvořit strom výsledný. To dává tomuto systému některé zajímavé možnosti (například detekuje vzájemné závislosti patchů, což může být velmi užitečné), ovšem obecně se jedná spíše o systém experimentální.
Monotone
Monotone (www.venge.net/monotone) je další distribuovaný verzovací systém, který se na celý problém podíval z trochu jiného úhlu – jednotliví vývojáři do projektu dělají změny, ty se odesílají do centrálního repository, a odtud si ostatní vývojáři vybírají ty změny, které chtějí. Používá také poněkud netradiční model rozdělení – není zde odděleno pouze repository a pracovní kopie, repository samotné se dělí na lokální a centrální. Klade důraz na silnou kryptografii, jednotlivé revize označuje SHA1 hashi a umožňuje uživatelům k jednotlivým revizím dodatečně přidávat komentáře.
OpenCM
Tento systém (www.opencm.org) byl vytvořen původně pro potřeby projektu EROS. Chybí v něm sice některé featurky CVS, snaží se to ovšem vynahradit podporou changesetů (říká jim konfigurace), přejmenovávání souborů, vylepšeným systémem práv a kryptografickou autentizací. Existují i plány pro podporu distribuovaného vývoje, ovšem je otázka, jestli se ještě někdy dočkají realizace.
PRCS
Project Revision Control System (prcs.sf.net) byl ve své době poměrně výraznou inspirací pro ostatní konkurenty CVS, byl totiž jedním z prvních. Nabízí podporu changesetů, přejmenovávání souborů, a dokonce do určité míry i podporu distribuovaného vývoje (fungující podobně jako u DCVS). Bohužel už není obětí aktivního vývoje, a jedná se proto podobně jako u OpenCM spíše o historickou záležitost.
Jak jsme viděli, kromě CVS se v posledních letech objevilo mnoho jiných zajímavých nástrojů – podobně, jako tomu bylo s webovými prohlížeči, po palčivém nedostatku čehokoliv uspokojivého se jich náhle vyrojila celá řada. Situace se rychle zlepšuje a konkurence utužuje, stále však chybí jednoznačný vítěz. Nejzralejší z náhražek CVS, Subversion (pokud nepočítáme uzavřený BitKeeper), chybí některé klíčové vlastnosti, Arch zase obecně není dostatečně použitelný, a všem systémům navíc chybí dobrý „kompatibilní mód“ pro CVS, který je nutný pro přechod velmi velkých projektů (velikosti KDE, gcc nebo Mozilly) z CVS do cizích vod, neboť tento přechod musí být nevyhnutelně postupný. Snad se již brzy dočkáme…
Z mnoha důvodů se naše nepravidelné putování říší verzí tímto dílem uzavírá. Doufám, že jsem vás zaujmul, možná dokonce poučil a rozšířil obzory, nebo alespoň pobavil, ovšem nyní bych rád odmaturoval a nějaký čas se soustředil opět na jiné věci. ;-)
Původním cílem bylo popsat jednotlivé konkurenční verzovací systémy poněkud blíže, a každému tak přidělit jeden díl seriálu. Nyní však máte právě vy jedinečnou možnost to udělat sami a lépe. Upřímně doufám, že na tento seriál navážete články či sériemi článků právě o tom vašem oblíbeném nástroji, ať už je to SVN, GNU Arch, Perforce, či cokoliv jiného.