Katedra´la a trzˇisˇteˇ Eric Raymond (Prˇelozˇil Miloslav Nicˇ) Podrobneˇ rozebı´ra´m u´speˇsˇny´ otevrˇeny´ projekt, fetchmail. Tento projekt cı´leneˇ testoval neˇktere´ prˇekvapive´ teorie o softwarove´m inzˇeny´rstvı´. Tyto teorie, inspirovane´ historiı´ Linuxu, jsou zasazeny do kontextu dvou ru˚zny´ch vy´vojovy´ch stylu˚, modelu „katedra´ly“, kterou pouzˇ´ıva´ veˇtsˇina komercˇnı´ho sveˇta a Linuxove´ho modelu „trzˇisˇteˇ“. Ukazuji, zˇe tyto modely vycha´zejı´ z protikladny´ch prˇedstav o vy´voji software. Na za´kladeˇ zkusˇenostı´ zı´skany´ch s Linuxem pote´ dokazuji, zˇe „Pokud ma´te dostatek ocˇ´ı, vsˇechny chyby jsou pru˚hledne´“, nabı´zı´m analogie s jiny´mi sebeopravujı´cı´mi syste´my a cˇla´nek koncˇ´ım diskuzı´ o tom, jake´ implikace tato fakta majı´ pro budoucnost software.
Sazbu LATEXem provedl Petr Krcˇma´rˇ
1
Obsah 1
Katedra´la a trzˇisˇteˇ
3
2
Posˇta musı´ projı´t
4
3
Je du˚lezˇite´ mı´t uzˇivatele
7
4
Publikuj brzy, publikuj cˇasto
8
5
Kdyzˇ ru˚zˇe nenı´ ru˚zˇ´ı
11
6
Popclient se sta´va´ fetchmailem
13
7
Fetchmail dospı´va´
15
8
Neˇkolik dalsˇ´ıch lekcı´ z fetchmailu
17
9
Nutne´ podmı´nky pro styl trzˇisˇteˇ
19
10 Spolecˇensky´ kontext otevrˇene´ho software
21
11 Podeˇkova´nı´
25
12 K dalsˇ´ımu cˇtenı´
26
13 Epilog: Netscape prˇijal trzˇisˇteˇ
27
2
1
Katedra´la a trzˇisˇteˇ
Kdo by si pomyslel jesˇteˇ prˇed peˇti lety, zˇe prvotrˇ´ıdnı´ operacˇnı´ syste´m mu˚zˇe vzniknout jakoby kouzlem z dobrovolne´ pra´ce neˇkolika tisı´c programa´toru˚ roztrousˇeny´ch po cele´m sveˇteˇ propojeny´ch pouze chapadly internetu. Ja´ urcˇiteˇ ne. Pocˇa´tkem roku 1993, kdy se Linux poprve´ objevil na me´ radarove´ obrazovce, jsem se jizˇ 10 let zaby´val Unixem a otevrˇeny´m vy´vojem. V polovineˇ osmdesa´ty´ch let jsem patrˇil k prvy´m prˇispeˇvatelu˚m GNU, prˇes internet jsem zprˇ´ıstupnil rˇadu otevrˇene´ho software, vyvinul jsem nebo se podı´lel na vy´voji neˇkolika programu˚ (nethack, VC a GUD mo´dy Emacsu, xlife, atd.), ktere´ se dodnes pouzˇ´ıvajı´. Domnı´val jsem se, zˇe vı´m jak na to. Linux postavil na hlavu mnohe´ z toho, co jsem znal. Le´ta jsem sˇ´ırˇil Unixovou vı´ru v drobne´ na´stroje, rychle´ psanı´ prototypu˚ a evolucˇnı´ programova´nı´. Take´ jsem ale veˇrˇil v existenci kriticke´ meze slozˇitosti, po jejı´mzˇ prˇekrocˇenı´ je jizˇ vyzˇadova´n vı´ce centralizovany´ prˇ´ıstup. Veˇˇril jsem, zˇe nejdu˚lezˇiteˇjsˇ´ı software (operacˇnı´ syste´my a opravdu velke´ na´stroje jako Emacs) musı´ by´t staveˇny stejneˇ jako katedra´ly, pecˇliveˇ opracova´va´ny jednotlivy´mi cˇarodeˇji nebo maly´mi skupinami kouzelnı´ku˚ pracujı´cı´ch v prˇ´ıjemne´m osameˇnı´ a publikujı´cı´mi prve´ vy´sledky sve´ pra´ce azˇ ve vhodny´ cˇas. Vy´voj ve stylu Linuse Torvaldse – publikuj brzy a cˇasto, prˇenes na ostatnı´ vsˇe co mu˚zˇesˇ, bud’ otevrˇeny´ azˇ te´meˇrˇ k bodu promiskuity, to bylo velke´ prˇekvapenı´. Linuxove´ spolecˇenstvı´ vı´ce prˇipomı´na´ velke´ hlucˇne´ trzˇisˇteˇ ru˚zny´ch metod a postupu˚ nezˇ tichou, oddanou pra´ci na stavbeˇ katedra´ly. Linuxove´ archivy, ktere´ prˇijı´majı´ prˇ´ıspeˇvky od kohokoliv, jsou toho du˚kazem. Zda´lo by se, zˇe z neˇcˇeho takove´ho se mu˚zˇe koherentnı´ a stabilnı´ syste´m vynorˇit pouze se´riı´ za´zraku˚. Fakt, zˇe tento styl trzˇisˇteˇ fungoval a fungoval dobrˇe, to bylo velke´ prˇekvapenı´. Kdyzˇ jsem se naucˇil v tomto sveˇteˇ orientovat, pracoval jsem usilovneˇ nejen na jednotlivy´ch projektech, ale take´ jsem se pokousˇel porozumeˇt, jak je mozˇne´, zˇe se sveˇt Linuxu nejen zˇe nerozletı´ na kusy v naproste´m zmatku, ale naopak neusta´le sı´lı´ rychlostı´, kterou si umı´ stavitele´ katedra´l steˇzˇ´ı prˇedstavit. V polovineˇ roku 1996 se mi zda´lo, zˇe jsem syste´mu porozumeˇl. Na´hoda mi prˇihra´la do cesty vy´borny´ zpu˚sob, jak sve´ teorie otestovat formou otevrˇene´ho projektu, ktery´ jsem mohl cı´leneˇ rozbeˇhnout ve stylu trzˇisˇteˇ. Vyuzˇil jsem sˇance a projekt skoncˇil velky´m u´speˇchem. Ve zbytku cˇla´nku va´m budu vypra´veˇt prˇ´ıbeˇh tohoto projektu a na jeho za´kladeˇ navrhnu neˇkolik algoritmu˚ pro efektivnı´ pra´ci v otevrˇene´m projektu. Ne vsˇe jsem se naucˇil azˇ ve sveˇteˇ Linuxu, ale uvidı´me, jak linuxovy´ sveˇt klade na neˇktere´ veˇci obzvla´sˇtnı´ du˚raz. Pokud se nemy´lı´m, pomu˚zˇe va´m prˇesneˇ pochopit, co cˇinı´ z Linuxove´ho spolecˇenstvı´ takovou studnici dobre´ho software a pomu˚zˇe i va´m zvy´sˇit produktivitu.
3
2
Posˇta musı´ projı´t
Od roku 1993 jsem meˇl na starosti technicke´ zabezpecˇenı´ male´ho poskytovatele bezplatne´ho prˇ´ıstupu k internetu (Chester County InterLink - CCIL, West Chester, Pennsylvania). Patrˇ´ım k zakladatelu˚m CCIL a napsal jsem pro neˇj unika´tnı´ mnohauzˇivatelsky´ buletinovy´ software, ktery´ si mu˚zˇete prohle´dnout prˇes telnet na adrese locke.ccil.org. V dnesˇnı´ dobeˇ podporuje te´meˇrˇ 3000 uzˇivatelu˚ na 30 linka´ch. Tato pra´ce mi umozˇnila 24hodinovy´ prˇ´ıstup na internet prˇes 56K linku CCIL, pro moji pra´ce byl takovy´ prˇ´ıstup nutnostı´. Dı´ky tomu jsem si zvykl na okamzˇity´ prˇ´ıstup k e-mailu. Z ru˚zny´ch slozˇity´ch du˚vodu˚ bylo obtı´zˇne´ zprovoznit SLIP mezi my´m doma´cı´m pocˇ´ıtacˇem (snark.thyrsus.com) a CCIL. Kdyzˇ se mi to konecˇneˇ podarˇilo, pravidelne´ logova´nı´ a kontrola posˇty prˇes telnet meˇ zacˇalo obteˇzˇovat. Potrˇeboval jsem neˇjak prˇesunout posˇtu na mu˚j doma´cı´ pocˇ´ıtacˇ snark tak, abych byl upozorneˇn prˇi jejı´m prˇijetı´. Posˇtu jsem pak chteˇl da´le zpracova´vat s pomocı´ ru˚zny´ch programu˚ na me´m osobnı´m pocˇ´ıtacˇi. Jednoduche´ prˇesmeˇrova´nı´ posˇty programem sendmail neprˇipadalo v u´vahu, protozˇe mu˚j pocˇ´ıtacˇ nenı´ vzˇdy prˇipojen k sı´ti a nema´ sta´lou IP adresu. Potrˇeboval jsem program, ktery´ by mne prˇipojil prˇes SLIP a pote´ prˇenesl posˇtu. Veˇdeˇl jsem, zˇe takove´ programy existujı´ a zˇe veˇtsˇina z nich vyuzˇ´ıva´ jednoduchy´ aplikacˇnı´ protokol, nazy´vany´ POP (posˇtovnı´ protokol). A skutecˇneˇ, na´sˇ BSD/OS operacˇnı´ syste´m v sobeˇ obsahoval i POP3 server. Potrˇeboval jsem tedy POP3 klienta. Rozhle´dl jsem se po sı´ti a jeden jsem nasˇel. Tedy ve skutecˇnosti jsem jich nalezl neˇkolik. Po neˇjaky´ cˇas jsem pouzˇ´ıval pop-perl, ale tomu chybeˇla funkce, kterou jsem povazˇoval za podstatnou, nebyl totizˇ schopen pozmeˇnit adresy prˇicha´zejı´cı´ posˇty tak, abych mohl na obdrzˇenou posˇtu prˇ´ımo odpovı´dat. Proble´m spocˇ´ıval v tomto: ˇrekneˇme, zˇe neˇkdo se jme´nem „joe“ mi poslal email. Pokud jsem si jej sta´hl na snark a pote´ se na neˇj pokusil odpoveˇdeˇt, mu˚j posˇtovnı´ klient se snazˇil poslat odpoveˇd’ neexistujı´cı´mu joeovi na snarku. Rucˇnı´ editace adres mne ale brzy zacˇala unavovat. Toto byla veˇc, kterou mohl pocˇ´ıtacˇ deˇlat za mne. Zˇa´dny´ z existujı´cı´ch klientu˚ ale neveˇdeˇl jak. A to na´m prˇina´sˇ´ı prve´ ponaucˇenı´: 1. Kazˇdy´ dobry´ program zacˇ´ına´ tı´m, zˇe rˇesˇ´ı potı´zˇe samotne´ho programa´tora. Mozˇna´, zˇe by to meˇlo by´t samozrˇejme´ (existuje stare´ prˇ´ıslovı´: „Nutnost je matka pokroku“), ale azˇ prˇ´ılisˇ cˇasto vy´voja´rˇi tra´vı´ svu˚j cˇas pracı´ na programech, za ktere´ jsou placeni, ale ktere´ ani nemilujı´ ani nepotrˇebujı´. To vsˇak neplatı´ ve sveˇteˇ Linuxu a snad pra´veˇ proto je pru˚meˇrna´ kvalita software vyvinute´ho v Linuxove´m spolecˇenstvı´ tak vysoka´. Takzˇe, vrhl jsem se okamzˇiteˇ do horecˇne´ho programova´nı´ a zacˇal psa´t zcela 4
nove´ho POP3 klienta, ktery´ by mohl souteˇzˇit s existujı´cı´mi programy? V zˇa´dne´m prˇ´ıpadeˇ! Pecˇliveˇ jsem prostudoval zna´me´ POP programy a hledal takovy´, ktery´ nejvı´ce odpovı´dal my´m prˇedstava´m. 2. Protozˇe dobrˇ´ı programa´torˇi veˇdı´ co psa´t. Velcı´ veˇdı´, co prˇepsat (a znovu pouzˇ´ıt) Acˇkoli o sobeˇ netvrdı´m, zˇe jsem velky´ programa´tor, snazˇ´ım se ty velke´ napodobit. Du˚lezˇity´m rysem velky´ch programa´toru˚ je konstruktivnı´ lenost. Veˇdı´, zˇe cˇloveˇk nenı´ ocenˇova´n za u´silı´, ale za vy´sledky, a zˇe je te´meˇrˇ vzˇdy snazsˇ´ı zacˇ´ıt od dobry´ch cˇa´stecˇny´ch rˇesˇenı´ nezˇ od u´plne´ho pocˇa´tku. Linus Torvalds take´ nezacˇal psa´t Linux od prve´ rˇa´dky. Mı´sto toho pouzˇil ko´d a na´pady Minixu, male´ho operacˇnı´ho syste´mu napodobujı´cı´ho Unix, ktery´ byl urcˇen pro pocˇ´ıtacˇe rˇady 386. Dnes jizˇ vesˇkery´ pu˚vodnı´ ko´d Minixu bud’to zmizel zcela nebo byl od za´kladu prˇepsa´n, ale na pocˇa´tku vytva´rˇel lesˇenı´ podpı´rajı´cı´ batole, ktere´ se nakonec stalo Linuxem. Veden stejny´mi motivy jsem prohlı´zˇel existujı´cı´ POP programy a hledal takove´, ktere´ byly vhodne´ jako za´klad pro dalsˇ´ı vy´voj. Tradice sdı´lenı´ zdrojovy´ch souboru˚ Unixove´ho sveˇta byla vzˇdy nakloneˇna recyklova´nı´ starsˇ´ıch ko´du˚ (proto take´ GNU zvolil Unix jako svu˚j za´kladnı´ operacˇnı´ syste´m). Linux dovedl tuto tradici te´meˇrˇ k jejı´mu technologicke´mu limitu. V jeho sveˇteˇ jsou prˇ´ıstupne´ terabajty volny´ch zdroju˚. Jestlizˇe zde hleda´te te´meˇrˇ vyhovujı´cı´ program, ma´te veˇtsˇ´ı sˇanci na u´speˇch nezˇ kdekoliv jinde. Obdobneˇ vsˇe fungovalo i v me´m prˇ´ıpadeˇ. Spolu s tı´m, co jsem nalezl jizˇ drˇ´ıve, mu˚j druhy´ pru˚zkum odkryl celkem 9 kandida´tu˚: fetchpop, PopTart, getmail, gwpop, pimp, pop-perl, popc, popmail a upop. Nejdrˇ´ıve jsem se rozhodl pro fetchpop od Seung-Hong Oh. Vlozˇil jsem do neˇho moji funkci na prˇepisova´nı´ adres a ucˇinil neˇkolik dalsˇ´ıch zmeˇn, ktere´ autor pozdeˇji zarˇadil do verze 1.9. Neˇkolik ty´dnu˚ pozdeˇji jsem ale narazil na zdroj programu popclient, ktery´ napsal Carl Harris, a zjistil jsem, zˇe stojı´m prˇed proble´mem. Acˇkoliv fetchpop obsahoval neˇkolik dobry´ch pu˚vodnı´ch na´padu˚ (naprˇ´ıklad mo´d de´mon), doka´zal pouze spravovat POP3 a byl programova´n poneˇkud amate´rsky (Seung-Hong byl schopny´, ale nezkusˇeny´ programa´tor, a obeˇ tyto charakteristiky se na ko´du projevily). Carlu˚v ko´d byl lepsˇ´ı, na profesiona´lnı´ u´rovni a stabilnı´, ale jeho programu chybeˇlo neˇkolik du˚lezˇity´ch funkcı´, ktere´ je celkem obtı´zˇne´ naprogramovat, vcˇetneˇ teˇch, ktere´ jsem programoval ja´ sa´m. Zu˚stat prˇi stare´m nebo volit zmeˇnu? Pokud bych se rozhodl pro zmeˇnu, musel bych obeˇtovat vsˇechen dosud napsany´ ko´d, zı´skal bych ale lepsˇ´ı vy´vojovou za´kladnu. Prakticky´m argumentem, ktery´ doporucˇoval zmeˇnu, byla podpora rˇady protokolu˚. POP3 je nejbeˇzˇneˇji pouzˇ´ıvany´ protokol, ale nenı´ jediny´. Fetchpop a dalsˇ´ı podobne´ programy neumeˇly POP2, RPOP nebo APOP a ja´ jizˇ zacˇ´ınal prˇemy´sˇlet o prˇida´nı´ IMAPu (nejnoveˇjsˇ´ıho a nejvsˇestranneˇjsˇ´ıho posˇtovnı´ho protokolu). Meˇl jsem ale i dalsˇ´ı, teoreticky´ du˚vod, procˇ prˇemy´sˇlet o zmeˇneˇ. Bylo to neˇco, 5
co jsem se naucˇil dlouho prˇed Linuxem. Pocˇ´ıtejte s tı´m, zˇe alesponˇ jednou budete muset vsˇe prˇepsat, stejneˇ va´s to nemine (Fred Brooks, „The Mythical Man-Month“, Kapitola 11) Nebo, rˇecˇeno jiny´mi slovy, tak dlouho proble´mu doopravdy neporozumı´te, pokud se ho nepokusı´te neˇjak vyrˇesˇit. Podruhe´ uzˇ budete mozˇna´ veˇdeˇt, jak na to. Takzˇe pokud chcete najı´t spra´vne´ rˇesˇenı´, bud’te prˇipraveni zacˇ´ıt alesponˇ jednou znovu. Dobrˇe (rˇekl jsem si), u´pravy fetchpopu byly my´m prvnı´m pokusem a zmeˇnil jsem programovou za´kladnu. Pote´, co jsem 25. cˇervna 1996 poslal opravy popclienta Carl Harrisovi, zjistil jsem, zˇe on sa´m jizˇ ve sve´ podstateˇ ztratil o projekt za´jem. Ko´d uzˇ byl trochu zapra´sˇeny´ a bylo v neˇm neˇkolik drobny´ch, snadno opravitelny´ch chyb. Ja´ potrˇeboval ucˇinit rˇadu zmeˇn a tak jsme se rychle dohodli na tom, zˇe projekt prˇevezmu. Anizˇ jsem si to sa´m uveˇdomil, projekt nabral na tempu. Nepracoval jsem jizˇ pouze na drobny´ch zmeˇna´ch existujı´cı´ho POP klienta. Prˇevzal jsem vy´voj cele´ho programu a v me´ hlaveˇ se rojily na´pady, od ktery´ch jsem ocˇeka´val, zˇe pravdeˇpodobneˇ povedou k velky´m zmeˇna´m. Ve spolecˇenstvı´ch programa´toru˚, ve ktery´ch je podporova´no sdı´lenı´ ko´du, je takovy´to vy´voj projektu prˇirozeny´. Jednal jsem podle na´sledujı´cı´ho pravidla: 4. Pokud ma´te spra´vny´ prˇ´ıstup, zajı´mave´ proble´my si va´s najdou samy. Ale prˇ´ıstup Carla Harrise byl jesˇteˇ du˚lezˇiteˇjsˇ´ı. Veˇdeˇl zˇe: 5. Kdyzˇ ztratı´te za´jem o program, vasˇ´ı poslednı´ povinnostı´ je prˇedat jej schopne´mu na´stupci. Anizˇ jsme o tom museli diskutovat, Carl i ja´ jsme veˇdeˇli, zˇe ma´me spolecˇny´ cı´l, nale´zt to nejlepsˇ´ı mozˇne´ rˇesˇenı´. Jedinou ota´zkou pro oba zu˚stalo, jak proka´zat, zˇe jsem vhodny´ na´sledovnı´k. Jakmile se mi to podarˇilo, zachoval se u´ctyhodneˇ, a prˇenechal mi sve´ mı´sto. Doufa´m, zˇe budu jednat stejneˇ, azˇ prˇijde mu˚j cˇas.
6
3
Je du˚lezˇite´ mı´t uzˇivatele
A tak jsem zdeˇdil popclienta. Rovneˇzˇ, a to bylo stejneˇ du˚lezˇite´, jsem zdeˇdil jeho uzˇivatele. Mı´t uzˇivatele, to je bezvadna´ veˇc, a nejen proto, zˇe mu˚zˇete proka´zat, zˇe deˇla´te neˇco uzˇitecˇne´ho. Pokud si jich rˇa´dneˇ hledı´te, mohou se z nich sta´t vasˇi spolupracovnı´ci. Dalsˇ´ı silnou stra´nkou tradice Unixu, kterou Linux dotlacˇil azˇ do extre´mu, je to, zˇe mnoho uzˇivatelu˚ je za´rovenˇ programa´tory. Protozˇe je zdrojovy´ ko´d dostupny´, mohou se i oni sta´t efektivnı´mi hackery. To mu˚zˇe by´t neocenitelne´ pro zkra´cenı´ vy´vojove´ho cyklu. Pokud se jim dostane alesponˇ male´ho povzbuzenı´, vasˇi uzˇivatele´ naleznou proble´my, navrhnou rˇesˇenı´ a pomohou vylepsˇit ko´d mnohem rychleji, nezˇ vy sa´m bez jejich pomoci. 6. Pokud jedna´te s uzˇivateli jako se spolupracovnı´ky, je to ta nejsnazsˇ´ı cesta k rychle´mu vylepsˇenı´ ko´du a efektivnı´mu odstranˇova´nı´ chyb. Sı´lu tohoto efektu je velmi snadne´ podcenit. Ve skutecˇnosti asi vsˇichni z na´s pohybujı´cı´ch se v otevrˇene´m prostrˇedı´ drasticky podcenˇovali, jak snadno je udrzˇova´n syste´m v chodu prˇi zvysˇujı´cı´m se mnozˇstvı´ uzˇivatelu˚ a prˇi jeho naru˚stajı´cı´ slozˇitosti, dokud na´m Linus Torvalds neuka´zal, jak na to. Ve skutecˇnosti se domnı´va´m, zˇe Linusu˚v nejchytrˇejsˇ´ı a nejdu˚lezˇiteˇjsˇ´ı prˇ´ınos nebylo vytvorˇenı´ ja´dra Linuxu, ale jeho objev modelu vy´voje. Kdyzˇ jsem tuto veˇtu pronesl jednou v jeho prˇ´ıtomnosti, usma´l se a tisˇe zopakoval neˇco, co cˇasto rˇ´ıka´: „Ja´ jsem ve skutecˇnosti velmi lı´ny´ a ra´d jsem chva´len za veˇci, ktere´ udeˇla´ neˇkdo jiny´“. Lı´ny´ jako lisˇka. Nebo, jak by mohl rˇ´ıct Robert Heinlein, prˇ´ılisˇ lı´ny´ na to, abych mohl selhat. Kdyzˇ se ohle´dneme do minulosti, nalezneme zde precedent vyuzˇ´ıvajı´cı´ metody Linuxu a to vy´voj Lisp knihoven GNU Emacs a archı´vu˚ Lisp ko´du˚. Na rozdı´l od katedra´lnı´ho stylu pra´ce na Emacs-C a veˇtsˇineˇ ostatnı´ch FSF programu˚, vy´voj Lisp zdroju˚ byl velmi flexibilnı´ a veden uzˇivateli. Na´pady a prototypy programu˚ byly cˇasto neˇkolikra´t prˇepsa´ny nezˇ dosa´hly stabilnı´ konecˇne´ podoby. A volne´ spojenı´ spolupracovnı´ku˚ prˇes internet a´ la Linux bylo cˇaste´. Ovsˇem, i mu˚j vlastnı´ neju´speˇsˇneˇjsˇ´ı prˇ´ıspeˇvek prˇed fetchmailem byl s velkou pravdeˇpodobnostı´ Emacs VC mo´d, spolupra´ce se trˇemi dalsˇ´ımi lidmi ve stylu Linuxu, z nichzˇ dodnes osobneˇ zna´m pouze Richarda Stallmana FSF, autora Emacsu a zakladatele FSF. Jednalo se o front end pro SCCS, RCS a pozdeˇji CVS, pro ktere´ Emacs nabı´zel jednoduchou kontrolu verzı´. Vyvinul se z male´ho, jednoduche´ho sccs.el mo´du, ktery´ napsal neˇkdo jiny´. A vy´voj VC byl u´speˇsˇny´, protozˇe, na rozdı´l od samotne´ho Emacsu, Lisp ko´d mohl velmi rychle procha´zet cykly publikuj/otestuj/vylepsˇi.
7
4
Publikuj brzy, publikuj cˇasto
Cˇasne´ a cˇaste´ publikova´nı´ vykonane´ pra´ce patrˇ´ı ke kriticky´m cˇa´stem vy´vojove´ho modelu Linuxu. Veˇtsˇina vy´voja´rˇu˚, vcˇetneˇ mne, drˇ´ıve veˇrˇila, zˇe je to sˇpatny´ postup pro vsˇechny veˇtsˇ´ı projekty, protozˇe prve´ verze majı´ te´meˇrˇ urcˇiteˇ rˇadu chyb a vy nechcete pokousˇet trpeˇlivost svy´ch uzˇivatelu˚. Tato vı´ra posilovala obecnou du˚veˇru ve styl staveˇnı´ katedra´l. Pokud bylo za´kladnı´ podmı´nkou, aby uzˇivatele´ videˇli co nejme´neˇ chyb, pak je nejlepsˇ´ı publikovat maxima´lneˇ jednou za pu˚l roku a drˇ´ıt do u´moru na odstranˇova´nı´ chyb v mezidobı´. Emacs C byl vyvı´jen tı´mto zpu˚sobem. Lisp knihovny ale vznikaly rozdı´lneˇ. Jednalo se o aktivnı´ archivy mimo kontrolu FSF, ve ktery´ch jste mohli nale´zt nove´ a experimenta´lnı´ verze i v obdobı´ch, kdy samotny´ Emacs nebyl publikova´n. Nejdu˚lezˇiteˇjsˇ´ı z teˇchto archı´vu˚, Ohio state elisp archı´v, vykazoval ducha a mnoho rysu˚ dnesˇnı´ch velky´ch linuxovy´ch archı´vu˚. Ale jen ma´lo z na´s tehdy opravdu du˚sledneˇ prˇemy´sˇlelo o tom, co deˇla´me, nebo o tom, co samotna´ jejich existence naznacˇovala o proble´mech modelu stavitelu˚ katedra´l, ktery´ FSF vyuzˇ´ıval. V roce 1992 jsem se va´zˇneˇ pokousˇel zahrnout velkou cˇa´st Ohio archı´vu do oficia´lnı´ Emacs Lisp knihovny, ale narazil jsem na rˇadu politicky´ch proble´mu˚ a tento pokus byl z velke´ cˇa´sti neu´speˇsˇny´. Ale beˇhem roku, jak se Linux sta´val zna´my´m, bylo jasne´, zˇe probı´ha´ neˇco jine´ho a mnohem zdraveˇjsˇ´ıho. Linusova otevrˇena´ vy´vojova´ politika byla prˇesny´m protikladem vy´stavby katedra´l. Sunsite a tsx-11 archı´vy prˇekypovaly, byla rozsˇirˇova´na rˇada distribucı´. A to vsˇe doprova´zela prˇedtı´m nevı´dana´ frekvence publikacı´ novy´ch verzı´ ja´dra syste´mu. Linus jednal se svy´mi uzˇivateli jako se spolupracovnı´ky tı´m nejefektivneˇjsˇ´ım zpu˚sobem 7. Publikuj brzy. Publikuj cˇasto. A naslouchej svy´m za´kaznı´ku˚m. Linusova inovace nespocˇ´ıvala ani tak v tom, zˇe neˇco podobne´ho deˇlal (to uzˇ meˇlo dlouhou tradici ve sveˇteˇ Unixu), ale v tom, zˇe cely´ proces prˇevedl do rozmeˇru˚ a slozˇitosti samotne´ho Linuxu. V te´to rane´ eposˇe (okolo roku 1991), byly beˇzˇne´ publikace nove´ho ja´dra i neˇkolikra´t denneˇ. Protozˇe si kultivoval svoji za´kladnu spolupracovnı´ku˚ a vyuzˇ´ıval internet pro spolupra´ci vı´ce nezˇ kdokoliv jiny´, tak vsˇe pracovalo. Ale jak to vsˇechno mohlo pracovat? A bylo to neˇco, co jsem ja´ sa´m mohl kopı´rovat nebo vsˇe spocˇ´ıvalo na nenapodobitelne´ genialiteˇ Linuse Torvaldse? Ja´ si to nemyslel. Je pravda, zˇe Linus je zatraceneˇ dobry´ programa´tor, vzˇdyt’ kolik z na´s by doka´zalo vytva´rˇet cele´ ja´dro operacˇnı´ho syste´mu v produkcˇnı´ kvaliteˇ? Ale Linux neprˇedstavoval zˇa´dny´ ohromny´ koncepcˇnı´ skok vprˇed. Linus nenı´, tedy alesponˇ zatı´m, inovacˇnı´ ge´nius designu, takovy´, jako je trˇeba Richard Stallman nebo James Gosling (NeWS, Java). Linus je spı´sˇe inzˇeny´rsky´ ge´nius, ma´ sˇesty´ smysl pro obcha´zenı´ chyb a slepy´ch ulicˇek, ma´ opravdovy´ cit pro nalezenı´ 8
nejme´neˇ nama´have´ cesty z bodu A do bodu B. Ovsˇem, celkovy´ design Linuxu v sobeˇ nese tuto kvalitu a odra´zˇ´ı Linusu˚v ve sve´ podstateˇ konzervativnı´ a zjednodusˇujı´cı´ prˇ´ıstup. Takzˇe, pokud rychle´ publikova´nı´ a vyuzˇ´ıva´nı´ internetu nebylo na´hodne´, ale prˇedstavovalo integra´lnı´ soucˇa´st Linusova inzˇeny´rske´ho ge´nia pro nalezenı´ nejsnazsˇ´ı cesty, co se snazˇil maximalizovat? Co dosta´val z cele´ho soustrojı´? Pokud je ota´zka polozˇena takto, sama nabı´zı´ odpoveˇd’. Linus udrzˇoval sve´ uzˇivatele/spoluautory neusta´le stimulovane´ a odmeˇnˇovane´. Stimulovane´ tı´m, zˇe majı´ neusta´le prˇed sebou neˇjakou uspokojujı´cı´ pra´ci, odmeˇnˇovane´ tı´m, zˇe vidı´ neusta´la´ (dokonce dennı´) vylepsˇenı´ sve´ pra´ce. Linus se pokousˇel maximalizovat pocˇet hodin, ktere´ jsou veˇnova´ny na odstranˇova´nı´ chyb a na rozvoj, acˇkoliv hrozilo mozˇne´ riziko nestability ko´du a vyhorˇenı´ uzˇivatelske´ ba´ze, pokud by se neˇjaka´ va´zˇna´ chyba uka´zala neodstranitelnou. Linus se choval tak, jako by veˇrˇil v neˇco jako: 8. Pokud ma´te dostatecˇneˇ velkou za´kladnu spolupracovnı´ku˚ a testeru˚, te´meˇrˇ kazˇdy´ proble´m bude rychle charakterizova´n a jeho rˇesˇenı´ bude pro neˇkoho jednoduche´. Nebo, me´neˇ forma´lneˇ „Pokud ma´te dostatek ocˇ´ı, vsˇechny chyby jsou pru˚hledne´.“ Ja´ to nazy´va´m Linusovy´m za´konem. Ma´ pu˚vodnı´ formulace tohoto jevu zneˇla: kazˇdy´ proble´m bude pro neˇkoho rˇesˇitelny´. Linus ovsˇem upozornil, zˇe cˇloveˇk, ktery´ proble´mu porozumeˇl a vyrˇesˇil ho, nemusı´ by´t a veˇtsˇinou neby´va´ ten, kdo jej prvnı´ charakterizoval. Linus rˇ´ıka´: „Neˇkdo nalezne proble´m a neˇkdo jiny´ mu rozumı´. A ja´ dokonce tvrdı´m, zˇe nale´zt proble´m je na´rocˇneˇjsˇ´ı“. Du˚lezˇite´ ale je, zˇe nalezenı´ i vyrˇesˇenı´ veˇtsˇinou probeˇhne rychle. V tom je, myslı´m, za´kladnı´ rozdı´l mezi stylem stavitelu˚ katedra´l a stylem trzˇisˇteˇ. Z pohledu stavitelu˚ katedra´l, programove´ chyby a vy´vojove´ proble´my jsou na´rocˇne´ a komplikovane´ jevy. Trva´ meˇsı´ce pecˇlive´ho zkouma´nı´ neˇkolika zasveˇceny´ch, nezˇ zı´ska´te jistotu, zˇe jste vsˇe vyhladili. Proto dlouhe´ intervaly mezi publikacemi a nevyhnutelna´ zklama´nı´, zˇe dlouho ocˇeka´vany´ program nenı´ zdaleka dokonaly´. Z pohledu trzˇisˇteˇ naopak prˇedpokla´da´te, zˇe chyby jsou obvykle snadno rˇesˇitelne´, nebo alesponˇ, zˇe se takovy´mi rychle stanou, kdyzˇ se na neˇ zameˇrˇ´ı tisı´ce dychtivy´ch spolupracovnı´ku˚, nedocˇkaveˇ ocˇeka´vajı´cı´ch dalsˇ´ı verzi. Proto publikujete cˇasto, abyste zı´skali vı´ce oprav a jako prospeˇsˇny´ vedlejsˇ´ı efekt ztra´cı´te me´neˇ, pokud obcˇas dojde k neˇjake´mu proble´mu. A to je vsˇe. To opravdu stacˇ´ı. Pokud je „Linusu˚v za´kon“ nepravdivy´, potom jaky´koliv syste´m tak komplexnı´, jako je ja´dro Linuxu, na ktere´m se spolupodı´lelo tolik autoru˚, by se musel v neˇjaky´ okamzˇik zhroutit pod tı´hou neprˇedvı´dany´ch sˇpatny´ch interakcı´ a nenalezeny´ch, hluboko ukryty´ch chyb. Pokud je ale pravdivy´, pak postacˇuje na vysveˇtlenı´, procˇ Linux obsahuje tak ma´lo programovy´ch chyb. 9
A mozˇna´ by to ani nemeˇlo by´t takove´ prˇekvapenı´. Sociologove´ jizˇ prˇed lety objevili, zˇe pru˚meˇrny´ na´zor velke´ho mnozˇstvı´ stejneˇ dobry´ch (nebo sˇpatny´ch) pozorovatelu˚ je podstatneˇ spolehliveˇjsˇ´ı nezˇ na´zor jake´hokoliv na´hodneˇ zvolene´ho pozorovatele. To se nazy´va´ Delphi efektem. Zda´ se, zˇe Linus proka´zal, zˇe tento jev se ty´ka´ i tvorby operacˇnı´ho syste´mu, zˇe Delphi efekt doka´zˇe zkrotit i tak komplexnı´ za´lezˇitost, jako je konstrukce ja´dra OS. Jsem vdeˇcˇen Jeffovi Dutky
, ktery´ upozornil na to, zˇe Linusu˚v za´kon mu˚zˇe by´t prˇelozˇen jako „debugova´nı´ je paralelizovatelne´“. Jeff si vsˇiml, zˇe acˇkoliv odstranˇova´nı´ chyb vyzˇaduje, aby jednotlivı´ spolupracovnı´ci komunikovali s neˇjaky´m koordina´torem, nevyzˇaduje vy´znamnou spolupra´ci mezi jednotlivy´mi spolupracovnı´ky. Proto nepada´ za obeˇt’ kvadraticke´mu zvysˇova´nı´ komplexity a na´roku˚m na administraci, ktera´ v jiny´ch prˇ´ıpadech znesnadnˇuje zapojenı´ vı´ce vy´voja´rˇu˚. Ve skutecˇnosti se teoreticka´ ztra´ta u´cˇinnosti zpu˚sobena´ duplikacı´ pra´ce nezda´ by´t proble´mem ve sveˇteˇ Linuxu. Jeden z vy´sledku˚ cˇasne´ho a cˇaste´ho publikova´nı´ je fakt, zˇe prˇ´ıpadne´ duplikace jsou brzy odhaleny. Brooks dokonce ucˇinil na´sledujı´cı´ pozorova´nı´: „Celkova´ cena u´drzˇby beˇzˇneˇ pouzˇ´ıvane´ho programu je okolo 40 % nebo i vı´ce z ceny jeho vy´voje.“ Je prˇekvapujı´cı´, zˇe tato cena je znacˇneˇ ovlivneˇna pocˇtem uzˇivatelu˚. Vı´ce uzˇivatelu˚ nalezne vı´ce chyb. Vı´ce uzˇivatelu˚ nalezne vı´ce chyb, nebot’s pocˇtem uzˇivatelu˚ prˇiby´va´ zpu˚sobu˚, ktery´m jsou programy testova´ny. Tento efekt je zesı´len, pokud se uzˇivatele´ za´rovenˇ podı´lejı´ na vy´voji programu. Kazˇdy´ z nich vnı´ma´ proble´my prˇi detekci chyb z jine´ho u´hlu pohledu. Delphi efekt funguje, jak se zda´, pra´veˇ dı´ky te´to rozmanitosti. Ve specificke´m kontextu odhalova´nı´ chyb tento styl rovneˇzˇ snizˇuje mnozˇstvı´ duplika´tnı´ch cˇinnostı´. Takzˇe s prˇiby´vajı´cı´m pocˇtem testeru˚ se sice nemusı´ zmensˇit komplexita te´ nejobtı´zˇneˇjsˇ´ı chyby z pohledu vy´voja´rˇe, ale stoupa´ sˇance, zˇe neˇkomu jine´mu se podarˇ´ı chybu odhalit. Linus je take´ obezrˇetny´. V prˇ´ıpadeˇ, zˇe se vyskytnou va´zˇne´ proble´my, Linuxove´ ja´dro je cˇ´ıslova´no takovy´m zpu˚sobem, zˇe potencia´lnı´ uzˇivatel mu˚zˇe bud’to pouzˇ´ıvat poslednı´ verzi, ktera´ je oznacˇena jako stabilnı´, a nebo sledovat vy´voj a mı´t nove´ mozˇnosti, ale to vsˇe za cenu rizika chyb v programu. Tuto taktiku jesˇteˇ neuplatnˇuje veˇtsˇina linuxovy´ch hackeru˚, ale asi by meˇla. Dostupnost obou alternativ prˇispı´va´ k atraktiviteˇ programu.
10
5
Kdyzˇ ru˚zˇe nenı´ ru˚zˇ´ı
Pote´, co jsem studoval Linusovo chova´nı´ a zformuloval teorii, procˇ bylo u´speˇsˇne´, veˇdomeˇ jsem se rozhodl tuto teorii otestovat na me´m vlastnı´m (acˇkoliv zdaleka ne tak komplexnı´m) projektu. Ale prvnı´ veˇc, kterou jsem ucˇinil, byla reorganizace a zjednodusˇenı´ popclienta. Carlova implementace byla velmi rozumna´, ale vykazovala nepotrˇebnou slozˇitost, ktera´ je beˇzˇna´ u mnoha C programa´toru˚. Povazˇoval ko´d za ja´dro a strukturu dat jako podporu pro ko´d. Vy´sledkem bylo, zˇe ko´d byl na´dherny´, ale struktura dat na´hodna´ a dosti osˇkliva´ (alesponˇ podle vysoke´ho standardu tohoto zkusˇene´ho LISP hackera). K prˇepisova´nı´ jsem meˇl i dalsˇ´ı du˚vod nezˇ vylepsˇenı´ ko´du a datovy´ch struktur. Potrˇeboval jsem program zcela pochopit. Nenı´ to zˇa´dna´ legrace, opravovat chyby v programu, ktere´mu nerozumı´te. Beˇhem prve´ho meˇsı´ce jsem se drzˇel za´kladnı´ho Carlova pla´nu. Prvnı´ va´zˇnou zmeˇnou bylo prˇida´nı´ protokolu IMAP. To jsem ucˇinil tak, zˇe jsem program rozcˇlenil na obecnou cˇa´st a specificke´ metody. Toto a prˇedchozı´ zmeˇny ilustrujı´ obecny´ princip, ktere´ho by se meˇli programa´torˇi prˇidrzˇovat, zejme´na pak v jazycı´ch, jako je C. 9. Promysˇlene´ datove´ struktury a pru˚meˇrny´ ko´d fungujı´ mnohem le´pe nezˇ prˇi obra´cene´ konfiguraci Brooks, kapitola 9: Ukazˇ mi svu˚j ko´d a skryj datove´ struktury a nebudu rozumeˇt. Ukazˇ mi datove´ struktury a obycˇejneˇ nebudu potrˇebovat tvu˚j ko´d, veˇtsˇinou mi bude jasny´. Ve skutecˇnosti rˇekl diagramy a tabulky. Ale po 30 letech kulturnı´ch a terminologicky´ch zmeˇn to znamena´ te´meˇrˇ to same´. V tu dobu (zacˇa´tek za´rˇ´ı 1996, asi 6 ty´dnu˚ od cˇasu nula) jsem zacˇal prˇemy´sˇlet o zmeˇneˇ jme´na. Konec koncu˚, uzˇ to nebyl jenom POP klient. Ale va´hal jsem, protozˇe dosud v programu nebylo nic opravdu pu˚vodnı´ho. Moje verze popclienta si teprve musela vytvorˇit vlastnı´ identitu. Vsˇe se zmeˇnilo velmi radika´lneˇ, kdyzˇ se fetchmail naucˇil prˇesmeˇrova´vat posˇtu na SMTP port. K tomu se dostanu za okamzˇik. Jak jsem se jizˇ zmı´nil, rozhodl jsem se pouzˇ´ıt svu˚j projekt jako test toho, co Linus Torvalds udeˇlal dobrˇe. Jak jsem tedy testoval? Takto: „Publikoval jsem cˇasneˇ a cˇasto, te´meˇrˇ vzˇdy alesponˇ jednou za 10 dnu˚, prˇi intenzivnı´ pra´ci jednou denneˇ. Zveˇtsˇoval jsem seznam testeru˚ o kazˇde´ho, kdo mne kontaktoval ohledneˇ fetchmailu. Vsˇem jsem rozesı´lal vzkazy, kdykoliv jsem neˇco publikoval, a povzbuzoval jsem je k spoluu´cˇasti. A naslouchal jsem jim, da´val si od nich schvalovat rozhodnutı´ a chva´lil je, kdyzˇ mi poslali neˇjakou opravu nebo komenta´rˇ.“ Tato jednoducha´ opatrˇenı´ se vyplatila te´meˇrˇ okamzˇiteˇ. Od zacˇa´tku projektu 11
jsem dosta´val hla´sˇenı´ o chyba´ch ve kvaliteˇ, pro kterou by veˇtsˇina vy´voja´rˇu˚ byla schopna zabı´t, a cˇasto bylo prˇilozˇeno i dobre´ rˇesˇenı´. Dosta´val jsem posˇtu, kterou byla za´bava cˇ´ıst, promysˇlenou kritiku a rozumne´ na´vrhy na nove´ mozˇnosti. Takzˇe: 10. Pokud zacha´zı´te s vasˇimi testery, jako by byli vasˇ´ım nejcenneˇjsˇ´ım kapita´lem, oni se vasˇ´ım nejcenneˇjsˇ´ım kapita´lem skutecˇneˇ stanou. Jedno zajı´mave´ meˇrˇ´ıtko u´speˇchu fetchmailu je velikost seznamu testeru˚, prˇa´tel fetchmailu. V dobeˇ, kdy tento text pı´sˇi, ma´ 249 cˇlenu˚ a dva azˇ trˇi cˇlenove´ prˇiby´vajı´ kazˇdy´ ty´den. Ve skutecˇnosti, prˇi revizi na konci kveˇtna 1997 tento seznam jizˇ ztra´cı´ ze sve´ho maxima´lnı´ho pocˇtu te´meˇrˇ 300 cˇlenu˚ ze zajı´mave´ho du˚vodu. Neˇkolik lidı´ mne pozˇa´dalo, abych je odhla´sil ze seznamu, protozˇe fetchmail uzˇ pracuje tak dobrˇe, zˇe nepotrˇebujı´ sledovat, co je nove´ho. Mozˇna´ to patrˇ´ı k norma´lnı´mu zˇivotnı´mu cyklu vyspeˇle´ho projektu ve stylu trzˇisˇteˇ.
12
6
Popclient se sta´va´ fetchmailem
Skutecˇneˇ klı´cˇovy´m okamzˇikem v projektu byl okamzˇik, kdyzˇ mi Harry Hochheiser poslal svu˚j na´vrh ko´du pro prˇesmeˇrova´nı´ posˇty na SMTP pocˇ´ıtacˇe klienta. Ja´ si te´meˇrˇ okamzˇiteˇ uveˇdomil, zˇe spolehliva´ implementace te´to funkce ucˇinı´ ostatnı´ zpu˚soby dorucˇenı´ zastarale´. Mnoho ty´dnu˚ jsem meˇnil fetchmail spı´sˇe po cˇa´stech a cı´til jsem, zˇe uzˇivatelske´ rozhranı´ slouzˇ´ı sve´mu u´cˇelu, ale je neprˇ´ıjemne´ a neelegantnı´. Zejme´na za´plava nastavenı´ pro export stazˇene´ posˇty do souboru nebo na standardnı´ vy´stup meˇ obzvla´sˇteˇ tı´zˇila, ale ja´ neveˇdeˇl procˇ. Kdyzˇ jsem prˇemy´sˇlel o SMTP prˇesmeˇrova´nı´, tak se ukazovalo, zˇe popclient se pokousˇel deˇlat prˇ´ılisˇ mnoho veˇcı´. Byl navrzˇen za´rovenˇ jako mail transport agent (MTA) a local delivery agent (MDA). S SMTP prˇesmeˇrova´nı´m se z neˇj mohl sta´t cˇisty´ MTA a prˇeda´vat posˇtu jiny´m programu˚m, tak jak to deˇla´ sendmail. Procˇ si prˇideˇla´vat pra´ci s celou slozˇitostı´ konfigurace MDA, kdyzˇ port 25 je te´meˇrˇ urcˇiteˇ prˇ´ıtomen na vsˇech platforma´ch podporujı´cı´ch TCP/IP? Zde se mu˚zˇeme naucˇit neˇkolik lekcı´. Za prve´, na´pad se SMTP, to byla nejveˇtsˇ´ı odmeˇna za to, zˇe jsem se pokousˇel napodobit Linusovy metody. Tento skveˇly´ na´pad mi poskytl jeden z uzˇivatelu˚, ja´ pouze musel pochopit jeho du˚sledky. 11. Skoro stejneˇ du˚lezˇite´, jako mı´t dobre´ na´pady, je schopnost rozeznat dobre´ na´pady vasˇich uzˇivatelu˚. Obcˇas je to druhe´ dokonce lepsˇ´ı. Je zajı´mave´, zˇe pokud jste opravdu k sobeˇ uprˇ´ımnı´, rychle zjistı´te, jak mnoho dluzˇ´ıte ostatnı´m lidem, acˇkoliv okolnı´ sveˇt va´s bude povazˇovat za pu˚vodce vsˇeho. Vy sami pak na´sledkem toho zacˇnete by´t skromneˇjsˇ´ı v pohledu na vlastnı´ schopnosti a Linus je toho dokonaly´m prˇ´ıkladem. Kdyzˇ jsem tento cˇla´nek cˇetl na konferenci o Perlu v roce 1997, Larry Wall sedeˇl v rˇadeˇ prˇede mnou. Kdyzˇ jsem se dostal k rˇa´dku˚m vy´sˇe uvedeny´m, zavolal hlasem stary´ch kazatelu˚ „Jen to rˇekni, rˇekni bratrˇe!“. Cele´ publikum se sma´lo, protozˇe veˇdeˇlo, zˇe vsˇe fungovalo stejneˇ i v prˇ´ıpadeˇ vyna´lezce Perlu. Jen neˇkolik ma´lo ty´dnu˚ po te´, co jsem projekt rozbeˇhl, jsem zacˇal zı´ska´vat podobnou chva´lu nejen od uzˇivatelu˚, ale i od dalsˇ´ıch lidı´, ke ktery´m se zpra´va donesla. Schoval jsem si neˇktere´ e-maily. Podı´va´m se neˇ, jestli neˇkdy budu pochybovat, zˇe mu˚j zˇivot ma´ smysl. Jsou zde ovsˇem jesˇteˇ dveˇ za´kladneˇjsˇ´ı, nepoliticke´ lekce, ktere´ jsou spolecˇne´ vesˇkere´mu designu. 12. Cˇasto to nejzajı´maveˇjsˇ´ı a nejorigina´lneˇjsˇ´ı rˇesˇenı´ se zrodı´ z toho, zˇe si uveˇdomı´te, zˇe vasˇe cha´pa´nı´ proble´mu bylo mylne´. Ja´ se pokousˇel vyrˇesˇit nespra´vny´ proble´m tı´m, zˇe jsem chteˇl popclienta jako kombinovany´ MTA/MDA. Fetchmail musel by´t znovu koncipova´n od za´kladu jako cˇisty´ MTA, soucˇa´st norma´lnı´ho SMTP. Kdyzˇ prˇi vy´voji narazı´te do zdi, kdyzˇ zjistı´te, zˇe va´s zajı´ma´ jen prˇ´ısˇtı´ oprava, 13
je cˇasto okamzˇik se zeptat ne na to, zda ma´te spra´vnou odpoveˇd’, ale jestli kladete spra´vnou ota´zku. Mozˇna´ je trˇeba proble´m prˇeformulovat. Ja´ jsem tedy proble´m prˇeformuloval. Je jasne´, zˇe spra´vne´ bylo: 1. prˇene´st podporu SMTP do obecne´ho driveru 2. ucˇinit z neˇj vy´chozı´ mo´d a 3. nakonec prˇestat podporovat ostatnı´ mozˇnosti prˇenosu. Nad krokem 3 jsem neˇjaky´ cˇas va´hal, oba´val jsem se, zˇe si rozzlobı´m sve´ stare´ uzˇivatele, kterˇ´ı za´visejı´ na teˇchto mechanismech. Teoreticky jim stacˇilo prˇejı´t na .forward soubory nebo jejich ne-sendmail alternativy, aby zı´skali to, co potrˇebujı´. Ve skutecˇnosti vsˇak mohl by´t tento prˇechod komplikovany´. Ale kdyzˇ jsem to ucˇinil, zisk byl ohromny´. Nejpracneˇjsˇ´ı cˇa´st ko´du zmizela. Konfigurace byla mnohem jednodusˇsˇ´ı, uzˇ zˇa´dne´ starosti o MDA uzˇivatele a jeho posˇtovnı´ schra´nku. Zˇa´dne´ starosti s tı´m, jestli operacˇnı´ syste´m umozˇnˇuje uzamyka´nı´ souboru˚. Rovneˇzˇ zmizelo jedine´ riziko ztra´ty posˇty. Pokud jste urcˇili za prˇ´ıjemce posˇty soubor a disk se zaplnil, posˇtu jste ztratili. Se SMTP se to sta´t nemu˚zˇe. Zlepsˇila se i rychlost a vy´znamne´ bylo i zjednodusˇenı´ manua´lu. Pozdeˇji jsem musel doplnit neˇktere´ nestandardnı´ podmı´nky, ale to uzˇ bylo mnohem jednodusˇsˇ´ı. Mora´lnı´ poucˇenı´? Neva´hejte se rozloucˇit se vsˇ´ım, co va´m nezvysˇuje efektivitu. Antoine de Saint-Exupery (cozˇ byl letec a letecky´ konstrukte´r, kdyzˇ nepsal klasicke´ deˇtske´ knihy) rˇekl: 13. Konstrukcˇnı´ dokonalosti nenı´ dosazˇeno tehdy, kdyzˇ uzˇ nenı´ co prˇidat, ale tehdy, kdyzˇ uzˇ nemu˚zˇete nic odebrat. Kdyzˇ se Va´sˇ ko´d za´rovenˇ zlepsˇuje a sta´va´ jednodusˇsˇ´ım, potom vı´te, zˇe jste na spra´vne´ cesteˇ. Nastal cˇas pro zmeˇnu jme´na. Novy´ program vypadal mnohem vı´ce jako dvojnı´k sendmailu nezˇ stary´ popclient, a tak jsem jej po dvou meˇsı´cı´ch prˇejmenoval na fetchmail.
14
7
Fetchmail dospı´va´
V ruce jsem meˇl usporˇa´danou a origina´lnı´ konstrukci, ko´d, o ktere´m jsem veˇdeˇl, zˇe funguje, nebot’jsem ho pouzˇ´ıval kazˇdy´ den a rostoucı´ seznam testeru˚. Postupneˇ mi docha´zelo, zˇe uzˇ se nezaby´va´m programova´nı´m neˇcˇeho jednoduche´ho, co mu˚zˇe by´t uzˇitecˇne´ pro neˇkolik dalsˇ´ıch lidı´. Meˇl jsem v rukou program, ktery´ potrˇebuje kazˇdy´ hacker s Unixem a SLIP/PPP posˇtovnı´m prˇipojenı´m. Se SMTP prˇesmeˇrova´nı´m se fetchmail dostal daleko do cˇela konkurence a stal se potencia´lnı´m vla´dcem kategorie, takovy´m, ktery´ vyplnı´ svu˚j prostor tak dokonale, zˇe alternativy nejsou pouze odmı´tnuty, ale i te´meˇrˇ zapomenuty. Myslı´m si, zˇe takovy´ vy´sledek skutecˇneˇ nemu˚zˇete pla´novat. Musı´ va´s k neˇmu dove´st vy´vojovy´ pla´n tak silny´, zˇe prˇi zpeˇtne´m pohledu se zdajı´ vy´sledky nevyhnutelne´, te´meˇrˇ prˇedpoveˇditelne´. Jedinou mozˇnostı´, jak dostat takovy´ na´pad, je mı´t mnoho na´padu˚, nebo mı´t inzˇeny´rsky´ u´sudek a dove´st na´pady neˇkoho jine´ho azˇ za hranici toho, co si autor pu˚vodnı´ mysˇlenky doka´zal prˇedstavit. Andrew Tanenbaum prˇisˇel s pu˚vodnı´ mysˇlenkou vystaveˇt jednoduchy´ Unix pro 386 jako ucˇebnı´ pomu˚cku. Linus Torvalds dota´hl koncept Minixu da´le, nezˇ si zrˇejmeˇ Andrew mohl prˇedstavit a vzniklo z neˇj neˇco u´zˇasne´ho. Stejny´m zpu˚sobem (acˇkoliv v mensˇ´ım meˇrˇ´ıtku), jsem prˇevzal na´pady Carl Harrise a Harry Hochheisera a dota´hl jsem je do konce. Vzˇdyt’veˇtsˇina veˇdy, inzˇeny´rstvı´ a softwarove´ho vy´voje nenı´ vytva´rˇena neˇjaky´m origina´lnı´m ge´niem, acˇ to hackerske´ ba´jeslovı´ tvrdı´. Vy´sledky byly prˇesto fantasticke´, ve skutecˇnosti to byl pra´veˇ takovy´ u´speˇch, po ktere´m kazˇdy´ hacker touzˇ´ı. A to znamenalo, zˇe si musı´m sa´m pro sebe nastavit jesˇteˇ na´rocˇneˇjsˇ´ı krite´ria. Abych ucˇinil fetchmail tak dobry´, jak jen jsem si byl schopen prˇedstavit, musel jsem psa´t nejen pro sve´ vlastnı´ potrˇeby, ale rovneˇzˇ zahrnout podporu, kterou jsem nepotrˇeboval sa´m, ale jinı´ uzˇivatele´. A prˇi tom vsˇem jsem musel udrzˇet program jednoduchy´ a stabilnı´. Prvnı´ a zdaleka nejdu˚lezˇiteˇjsˇ´ı funkcı´, kterou jsem prˇidal pote´, co jsem si vsˇe uveˇdomil, byla podpora vı´cena´sobne´ho stahova´nı´, mozˇnost sta´hnout posˇtu z posˇtovnı´ch schra´nek, ktere´ obsahovaly posˇtu vı´ce uzˇivatelu˚ a pote´ ji distribuovat jednotlivy´m prˇ´ıjemcu˚m. Rozhodl jsem se tuto funkci prˇidat, protozˇe neˇkterˇ´ı uzˇivatele´ po nı´ touzˇili, ale zejme´na proto, zˇe meˇ to prˇinutı´ rˇa´dneˇ prohle´dnout soucˇasnou verzi a objevit chyby, ktere´ ve snaze napsat mnohem obecneˇjsˇ´ı postup vyplavou na povrch. Uka´zalo se, zˇe se take´ jednalo a vy´borne´ konstrukcˇnı´ rozhodnutı´. 14. Jaky´koliv na´stroj by meˇl by´t uzˇitecˇny´ ocˇeka´vany´m zpu˚sobem, ale opravdu velke´ na´stroje se hodı´ na pouzˇitı´, ktere´ jste nikdy neocˇeka´val. Tak tento prˇepsany´ fetchmail byl neocˇeka´vaneˇ vyuzˇit prˇi spra´veˇ diskuznı´ch skupin. Dalsˇ´ı du˚lezˇitou zmeˇnou, kterou ode mne pozˇadovali moji testerˇi, byla podpora 8-bitove´ho MIME. To bylo docela snadne´, nebot’ jsem si da´val pozor, abych nijak nepozmeˇnil osmy´ bit. Nebylo to proto, zˇe bych prˇedvı´dal tento pozˇadavek, spı´sˇe jsem se rˇ´ıdil dalsˇ´ım pravidlem: 15
15. Pokud pı´sˇete zprostrˇedkovatelsky´ software jake´hokoliv druhu, snazˇte se vlastnı´ data nijak nemeˇnit a nikdy se nezbavujte zˇa´dne´ informace, pokud va´s k tomu nedonutı´ prˇ´ıjemce. Kdybych se tı´mto nerˇ´ıdil, podpora 8-bitove´ho MIME by byla obtı´zˇna´ a s chybami. Takto mi stacˇilo prˇecˇ´ıst si standard a prˇidat neˇco trivia´lnı´ logiky prˇi generaci hlavicˇek. Neˇkterˇ´ı evropsˇtı´ uzˇivatele´ mne prˇemlouvali, abych prˇidal omezenı´ pocˇtu vzkazu˚ sta´hnutelny´ch prˇi jednom sezenı´ (aby mohli kontrolovat cenu svy´ch drahy´ch telefonnı´ch linek). Dlouho jsem tomu vzdoroval a sta´le s tı´m nejsem zcela spokojen. Pokud ale pı´sˇete pro cely´ sveˇt, musı´te naslouchat svy´m za´kaznı´ku˚m, to se nemeˇnı´ jenom proto, zˇe nejste placen peneˇzi.
16
8
Neˇkolik dalsˇ´ıch lekcı´ z fetchmailu
Nezˇ se vra´tı´me k obecny´m proble´mu˚m softwarove´ho inzˇeny´rstvı´, je trˇeba se poucˇit z neˇkolika specificky´ch lekcı´, ktere´ prˇinesl fetchmail. Syntaxe rc souboru˚ zahrnuje nepovinny´ parametr „noise“, ktere´ parser zcela ignoruje. Takova´to anglicky zneˇjı´cı´ syntaxe je mnohem cˇitelneˇjsˇ´ı nezˇ tradicˇnı´ zhusˇteˇne´ pa´ry parametr=hodnota. Toto zacˇalo jako nocˇnı´ experiment, kdyzˇ jsem si vsˇiml, jak mnoho deklarace rc souboru˚ prˇipomı´najı´ prˇ´ıkazovy´ minimalisticky´ jazyk. (Proto jsem take´ zmeˇnil jeden z pu˚vodnı´ch parametru˚ popclienta „server“ na „poll“.) Zda´lo se mi, zˇe pokud tento jazyk bude vı´ce prˇipomı´nat anglicˇtinu, bude sna´ze pouzˇitelny´. Acˇkoliv jsem prˇesveˇdcˇeny´ zasta´nce designerske´ sˇkoly, ktera´ se snazˇ´ı ucˇinit z prˇ´ıkazu˚ jazyk, jako v prˇ´ıpadeˇ HTML, Emacsu a rˇady databa´zı´, obvykle nema´m prˇ´ılisˇ ra´d poanglicˇteˇlou syntaxi. Tradicˇneˇ programa´torˇi da´vajı´ prˇednost syntaxi, ktera´ je velmi prˇesna´ a kompaktnı´. Toto je deˇdictvı´ z doby, kdy vy´pocˇetnı´ zdroje byly drahe´, takzˇe procha´zenı´ souboru˚ muselo by´t levne´ a co nejjednodusˇsˇ´ı. Tehdy se zda´la anglicˇtina s 50 % prˇebytkem slov zcela nevhodna´. To ovsˇem nenı´ mu˚j du˚vod, procˇ se takove´to anglicke´ syntaxi obvykle vyhy´ba´m. Ja´ ho zminˇuji pouze proto, abych jej vyvra´til. V dnesˇnı´ dobeˇ by uzˇ strucˇnost nemeˇla by´t cı´lem kvu˚li sobeˇ same´. Je du˚lezˇiteˇjsˇ´ı, aby jazyk byl pohodlny´ pro uzˇivatele, ne aby byl levny´ pro pocˇ´ıtacˇ. Existujı´ ovsˇem du˚vody k obezrˇetnosti. Jednı´m z nich je slozˇitost parsingu. Nechcete jejı´ slozˇitost zvy´sˇit na u´rovenˇ, kdy se sta´va´ zdrojem cˇasty´ch chyb a zacˇne ple´st i samotne´ uzˇivatele. Dalsˇ´ım du˚vodem je, zˇe pokud chcete, aby Va´sˇ jazyk zneˇl jako anglicˇtina, musı´te anglicˇtinu znacˇneˇ pokroutit, a to natolik, zˇe tento zpitvorˇeny´ jazyk je stejneˇ zmatecˇny´, jako tradicˇnı´ nesrozumitelna´ syntax. (Typicky´m prˇ´ıkladem jsou tzv. jazyky cˇtvrte´ generace a komercˇnı´ jazyky pro prˇ´ıstup k databa´zı´m.) Kontrolnı´ syste´m fetchmailu se vyhnul teˇmto potı´zˇ´ım proto, zˇe jeho jazykova´ oblast je nesmı´rneˇ omezena´. Nenı´ to zdaleka jazyk obecny´, to co rˇ´ıka´, nenı´ vu˚bec slozˇite´, takzˇe je zde jen maly´ prostor pro zmatek prˇi mysˇlenkove´m prˇechodu od jeho miniaturnı´ podmnozˇiny anglicˇtiny k skutecˇne´mu rˇ´ıdı´cı´mu jazyku. Mozˇna´ na´s to ucˇ´ı dalsˇ´ı lekci: 16. Pokud Va´sˇ jazyk nenı´ zdaleka kompletnı´ (Turing-kompletnı´), syntakticky´ cukr mu˚zˇe by´t prˇ´ıtelem. Dalsˇ´ı lekce je o bezpecˇnosti prˇes utajenı´. Neˇkolik uzˇivatelu˚ mne pozˇa´dalo, abych pozmeˇnil program tak, aby ukla´dal hesla zasˇifrovana´ v rc souboru a tı´m zabra´nil prˇ´ılezˇitostny´m cˇumilu˚m v jejich na´hodne´m odkrytı´. Ja´ to neudeˇlal, protozˇe tı´m ve skutecˇnosti nezı´ska´te zˇa´dnou ochranu. Kazˇdy´, kdo zı´ska´ prˇ´ıstupova´ pra´va ke cˇtenı´ vasˇeho rc souboru bude moci sa´m spustit 17
fetchmail, a pokud chce vasˇe heslo, zı´ska´ potrˇebny´ dekode´r z ko´du fetchmailu. Zasˇifrova´nı´ hesla v .fetchmailrc by pouze dalo falesˇny´ pocit jistoty lidem, kterˇ´ı o vsˇem du˚kladneˇ neprˇemy´sˇlejı´. Bezpecˇnostnı´ syste´m je pouze tak bezpecˇny´ jako jeho tajemstvı´. Meˇjte se na pozoru prˇed pseudotajemstvı´mi.
18
9
Nutne´ podmı´nky pro styl trzˇisˇteˇ
Prvnı´ cˇtena´rˇi tohoto cˇla´nku se neusta´le dotazovali na podmı´nky, ktere´ je trˇeba splnit pro u´speˇsˇny´ vy´voj ve stylu trzˇisˇteˇ. Ptali se, jake´ musı´ mı´t kvality vu˚dce projektu a v jake´m stavu musı´ by´t ko´d ve chvı´li, kdy je zprˇ´ıstupneˇn verˇejnosti a snazˇ´ı se zı´skat dalsˇ´ı vy´voja´rˇe. Je celkem jasne´, zˇe nenı´ mozˇne´ programovat od pocˇa´tku ve stylu trzˇisˇteˇ. Je mozˇne´ testovat, hledat chyby a vylepsˇovat na trzˇisˇti, ale bylo by velmi obtı´zˇne´ projekt zaha´jit ve stylu trzˇisˇteˇ. Linus se o to nepokusil a ja´ take´ ne. Vasˇe vznikajı´cı´ spolecˇenstvı´ vy´voja´rˇu˚ potrˇebuje neˇco, co mu˚zˇe testovat a s cˇ´ım si mu˚zˇe hra´t. Kdyzˇ zacˇnete hledat spolupracovnı´ky, potrˇebujete jim prˇedstavit uskutecˇnitelny´ cı´l. Va´sˇ program nemusı´ pracovat prˇ´ılisˇ dobrˇe, mu˚zˇe by´t nepohodlny´, obsahovat chyby a sˇpatneˇ dokumentova´n. Musı´ vsˇak prˇesveˇdcˇit budoucı´ vy´voja´rˇe o tom, zˇe se v dohledne´ budoucnosti mu˚zˇe vyvinout v neˇco skutecˇneˇ uzˇitecˇne´ho. Linux i fetchmail meˇly jizˇ v dobeˇ prve´ho zprˇ´ıstupneˇnı´ silnou a atraktivnı´ konstrukci. Mnoho lidı´, kterˇ´ı prˇemy´sˇlejı´ o programova´nı´ ve stylu trzˇisˇteˇ, toto povazˇujı´ zcela spra´vneˇ za za´klad u´speˇchu. Z tohoto faktu vsˇak zbrkle docha´zejı´ k za´veˇru, zˇe dalsˇ´ı nutnou podmı´nkou je konstrukcˇnı´ intuice vedoucı´ho projektu a jeho chytrost. Linus ale prˇevzal svoji konstrukci od Unixu a ja´ tu svoji z prˇedchu˚dce popclienta (acˇkoliv ta se potom podstatneˇ zmeˇnila, procentua´lneˇ vzato mnohem vı´ce nezˇ v prˇ´ıpadeˇ Linuxu). Takzˇe musı´ mı´t vedoucı´/koordina´tor pro projekt ve stylu trzˇisˇteˇ neobycˇejny´ konstrukcˇnı´ talent nebo mu stacˇ´ı vyuzˇ´ıvat talent ostatnı´ch? Ja´ se domnı´va´m, zˇe nenı´ zcela nutne´, aby koordina´tor byl schopen tvorˇit dokonale´ konstrukce, ale je naprosto nutne´, aby byl schopen rozeznat dobre´ na´pady ostatnı´ch. Linux i fetchmail to potvrzujı´. Linus, acˇkoliv nenı´ (jak jsme jizˇ diskutovali) neobycˇejneˇ origina´lnı´ konstrukte´r, proka´zal svoji vy´bornou schopnost rozpoznat dobre´ na´pady a integrovat je do ja´dra Linuxu. A ja´ jsem jizˇ popsal, zˇe s tı´m nejlepsˇ´ım na´padem ohledneˇ fetchmailu (SMTP prˇesmeˇrova´nı´) prˇisˇel neˇkdo jiny´. Moji prvnı´ cˇtena´rˇi se mi snazˇili podbı´zet tı´m, zˇe tvrdili, zˇe jsem na´chylny´ podcenˇovat originalitu konstrukce u projektu˚ trzˇisˇteˇ, nebot’ja´ sa´m jsem jı´ obdarˇen, a proto ji povazˇuji za samozrˇejmou. V tom mu˚zˇe by´t neˇco pravdy, konstrukce (na rozdı´l od ko´dova´nı´ nebo hleda´nı´ chyb) je mojı´ nejsilneˇjsˇ´ı stra´nkou. S originalitou prˇi konstrukci programu˚ je ale proble´m. Zacˇnete podveˇdomeˇ hledat pu˚vodnı´ a slozˇita´ rˇesˇenı´ tam, kde je na mı´steˇ pouzˇ´ıt neˇco robustnı´ho a jednoduche´ho. Neˇktere´ me´ projekty drˇ´ıve selhaly, protozˇe jsem se dopustil podobny´ch chyb, v prˇ´ıpadeˇ fetchmailu se mi jich ale podarˇilo vyvarovat. Ja´ se domnı´va´m, zˇe projekt fetchmail uspeˇl cˇa´stecˇneˇ proto, zˇe jsem omezil svoje tendence hledat chytra´ rˇesˇenı´. To ale argumentuje proti tvrzenı´ o nutnosti originality v projektu ve stylu trzˇisˇteˇ. A vezmeˇte si Linux. Rˇekneˇme, zˇe by se 19
Linus Torvalds snazˇil zakomponovat origina´lnı´ na´pady beˇhem vy´voje syste´mu. Je pravdeˇpodobne´, zˇe by vznikle´ ja´dro syste´mu bylo tak stabilnı´ a u´speˇsˇne´? Je zapotrˇebı´ mı´t jistou u´rovenˇ konstrukcˇnı´ch schopnostı´ i programa´torske´ho umeˇnı´, nicme´neˇ si myslı´m, zˇe prakticky kazˇdy´, kdo o neˇcˇem takove´m uvazˇuje bude na patrˇicˇne´ u´rovni. Vnitrˇnı´ trh otevrˇene´ho spolecˇenstvı´ tlacˇ´ı na vsˇechny, aby nezacˇ´ınali projekty, ktere´ nejsou schopni uskutecˇnit. Dosud se zda´, zˇe vsˇe funguje. Existuje ale dalsˇ´ı schopnost, ktera´ se obvykle nespojuje s rozvojem software a ktera´ je stejneˇ du˚lezˇita´, jako je schopnost konstruovat, a mozˇna´ jesˇteˇ du˚lezˇiteˇjsˇ´ı. Vedoucı´ projektu trzˇisˇteˇ musı´ by´t schopny´ komunikovat a zacha´zet s lidmi. To by meˇlo by´t samozrˇejme´. Abyste mohli staveˇt vy´voja´rˇskou spolecˇnost, musı´te prˇita´hnout lidi, zı´skat jejich za´jem o to, co deˇla´te a snazˇit se, aby byli spokojenı´ s pracı´, kterou deˇlajı´. Technicke´ zapa´lenı´ hodneˇ poma´ha´, ale zdaleka nenı´ vsˇ´ım. Vasˇe povaha je take´ du˚lezˇita´. Nenı´ na´hodne´, zˇe Linus je prˇ´ıjemny´ chlapı´k, ktere´ho majı´ lide´ ra´di a chteˇjı´ mu pomoci. Nenı´ na´hodne´, zˇe ja´ jsem energicky´ extrovert, ktery´ ra´d pracuje v davu a ma´ neˇktere´ instinkty a zpu˚soby komika. Aby projekt ve stylu trzˇisˇteˇ uspeˇl, velmi poma´ha´, pokud doka´zˇete alesponˇ trochu okouzlit lidi.
20
10
Spolecˇensky´ kontext otevrˇene´ho software
Je velkou pravdou, zˇe nejlepsˇ´ı programy zacˇ´ınajı´ tak, zˇe autor sa´m potrˇebujete vyrˇesˇit sve´ kazˇdodennı´ proble´my, a sˇ´ırˇ´ı se proto, zˇe se uka´zˇe, zˇe takovy´ proble´m tra´pı´ mnoho ostatnı´ch uzˇivatelu˚. To na´s vede zpeˇt k pravidlu 1, ktere´ je prˇeformulova´no do mozˇna´ uzˇitecˇneˇjsˇ´ı podoby: 18. Pokud chcete pracovat na zajı´mave´m proble´mu, zacˇneˇte tı´m, zˇe naleznete proble´m, ktery´ zajı´ma´ va´s osobneˇ. Tak zacˇal i Carl Harris s popclientem a ja´ s fetchmailem. To se ale vı´ uzˇ da´vno. To zajı´mave´, co na´m Linux a fetchmail prˇinesl, je dalsˇ´ı krok. Vy´voj programu˚ ve velke´ skupineˇ vy´voja´rˇu˚ a uzˇivatelu˚. V knize The Mythical Man-Month, Fred Brooks tvrdı´, zˇe programa´toru˚v cˇas nenı´ nahraditelny´. Pokud prˇida´te programa´tory do projektu, ktery´ se opozˇd’uje, opozdı´ se jesˇteˇ vı´ce. Dokazuje, zˇe slozˇitost a proble´my s komunikacı´ se zvysˇujı´ se cˇtvercem pocˇtu programa´toru˚, zatı´mco mnozˇstvı´ pra´ce stoupa´ pouze linea´rneˇ. Toto tvrzenı´ se pozdeˇji stalo Brookovy´m za´konem, ktery´ je cˇasto povazˇova´n za prˇedmeˇt vı´ry. Kdyby ale tento za´kon platil beze zbytku, Linux by nemohl existovat. Klasicka´ kniha Geralda Weinberga: „The Psychology Of Computer Programming“, obsahuje neˇco, co mu˚zˇeme prˇi zpeˇtne´m pohledu povazˇovat za nesmı´rneˇ du˚lezˇitou opravu Brookova tvrzenı´. V jeho diskuzi „nesobecke´ho programova´nı´ “ Weinberg tvrdı´, zˇe ve skupina´ch, ve ktery´ch si vy´voja´rˇi nechra´nı´ svu˚j ko´d a vybı´zejı´ ostatnı´, aby jim pomohli vyhleda´vat chyby a navrhovat vylepsˇenı´, projekty probı´hajı´ mnohem rychleji nezˇ jinde. Weinbergova terminologie mozˇna´ zabra´nila tomu, aby jeho analy´za zı´skala takove´ prˇijetı´, jake´ si zasluhovala, cˇloveˇk se musı´ usma´t prˇi mysˇlence, zˇe internetovsˇtı´ hackerˇi jsou „nesobecˇtı´ “. Nicme´neˇ, myslı´m, zˇe jeho argumenty nebyly nikdy tak aktua´lnı´ jako dnes. Historie Unixu na´s meˇla prˇipravit na to, co se nynı´ ucˇ´ıme z Linuxu (a co jsem v mensˇ´ım meˇrˇ´ıtku oveˇrˇil experimenta´lneˇ tak, zˇe jsem u´myslneˇ kopı´roval Linusovy metody). Tedy to, zˇe zatı´mco ko´dova´nı´ zu˚sta´va´ vı´ceme´neˇ samota´rˇskou aktivitou, opravdu velke´ mysˇlenky se uskutecˇnˇujı´ tehdy, pokud je vyuzˇita pozornost a mozky cele´ spolecˇnosti. Vy´voja´rˇ, ktery´ vyuzˇ´ıva´ pouze vlastnı´ mozek v uzavrˇene´m projektu musı´ zaostat za vy´voja´rˇem, ktery´ doka´zˇe iniciovat otevrˇeny´ evolucˇnı´ projekt, ve ktere´m se odhalova´nı´ chyb a vylepsˇenı´ veˇnujı´ stovky lidı´. Tradicˇnı´mu Unixove´mu sveˇtu bylo zabra´neˇno v dotazˇenı´ tohoto prˇ´ıstupu neˇkolika faktory. Jednı´m z nich byla pra´vnı´ omezenı´, ru˚zne´ licence, obchodnı´ tajemstvı´ a za´jmy. Dalsˇ´ı prˇeka´zˇkou (prˇi zpeˇtne´m pohledu) bylo to, zˇe internet jesˇteˇ nebyl na dostatecˇne´ u´rovni. Prˇed levny´m internetem existovala prostoroveˇ omezena´ spolecˇenstvı´, jejichzˇ kultura podporovala Weinbergovo „nesobecke´ programova´nı´“, ve ktery´ch mohl programa´tor snadno prˇila´kat mnoho diva´ku˚ a spolupracovnı´ku˚. Bellovy laboratorˇe, 21
MIT AI laboratorˇe, UC Berkeley se staly legenda´rnı´mi domovy vyna´lezu˚ a jsou sta´le velmi plodne´. Linux byl prvy´m projektem, ktery´ veˇdomeˇ a u´speˇsˇneˇ vyuzˇil cely´ sveˇt jako svoji studnici talentu˚. Nemyslı´m si, zˇe je na´hodne´, zˇe Linux vznikal v dobeˇ zrodu WWW a zˇe Linux opustil sva´ batolecı´ le´ta se zacˇa´tkem na´stupu internetu do beˇzˇne´ho poveˇdomı´ (1993-1994). Linus byl prvnı´, ktery´ se naucˇil hra´t podle novy´ch pravidel, ktere´ nastolil vsˇudyprˇ´ıtomny´ internet. Zatı´mco levny´ internet byl nutnou podmı´nkou pro to, aby se linuxovy´ model uplatnil, myslı´m, zˇe to nebyla podmı´nka dostacˇujı´cı´. Dalsˇ´ım nesmı´rneˇ du˚lezˇity´m faktorem byl vy´voj stylu vedenı´ a vytvorˇenı´ zvyku˚, ktere´ umozˇnily vy´voja´rˇu˚m zı´skat dalsˇ´ı spolupracovnı´ky a vyuzˇ´ıt vsˇechny mozˇnosti tohoto media. Ale jaky´ je styl vedenı´ a jake´ jsou tyto zvyky? Tyto zvyklosti nemohou by´t zalozˇeny na moci, a i pokud by byly, tak by vedenı´ donucenı´m nemohlo prˇine´st vy´sledky, ktere´ vidı´me. Weinberg cituje z autobiografie „Memoa´ry revoluce“, kterou v 19. stoletı´ napsal rusky´ anarchista Petr Alexejevicˇ Kropotkin. „Jelikozˇ jsem se narodil v rodineˇ, ktera´ vlastnila nevolnı´ky, zapocˇal jsem svu˚j aktivnı´ zˇivot, jako vsˇichni mladı´ muzˇi v me´m veˇku, s pevnou vı´rou v nutnost povelu˚, prˇ´ıkazu˚, trestu˚ atd. Brzy jsem ale musel rˇ´ıdit du˚lezˇite´ za´lezˇitosti a jednat se svobodny´mi muzˇi, a zde meˇla kazˇda´ chyba za´vazˇne´ na´sledky. Zacˇal jsem ocenˇovat rozdı´l mezi cˇinnostı´ na za´kladeˇ prˇ´ıkazu˚ a disciplı´ny a cˇinnostı´ na za´kladeˇ spolecˇne´ho porozumeˇnı´. To prve´ obdivuhodneˇ funguje prˇi vojenske´ prˇehlı´dce, ale nema´ zˇa´dnou cenu ve skutecˇne´m zˇivoteˇ, kde cı´le mu˚zˇe by´t dosazˇeno pouze u´silı´m mnoha spolupracujı´cı´ch myslı´.“ Velke´ u´silı´ mnoha spolupracujı´cı´ch mozku˚, to je prˇesneˇ to, co projekt jako Linux vyzˇaduje, a model rˇ´ızenı´ zalozˇeny´ na povelech je zcela nemozˇny´ v prostrˇedı´ dobrovolnı´ku˚ v anarchisticke´m ra´ji, ktery´ nazy´va´me internet. Aby mohli pracovat a souteˇzˇit efektivneˇ, programa´torˇi, kterˇ´ı chteˇjı´ ve´st projekty zalozˇene´ na spolupra´ci, se musı´ naucˇit, jak zı´skat a povzbuzovat skupiny lidı´ se spolecˇny´m za´jmem, jak neurcˇiteˇ naznacˇuje Kropotkin svy´m „principem porozumeˇnı´“. Musı´ se naucˇit vyuzˇ´ıvat Linusu˚v za´kon. Drˇ´ıve jsem se zmı´nil o „Delphi efektu“ jako o mozˇne´m vysveˇtlenı´ Linusova za´kona. Jesˇteˇ silneˇjsˇ´ı analogie s prˇizpu˚sobivy´mi syste´my ale nabı´zı´ biologie a ekonomie. Linusu˚v sveˇt se v mnoha ohledech chova´ jako volny´ trh nebo ekologie, spolecˇnost sobecky´ch individuı´, ktera´ se snazˇ´ı maximalizovat uzˇitek a prˇi tomto deˇji vznika´ sebeopravujı´cı´ se sponta´nnı´ rˇa´d vı´ce propracovany´ a u´cˇinneˇjsˇ´ı, nezˇ mu˚zˇe dosa´hnout jake´koliv centra´lnı´ pla´nova´nı´. Zde bychom meˇli hledat „princip porozumeˇnı´“. Uzˇitkova´ funkce, kterou linuxovı´ programa´torˇi maximalizujı´ nenı´ klasicky ekonomicka´, ale lze ji spojit s uspokojenı´m vlastnı´ho ja´ a zı´ska´nı´m dobre´ reputace mezi ostatnı´mi programa´tory. (Neˇkdo by mohl nazvat toto chova´nı´ altruisticke´, ale tento pohled ignoruje fakt, zˇe altruismus je sa´m o sobeˇ formou uspokojenı´ 22
vlastnı´ho ja´ pro altruistu). Dobrovolna´ spolecˇenstvı´, ktera´ pracujı´ podobny´m zpu˚sobem nejsou ve skutecˇnosti vza´cna´, podobny´m, ve ktere´m jsem zapojen jizˇ velmi dlouho je okruh prˇa´tel science fiction, ve ktere´m je vy´slovneˇ uzna´va´no, zˇe hlavnı´m motivem pro spolupra´ci je zvy´sˇenı´ vlastnı´ reputace mezi ostatnı´mi. Linus tı´m, zˇe se u´speˇsˇneˇ postavil do role ochra´nce projektu, ktery´ je z velke´ cˇa´sti rozvı´jen neˇky´m jiny´m a tı´m, zˇe zı´ska´val podporu pro projekt dokud se projekt nestal sebeudrzˇujı´cı´m, uka´zal, zˇe plneˇ pochopil Kropotkinovo pravidlo sdı´lene´ho porozumeˇnı´. Kvasi-ekonomicky´ pohled na Linusu˚v sveˇt na´m umozˇnˇuje pochopit, jak se tento princip uplatnˇuje. Mu˚zˇeme nahlı´zˇet na Linusovy metody jako na zpu˚sob, jak vytvorˇit u´cˇinny´ trh v uspokojova´nı´ vlastnı´ho ja´, tı´m, zˇe prˇipouta´ sobectvı´ individua´lnı´ch programa´toru˚ co nejpevneˇji k obtı´zˇny´m cı´lu˚m, ktere´ mohou by´t dosazˇeny pouze vytrvalou spolupracı´. V projektu fetchmailu jsem uka´zal (acˇkoli v mensˇ´ım meˇrˇ´ıtku), zˇe tato metoda mu˚zˇe by´t napodobena s dobry´mi vy´sledky. Mozˇna´, zˇe jsem vsˇe deˇlal s plneˇjsˇ´ım veˇdomı´m a systematicˇteˇji nezˇ Linus sa´m. Mnoho lidı´, zejme´na teˇch, kterˇ´ı politicky nedu˚veˇrˇujı´ volne´mu trhu, ocˇeka´vajı´, zˇe spolecˇnost seberˇ´ıdı´cı´ch egoistu˚ bude fragmentova´na, bude ochranˇovat sva´ u´zemı´, bude ply´tvat zdroji, vsˇe tajit a bude k sobeˇ neprˇa´telska´. Ale toto ocˇeka´va´nı´ je jasneˇ vyvra´ceno naprˇ´ıklad prˇekvapujı´cı´ ru˚znorodostı´, kvalitou a hloubkou dokumentace Linuxu. Je to za´zrak, kdyzˇ si uveˇdomı´me, jak programa´torˇi nena´vidı´ psanı´ dokumentace. Jak je tedy mozˇne´, zˇe programa´torˇi Linuxu ji produkujı´ tolik? Je zrˇejme´, zˇe Linuxu˚v volny´ trh v sebeuspokojova´nı´ funguje le´pe prˇi nastolenı´ ctnostne´ho chova´nı´ nezˇ masivneˇ financovane´ dokumentacˇnı´ u´tvary poskytovatelu˚ komercˇnı´ho software. Fetchmail i Linux uka´zaly, zˇe pokud dostatecˇneˇ odmeˇnı´m ego mnoha jiny´ch programa´toru˚, silny´ vy´voja´rˇ-koordina´tor mu˚zˇe vyuzˇ´ıt internet, aby zı´skal mnoho spolupracovnı´ku˚, anizˇ se projekt zhroutı´ v chaoticky´ zmatek. Takzˇe ja´ navrhuji na´sledujı´cı´ protiargument k Brookoveˇ za´konu. 19. Pokud ma´ koordina´tor projektu k dispozici me´dium alesponˇ tak dobre´ jako internet a doka´zˇe ve´st bez prˇ´ıkazu˚, mnoho hlav je nevyhnutelneˇ lepsˇ´ı nezˇ jedna. Myslı´m si, zˇe budoucnost otevrˇene´ho software bude sta´le vı´ce patrˇit lidem, kterˇ´ı veˇdı´, jak se chovat v Linusoveˇ hrˇe, lidem, kterˇ´ı opustı´ katedra´lu a vezmou si trzˇisˇteˇ za sve´. Tı´m nechci rˇ´ıci, zˇe uzˇ neza´lezˇ´ı na individua´lnı´ch vizı´ch a velky´ch schopnostech. Spı´sˇe si myslı´m, zˇe budoucnost patrˇ´ı lidem, kterˇ´ı zacˇnou s individua´lnı´ vizı´ a velky´mi schopnostmi a ty potom zmnohona´sobı´ ve vytvorˇeny´ch skupina´ch se spolecˇny´m za´jmem. A mozˇna´ nejen budoucnost otevrˇene´ho software. Zˇa´dny´ vy´voja´rˇ v uzavrˇene´m projektu nemu˚zˇe mı´t takovou nabı´dku talentu˚ pro vyrˇesˇenı´ proble´mu, jako se nacha´zı´ ve spolecˇenstvı´ Linuxu. Jen ma´lokdo si mu˚zˇe dovolit najmout vı´ce nezˇ 200 lidı´, kterˇ´ı prˇispı´vali do fetchmailu. 23
Mozˇna´ zˇe nakonec kultura otevrˇene´ho software zvı´teˇzı´ ne proto, zˇe je mora´lneˇ spra´vna´, nebo zˇe hamouneˇnı´ software je mora´lneˇ sˇpatne´ (za prˇedpokladu, zˇe tomu druhe´mu veˇrˇ´ıte, ja´ ani Linus ne), ale jednodusˇe proto, zˇe uzavrˇene´ projekty nemohou vyhra´t v evolucˇnı´m za´pase s otevrˇeny´m syste´mem, ktery´ mu˚zˇe vynalozˇit o neˇkolik rˇa´du˚ vı´ce kvalifikovane´ho cˇasu na rˇesˇenı´ proble´mu˚.
24
11
Podeˇkova´nı´
Tento cˇla´nek byl vylepsˇen dı´ky diskuzı´m s mnoha lidmi. Zejme´na deˇkuji Jeffovi Dutkymu, ktery´ navrhl termı´n „hleda´nı´ chyb je paralelizovatelne´“ a pomohl vyvinout analy´zu, ktera´ z neˇj vycha´zı´. Rovneˇzˇ deˇkuji Nancy Lebovitz za jejı´ na´vrh emulace Weinberga citacı´ z Kropotkina. Vnı´mavou kritikou rovneˇzˇ prˇispeˇli Joan Eslinger a Marty Franz. Jsem vdeˇcˇny´ cˇlenu˚m PLUG (Skupina uzˇivatelu˚ Linuxu ve Philadelphii), kterˇ´ı se stali my´m prvnı´m testovacı´m publikem pro prvou verˇejnou verzi cˇla´nku. A nakonec, deˇkuji Linusovi Torvaldsovi za jeho cenne´ prˇipomı´nky a za povzbuzenı´, ktere´ se mi dostalo od same´ho pocˇa´tku.
25
12
K dalsˇ´ımu cˇtenı´
Neˇkolikra´t jsem citoval z klasicke´ pra´ce Frederika P. Brooka „The Mythical Man-Month“. Vrˇele doporucˇuji edici k 25 vy´rocˇ´ı (ISBN 0-201-83595-9), ke ktere´ je prˇida´n cˇla´nek z roku 1986 „No Silver Bullet“. Tato nova´ edice je doplneˇna neocenitelny´m zpeˇtny´m pohledem na uplynuly´ch 20 let, ve ktere´m se Brook uprˇ´ımneˇ prˇizna´va´ k tvrzenı´m, ktera´ nebyla potvrzena dalsˇ´ım vy´vojem. Ja´ jsem toto zpeˇtne´ ohle´dnutı´ poprve´ cˇetl ve chvı´li, kdy tento cˇla´nek byl z velke´ cˇa´sti hotov a prˇekvapilo mne, zˇe Brooks prˇicˇ´ıta´ principy trzˇisˇteˇ Microsoftu! (Ve skutecˇnosti se ale toto tvrzenı´ uka´zalo mylne´. V roce 1998 jsme se z unikly´ch dokumentu˚, tzv. Halloween Documents dozveˇdeˇli, zˇe vnitrˇnı´ vy´voja´rˇska´ komunita Microsoftu je balkanizovana´, bez mozˇnostı´ obecne´ho prˇ´ıstupu ke zdroju˚m, ktere´ styl trzˇisˇteˇ vyzˇaduje.) Gerald M. Weinberg v knize The Psychology Of Computer Programming (New York, Van Nostrand Reinhold 1971) zavedl poneˇkud nesˇt’astneˇ oznacˇeny´ pojem „nesobecke´ programova´nı´ “. Acˇkoliv nebyl zdaleka prvy´m, kdo si uveˇdomil nedostatecˇnost „principu zalozˇene´m na prˇ´ıkazech“, byl pravdeˇpodobneˇ prvnı´, ktery´ rozpoznal a zdu˚vodnˇoval toto stanovisko s ohledem na vy´voj software. Richard P. Gabriel, ktery´ prˇemy´sˇlel nad Unixovou kulturou v obdobı´ prˇed Linuxem, va´haveˇ argumentoval o prˇednostech jednoduchy´ch stylu˚ trzˇisˇteˇ ve sve´m cˇla´nku z roku 1989 Lisp: Dobre´ zpra´vy, sˇpatne´ zpra´vy a jak zvı´teˇzit. Acˇkoliv jizˇ v neˇktery´ch ohledech zastarala´, tento esej je sta´le uctı´va´n mezi prˇ´ıznivci Lispu (vcˇetneˇ mne). Byl jsem upozorneˇn, zˇe cˇa´st nazvana´ „Horsˇ´ı je lepsˇ´ı“ lze vylozˇit jako prˇedpoveˇd’ Linuxu. Tento cˇla´nek je prˇ´ıstupny´ na WWW na adrese http://www.naggum.no/worse-is-better.html Kniha De Marca a Listera Peopleware: Productive Projects and Teams (New York; Dorset House, 1987; ISBN 0-932633-05-6) je nedoceneˇny´ klenot. Byl jsem velmi poteˇsˇen, kdyzˇ Fred Brooks jej citoval ve sve´ retrospektiveˇ. Acˇkoliv ma´lo z toho, co autorˇi pı´sˇ´ı je prˇ´ımo aplikovatelne´ na Linux, jejich na´hled na nutne´ podmı´nky pro tvorˇivou pra´ci je prˇesny´ a cenny´ pro kazˇde´ho, ktery´ chce prˇene´st neˇktere´ prˇednosti trzˇisˇteˇ do komercˇnı´ho prostrˇedı´. Na za´veˇr musı´m prˇipustit, zˇe jsem cˇla´nek te´meˇrˇ nazval „Katedra´la a Agora“. Agora je rˇecky´ vy´raz pro otevrˇeny´ trh nebo mı´sto verˇejny´ch setka´nı´. Cˇla´nky Marka Millera a Erica Drexlera popisujı´cı´ vlastnosti trzˇnı´ch pocˇ´ıtacˇovy´ch ekologiı´, mne pomohly ujasnit si analogicke´ jevy v otevrˇene´m spolecˇenstvı´, kdyzˇ jsem narazil na Linux o peˇt let pozdeˇji. Tyto cˇla´nky jsou dostupne´ na sı´ti na adrese www.agorics.com/agorpapers.html.
26
13
Epilog: Netscape prˇijal trzˇisˇteˇ
Je to zvla´sˇtnı´ pocit, kdyzˇ si uveˇdomı´te, zˇe poma´ha´te vytva´rˇet historii... 26. ledna 1998, asi sedm meˇsı´cu˚ pote´, co jsem poprve´ publikoval tento cˇla´nek, Netscape Communications, Inc. ozna´mil sve´ pla´ny zverˇejnit zdrojovy´ ko´d Netscape Communicator. Nemeˇl jsem zˇa´dne´ tusˇenı´ o tom, zˇe se k tomu schyluje do dne ozna´menı´. Eric Hahn, na´meˇstek rˇeditele a hlavnı´ technolog v Netscape mi kra´tce pote´ napsal tento email: „Jme´nem na´s vsˇech v Netscape Va´m chci podeˇkovat za to, zˇe jste na´s k tomuto na´padu prˇivedl. Vasˇe mysˇlenky a cˇla´nky byly za´kladnı´ inspiracı´ pro nasˇe rozhodnutı´.“ Na´sledujı´cı´ ty´den jsem byl pozva´n spolecˇnostı´ Netscape do Silicon Valley na celodennı´ strategickou konferenci s jejich hlavnı´mi manazˇery a techniky. Navrhli jsme strategii pro zverˇejneˇnı´ zdroju˚ a pro licence a prˇipravili dalsˇ´ı pla´ny, ktere´, jak doufa´me, budou mı´t dalekosa´hle´ a kladne´ u´cˇinky. Netscape na´m poskytuje velky´ rea´lny´ test modelu ve stylu trzˇisˇteˇ v komercˇnı´m sveˇteˇ. Stojı´me prˇed velky´m nebezpecˇ´ım. Pokud tento projekt selzˇe, mu˚zˇe by´t cely´ koncept tak zdiskreditova´n, zˇe komercˇnı´m sveˇt na neˇj zanevrˇe na dalsˇ´ı desetiletı´. Na druhe´ straneˇ je to take´ skveˇla´ prˇ´ılezˇitost. Pocˇa´tecˇnı´ reakce Wall Streetu i jinde byla obezrˇetneˇ kladna´. Byla na´m da´na sˇance se osveˇdcˇit. Pokud zı´ska´ Netscape dı´ky tomuto tahu podstatny´ podı´l na trhu, mu˚zˇe to zpu˚sobit dlouho ocˇeka´vanou revoluci v softwarove´m pru˚myslu. Prˇ´ısˇtı´ rok bude velmi zajı´mavy´.
27