Ruby 1.9.0 - zpackané vydání?

RubyPři psaní tohoto článku jsem vycházel z chybných předpokladů o Ruby 1.9 a kritika, která je v článku obsažená, není z části oprávněná. Více informací najdete v upřesňujícím dodatku.

Během letošních Vánoc vyšlo Ruby 1.9.0 – nová "velká" verze jazyka Ruby. Vydání bylo dlouho očekáváno, jelikož současná řada Ruby 1.8 je na světě už poměrně dlouho (Ruby 1.8.0 vyšlo v srpnu 2003) a trpí nezanedbatelnými problémy – především pomalostí a absencí podpory Unicode. Obojí mělo Ruby 1.9 vyřešit.

Dlouhé měsíce před vydáním panoval zmatek v tom, co vlastně Ruby 1.9 bude obsahovat a co bude obsahovat až následující verze 2.0. Jisté bylo jen to, že na rozdíl od předchozích "lichých" verzí měla být verze 1.9 stabilní – což si většina lidí překládala jako "použitelná v produkčním prostředí". Matz (tvůrce Ruby) také vytrvale prohlašoval, že nové Ruby 1.9 bude hotové během letošních Vánoc.

Mailing list

Protože se o vývoj Ruby zajímám, přihlásil jsem se koncem září do vývojářského mailing listu Ruby. Tři měsíce před vydáním jsem čekal spíše stabilizační fázi – diskuze nad zbývajícími bugy, problémy s kompatibilitou, psaním testů a dokumentace... Omyl. Řešily se velké problémy jako "budeme mít nástroj Rake přímo v Ruby nebo bude nadále externí?", dotahovala se podpora Unicode a doplňovala nová funkcionalita. Živelný vývoj. Ale budiž, ještě je na vše čas.

Mailing list jsem pak nestíhal sledovat a vrátil jsem se k němu až v druhé polovině prosince. Se zděšením jsem sledoval, že překotný vývoj stále pokračuje a žádná stabilizace se nekoná. Nic nenasvědčovalo tomu, že by se měla vydávat stabilní verze.

A přece vydáváme!

A pak přišel Matzův mail, oznamující, že nové Ruby bude opravdu vydáno v ohlášeném termínu. Tři odstavce z něj mě šokovaly:

  * The relase version will be 1.9.0, not 1.9.1 as we have
    announced before.  This denotes the fact it is not as
    stable as we expected.  But the all incompatible changes
    are done already.

  * There already are some known bugs.  The relase note will
    include the number of failed tests from standard "make test" 
    and "make test-all".

  * THE 1.9 IS INCOMPATIBLE.  YOUR APPLICATION MAY NOT WORK AS IT IS.
    The porting know-how (or porting tools maybe) will not provided as
    of the first release.

Číslo verze 1.9.0 by mělo navozovat pocit nestability? To myslí vážně, vydávat verzi, ve které ani neproběhnou správně všechny standardní testy? A co prohlášení, že nová verze je nekompatibilní se starou, ale ani se nenamáháme vám uživatelům říct, v čem? Kde to jsme?

V mailing listu se tou dobou objevovala řada oznámení o chybách, kompilačních problémech, pádech interpreteru, apod. – některé z problémů byly na poslední chvíli zazáplatovány, některé zůstaly. Doslova v hodině dvanácté pak byla vyměněna poměrně důležitá knihovna csv.rb za fastcsv.rb!

Pár hodin poté bylo Ruby 1.9.0 vydáno. Bez jakékoliv fáze feature freeze. Bez jakéhokoliv většího testování. Bez samostatné vývojové větve, přímo z hlavního stromu. Zato s popřením všech zásad softwarového inženýrství, které se týkají vydávání nových verzí "platformotvorného" softwaru. Na webu bylo Ruby 1.9.0 pro zvýšení zmatku (nebo snad proto, že autoři jsou si vědomi, jak verze vznikala) označeno jako "development release". Přesné vysvětlení, co to vlastně znamená, nebo snad nějaké poznámky k vydání ale nikde nejsou.

První problémy

"Ruby 1.9 bude naprostý průšvih", říkal jsem si, když jsem viděl výše popsaný styl vývoje. A zdá se, že opravdu je – začínají se objevovat problémy.

Prvním problémem je, že řada gemů má špatně vyplněnou hlavičku required_ruby_version, kontrolující požadovanou verzi Ruby a ač jsou s Ruby 1.9 nekompatibilní, tvrdí o sobě opak. Na vině jsou jednak autoři gemů, ale také autoři nástroje samotného, kteří nastavili nevhodnou defaultní hodnotu. Dotlačit autory všech postižených gemů k nápravě je nadlidský úkol a výsledný zmatek odnesou samozřejmě uživatelé.

O dalších problémech píše Sam Ruby. Nelíbí se mu způsob, jakým je realizována podpora Unicode v Ruby 1.9 a naráží na konkrétní chyby. Poukazuje také na příklad, kdy jedna ze standardních knihoven Ruby (REXML) nebyla upravena pro novou verzi jazyka – produkuje nevhodný výstup a emituje warningy. To je ve světě zodpovědných vývojářů důvod zablokovat vydání.

Takovou drobnost, že v novém Ruby nejedou Rails, killer-app celého jazyka, snad raději nezmiňovat.

Závěr

Dosud jsem si na základě mnoha hodin strávených koukáním do zdrojáků Ruby myslel, že Matz není moc dobrý programátor (zdrojáky Ruby jsou strašné). Nyní k tomu přidávám, že z toho, co jsem viděl, není ani dobrý vedoucí projektu – není s to zavést do procesu vydání nové verze trochu disciplíny a zajistit, aby vnější svět neměl s přijetím nové verze problém. Přitom by stačilo být důsledný, vydat před finální verzí alespoň jednu betaverzi (aby se včas přišlo na problémy s "kódem tam venku") a na webu připravit více informací pro uživatele jazyka.

Myslím si, že Ruby 1.9.0 je zpackané vydání, celkově zklame očekávání v něj vkládaná a v blízké budoucnosti se objeví další problémy, které budou muset být řešeny. Obávám se, že vydat takovouhle novou verzi Ruby tomuto jazyku spíš uškodilo, než pomohlo. Bohužel.