Když jsem dnes narazil na zprávu o kritické chybě OpenSSL v Debianu (viz třeba tato novinka na rootu), nemohl jsem tomu uvěřit. Z prakticky neprolomitelných klíčů se silou 2128 se staly „pseudo-klíče“ o „síle“ zhruba 32 000 kombinací, což se zhruba rovná tomu, jako by žádné zabezpečení vůbec neexistovalo; tato chyba navíc zůstala neodhalena po neuvěřitelné 2 roky! Nevím jak vy, ale já se ode dneška na internetu cítím daleko méně bezpečně.
Na živě.cz, kde se novinka objevila dneska, se okamžitě rozjela diskuse o tom, jak se může něco podobného stát v Open Source kódu, který si každý může zkontrolovat (a já bych dodal, že třeba banka, která se rozhodne na knihovně typu OpenSSL postavit svůj business, by si ten kód měla zkontrolovat). Zcela typicky se navíc objevilo pár příspěvků na téma Open Source vs. Windows s tradičním průběhem – „ve Windows by se tohle stát nemohlo (nebo by se na to aspoň nepřišlo)“ versus „v odhalování chyb je právě síla open source a chyby jsou v každém typu software“.
Právě posledně vyslovený názor je zajímavý. V zásadě s ním souhlasím, ale jen tak se smířit s chybami a s tím, že budou postupem času odhaleny někým bystřejším, je prostě špatně. Na tomto místě musím říct, že do vývoje GNU/Linuxu nevidím, ale podle skutečnosti, že takto kritická chyba se 2 roky jen tak toulala po světě, soudím jediné – OpenSSL knihovna nemá unit testy. A pokud je náhodou má, tak jsou k ničemu.
Absence unit (nebo jiných) testů u kritických Open Source projektů mě osobně hodně vadí. Jaktože v OpenSSL neexistuje test na korektně nastavenou délku klíče, když právě s tím dnešní kryptografie stojí a padá? Jak je možné, že v PHP 5.2.XYZ najednou na IIS přestala fungovat naprosto zásadní konstanta PHP_SELF a tím pádem mnoho webů? Proč se vývojáři spoléhají na testování komunitou, když by podobné zásadní věci měly být testovány automaticky?
Omluva není. Testy nejsou něco, co se píše, až když zbude čas a chuť – protože to se pak testy nenapíší nikdy. Testy by měly být integrální součástí vývoje a osobně dokonce zastávám názor, že správnou metodikou je TDD, tedy psaní testů před psaním samotné funkčnosti.
Kdy už si to vývojáři důležitých OSS projektů uvědomí…
Doporučuji přečíst i poněkud kvalitnější zprávu o problému na Rootu. I v samotné diskusi na Živě je k dispozici několik smysluplných poznámek, které na problém vrhají poněkud odlišné světlo.
Vyvozovat z toho ihned, že OpenSource projekt nemá unit testy má potom dvojí důsledek – osočuje veškerý OpenSource (i když v tomto případě se jedná o konkrétní chybu distribucí založených na debianu, navíc způsobenou blbostí jednotlivce) a nahrává předpokladu, že neOpenSource projekty unit testy používají.