Nyeste version 30. november 2000 kl. 18:00 CEST
Dette er en oversættelse af Eric S. Raymonds The Cathedral and the
Bazaar. Den engelske original findes på
http://www.catb.org/~ esr/writings/cathedral-bazaar/.
Oversættelsen er foretaget af Jesper
Laisen og
Ole Michaelsen. Tak til
Lotte Kristiansen, redaktør af
DKUUG-Nyt, for mange gode rettelser samt til Peter Makholm og Donald Axel.
Yderligere forslag, kommentarer, rettelser og kritik er yderst velkommen. Pdf-filen er lavet af Peter Brixen.
af Eric S. Raymond
Jeg dissekerer et succesfuldt open source-projekt, Fetchmail, der
med vilje blev kørt som en test af nogle overraskende teorier om
udvikling af software, som kom fra Linux' historie. Jeg diskuterer
disse teorier ud fra to fundamentalt forskellige udviklingsmetoder,
'katedral-modellen', som det meste af den kommercielle verden bruger,
mod 'basar-modellen' fra Linux-verdenen. Jeg viser, at disse modeller
stammer fra modstridende forudsætninger om det at finde fejl i
software. Jeg fremsætter så et støttende argument fra Linux-erfaringen
om, at 'med et tilstrækkeligt antal øjne er alle fejl banale', hvilket
antyder produktive analogier med selviske repræsentanters
selvkorrigerende systemer, og afslutter med en udforskning af denne
indsigts betydning for fremtiden for software.
Linux er undergravende. Hvem ville have troet selv for fem år
siden (1991), at et operativsystem i verdensklasse på magisk vis kunne
forene flere tusinde udviklere, som spredt over hele planeten hackede
på deltid, og som kun var forbundet via Internets fine tråde?
I hvert fald ikke mig. Da Linux kom ind på min radar i begyndelsen af
1993, havde jeg allerede arbejdet med Unix og udvikling af open source
i 10 år. I midten af 1980'erne var jeg en af de første bidragere til
GNU. Jeg havde frigivet en hel del open source-software på nettet,
udviklet eller været med til at udvikle adskillige programmer
(Nethack, Emacs VC og GUD modes, Xlife og andre), som stadig bruges
flittigt i dag. Jeg troede, jeg vidste hvordan, det skulle gøres.
Linux vendte meget af det, jeg troede, jeg vidste, på hovedet. Jeg
havde prædiket Unix-troen på små værktøjer, hurtige prototyper og
udviklingsprogrammering i årevis. Men jeg troede også, at der var et
bestemt kritisk kompleksitetsniveau, hvor en mere centraliseret, a
priori tilgang var påkrævet. Jeg troede, at det vigtigste software
(operativsystemer og rigtig store værktøjer som
Emacs programmeringseditoren) skulle bygges
som katedraler, omhyggeligt formet af individuelle troldmænd eller små
grupper af magikere, som arbejdede i fuldstændig isolation, og hvor
ingen beta blev frigivet før tiden.
Linus Torvalds udviklingsmodel -- frigiv tidligt og ofte, deleger alt,
hvad du kan, vær åben på grænsen det promiskuøse -- kom som en
overraskelse. Ingen rolig og ærbødig opbygning af katedraler -- snarere synes
Linux-samfundet at ligne en stor, vrøvlende basar med forskellige
dagsordner og fremgangsmåder (passende symboliseret af
Linux-arkiverne, som modtog bidrag fra hvem som helst) ud fra hvilken
et sammenhængende og stabilt system tilsyneladende kun kunne fremkomme ved
en række mirakler.
Det faktum, at denne basar-model syntes at fungere og fungere godt, kom
som et udtrykkeligt chok. Efterhånden som jeg kom ind i tingene,
arbejdede jeg hårdt ikke bare på individuelle projekter men også på at
prøve at forstå, hvorfor Linux-miljøet ikke alene ikke faldt fra
hinanden under forvirringen, men syntes at gå fra sejr til sejr med en
hastighed, som byggere af katedraler ikke engang kunne forestille sig.
I midten af 1996 troede jeg, at jeg var begyndt at forstå. Tilfældet
havde givet mig en perfekt måde at teste min teori i form
af et open source-projekt, som jeg bevidst kunne prøve at køre efter
basar-modellen. Det gjorde jeg så -- og det var en betydelig succes.
Dette er historien om det projekt. Jeg vil bruge den til at foreslå
nogle aforismer om effektiv udvikling af open source. Ikke alt er ting,
som jeg først lærte i
Linux-verdenen, men vi vil se, hvordan Linux-miljøet understregede
dem. Hvis jeg har ret, vil de hjælpe dig med at forstå nøjagtig, hvad
det er, der gør Linux-miljøet til et springvand af god software -- og
måske hjælpe dig til at blive mere produktiv selv.
Siden 1993 har jeg stået for den tekniske side af en lille gratis ISP
kaldet Chester County InterLink (CCIL) in West Chester, Pennsylvania, USA.
Jeg var medstifter af CCIL og kodede vores unikke software til
flerbruger bulletin-boards -- du kan checke med telnet til
locke.ccil.org. I dag er der næsten 3.000 brugere på 30 linier.
Jobbet gav mig 24 timers adgang til nettet på CCIL's 56K linie --
jobbet krævede det faktisk!
Derfor var jeg blevet helt vant til at få min email øjeblikkelig.
Jeg syntes, det var irriterende, at jeg jævnligt skulle bruge telnet
til locke for at læse min post. Jeg ville have, at min post blev
leveret til snark, så jeg fik besked, når den kom, og at jeg kunne
håndtere den med mine sædvanlige værktøjer.
Internets almindelige protokol til videresendelse af post, SMTP
(Simple Mail Transfer Protocol) ville ikke virke, fordi det virker
bedst, når maskiner altid er på nettet, mens min personlige maskine
ikke altid er på nettet og ikke har en statisk
IP-adresse. Jeg behøvede et program, som kunne række ud over
min SLIP-forbindelse og hente min post, så den kunne leveres
lokalt. Jeg vidste noget sådant eksisterede, og at de fleste af dem
brugte en simpel aplikationsprotokol kaldet POP (Post Office
Protocol). POP er nu bredt understøttet af de fleste postklienter, men
på det tidspunkt var den ikke bygget ind i det postprogram, som jeg brugte.
Jeg havde brug for en POP3-klient. Så jeg fandt en på nettet. Faktisk
fandt jeg tre eller fire. Jeg brugte Pop-perl et stykke tid, men der
manglede en oplagt funktion, muligheden for at hacke adressen på den
hentede post, så svarene fungerede ordentligt.
Dette var problemet: forestil dig, at en eller anden kaldet 'joe'
sendte mig post på locke. Hvis jeg hentede posten til snark og så
prøvede at svare på den, ville mit postprogram forsøge at sende svaret
til den ikke-eksisterende 'joe' på snark. Det blev hurtigt en pinsel
at rette adressen til med '@ccil.org'.
Det var helt klart noget, som computeren burde gøre for mig. Men ingen
af de eksisterende POP-klienter vidste hvordan! Og det giver os vores
første lektion:
1. Ethvert godt stykke software starter med at afhjælpe en
udviklers personlige kløe.
Dette burde måske have været det mest åbenlyse (et gammelt
ordsprog siger, at 'Nød lærer nøgen kvinde at spinde'), men alt for ofte
slider softwareudviklere for lønnens skyld med
programmer, som de hverken behøver eller synes om. Men ikke i
Linux-verdenen -- hvilket kan forklare, hvorfor gennemsnitskvaliteten
af software, som stammer fra Linux-miljøet, er så høj.
Kastede jeg mig så straks vildt over kodning af en helt ny
POP3-klient, der kunne konkurrere med de eksisterende? Under ingen
omstændigheder! Jeg undersøgte grundigt de POP-muligheder, som jeg havde for
hånden, og spurgte mig selv, 'hvilken en er tættest på det,
som jeg vil have?'. Fordi
2. Gode programmører ved, hvad de skal skrive. Fremragende programmører
ved, hvad de skal skrive om (og genbruge).
Selv om jeg ikke hævder at være en fremragende programmør, prøver jeg at
efterligne en. Et vigtigt træk ved de store er konstruktiv
dovenskab. De ved, at de kan få et 13-tal ikke for flid men for
resultater, og at det næsten altid er nemmere at starte med en god
delvis løsning end fra bunden.
Eksempelvis skrev Linus Torvalds faktisk ikke Linux fra bunden. I
stedet startede han med at genbruge kode og ideer fra Minix, et lille
Unix-lignende OS til PC-kloner. I sidste ende forsvandt al
Minix-kode eller blev skrevet fuldstændigt om -- men mens det var der,
tjente det som kravlegård for spædbarnet, der til sidst blev til Linux.
I samme ånd søgte jeg efter et eksisterende POP-program, som var
rimelig godt kodet, til at bruge som udgangspunkt.
Traditionen med deling af kildekode inden for Unix-verdenen har altid
været positiv indstillet overfor genbrug af kode (det er derfor
GNU-projektet valgte Unix som grund-OS, på trods af alvorlige
betænkeligheder ved selve styresystemet. Linux-verdenen har ført denne
tradition næsten til dens teknologiske grænse; der er terabytes af
frit tilgængelige open source-programmer. Den tid, du bruger på at søge
efter andres programmer, der er næsten gode nok, vil oftere give gode
resultater i Linux-verdenen end andre steder.
Og det gjorde den for mig. Med dem jeg fandt tidligere, endte jeg
efter min anden søgning op med 9 kandidater -- Fetchpop, PopTart,
Get-mail, Gwpop, Pimp, Pop-perl, Popc, Popmail og Upop. Den første jeg
bestemte mig for, var Fetchpop, skrevet af Seung-Hong Oh. Jeg lagde
min rutine til omskrivning af brevhovedet ind i programmet og lavede
forskellige andre forbedringer, som forfatteren accepterede i sin
version 1.9.
Men nogle få uger senere faldt jeg over koden til Popclient af Carl
Harris og blev klar over, at jeg havde et problem. Selvom Fetchpop
indeholdt nogle gode og originale ideer (eksempelvis dets daemon-metode),
så kunne det kun håndtere POP3, og det var kodet af en amatør
(Seung-Hong var en kvik men uerfaren programmør, og begge træk kunne
ses). Carls kode var bedre, ganske professionel og solid, men hans
program manglede adskillige vigtige funktionaliteter fra Fetchpop, som
var vanskelige at implementere (også dem, jeg selv havde kodet).
Beholde eller skifte? Hvis jeg skiftede, ville jeg miste koden, som
jeg allerede havde lavet. Fordelen ville være et bedre udgangspunkt
for videre udvikling.
Et praktisk motiv til at skifte var understøttelse
af flere protokoller. POP3 er den mest brugte protokol til
post-servere, men det er ikke den eneste. Fetchpop og de andre
konkurrenter kunne ikke klare POP2, RPOP eller APOP, og for sjov
legede jeg allerede med tanken om at tilføje IMAP (Internet Message
Access Protocol, den nyest designede og mest anvendelig protokol).
Men jeg havde desuden en mere teoretisk grund til at synes, at det
ville være en god grund til at skifte, noget jeg lærte længe før
Linux.
3. 'Planlæg at smide en væk; du kommer alligevel til det'. (Fred
Brooks, 'The Mythical Man-Month', kapitel 11).
Eller for at sige det på en anden måde, ofte forstår du alligevel ikke
problemet, før efter du har implementeret en løsning. Den anden gang
ved du måske nok til at gøre det rigtigt. Så hvis du vil gøre det rigtigt,
skal du være parat til at begynde forfra mindst en gang [JB].
Tja (sagde jeg til mig selv), ændringerne i Fetchpop havde været mit
første forsøg. Så jeg skiftede.
Da jeg sendte mit første sæt af rettelser til Carl Harris den 25. juni
1996, opdagede jeg, at han i grunden allerede havde mistet interessen
for Popclient. Koden var en smule støvet med mindre udestående
fejl. Jeg havde mange rettelser, så vi blev hurtig enige om, at det
mest logiske for mig var at overtage programmet.
Uden jeg egentlig opdagede det, havde projektet eskaleret. Jeg
overvejede ikke længere mindre rettelser til en eksisterende
POP-klient. Jeg overtog fuldstændig vedligeholdelse af en, og jeg
vidste, at de
spirende ideer i mit hoved, ville betyde store ændringer. I en
softwarekultur, der opfordrer til deling af kode, er det en naturlig
måde for et projekt at udvikle sig på. Jeg var et eksempel på:
4. Hvis du har den rette indstilling, løber du ind i interessante
problemer.
Men Carl Harris indstilling var endnu mere vigtig. Han forstod, at
5. Når du mister interesse for et program, er det din sidste
forpligtelse at overgive det til en kompetent efterfølger.
Uden nogensinde at behøve diskutere det vidste Carl og jeg, at vi
havde det fælles mål, at den bedste løsning fandtes derude. Det
eneste spørgsmål for os var, om jeg kunne godtgøre, at jeg var
kompetent til at overtage opgaven. Da jeg havde gjort det, handlede
han med elskværdighed og hast. Jeg håber, at jeg vil handle ligeså,
når det bliver min tur.
Og så arvede jeg Popclient. Ikke mindre vigtigt arvede jeg Popclients
brugerbase. Brugere er en vidunderlig ting at have, og ikke bare fordi
de demonstrerer, at du har udfyldt et behov, at du har gjort noget
rigtigt. Hvis du dyrker dem rigtigt, kan de blive medudviklere.
En anden styrke ved Unix-traditionen, en som Linux udnytter til det
ekstreme, er, at mange brugere også er hackere. Når kildekoden er
tilgængelig, kan de være effektive hackere. Det kan være overordentlig
brugbart til hurtigere fejlfinding. Med lidt opmuntring vil dine
brugere diagnosticere problemer, foreslå rettelser og hjælpe med at
forbedre koden endnu hurtigere, end du selv kunne uden hjælp.
6. At behandle dine brugere som medudviklere er den mindst
besværlige vej til hurtig forbedring af koden og effektiv
fejlfinding.
Det er let at undervurdere betydningen af denne effekt. Faktisk
undervurderede stort set alle os i open source-verdenen drastisk,
indtil Linus Torvalds beviste det modsatte, nemlig hvor
godt effekten skalerede med antal brugere i forhold til systemets
kompleksitet.
Faktisk mener jeg, at Linus' vigtigste hack ikke var konstruktionen
af selv Linux-kernen, men snarere hans opfindelse af Linux' udviklingsmodel.
Da jeg engang gav udtryk for denne holdning i hans
tilstedeværelse, smilede han og gentog stille noget, han ofte har
sagt: 'Jeg er egentlig en meget doven person, som kan lide at få æren
for ting, som andre faktisk har lavet'. Doven som en ræv. Eller, som
Robert Henlein så fremragende skrev om en af sine karakterer,
for doven til at fejle.
Når du ser tilbage, kan du finde et fortilfælde for Linux' metoder og
succes i udviklingen af GNU Emacs Lisp-biblioteket og Lisp
kodearkiverne. I modsætning til katedral-byggestilen omkring
Emacs' C-kerne og de fleste andre FSF-værktøjer, var udviklingen af
Lisp-koden flydende og meget brugerorienteret. Ideer og prototyper blev
ofte omskrevet tre eller fire gange, før de nåede en endelig og stabil
form. Og et løst forbundet samarbejde, som var muliggjort af
Internet, i Linux-stil, var almindeligt.
Faktisk var mit eget mest succesfulde hack før Fetchmail sandsynligvis
Emacs VC (version control), et Linux-lignende samarbejde med tre andre
mennesker via
email, hvor jeg til dato kun har mødt en af dem (Richard Stallman,
forfatteren af Emacs og grundlægger af FSF). Det var en
brugergrænseflade til SCCS, RCS og senere CVS i Emacs, som tilbyder en
'enkeltklik'-version af kontrolmulighederne. Det udviklede sig fra en
lille, grov sccs.el, som en anden havde skrevet. Og udviklingen af VC
lykkedes, fordi Emacs' Lisp-kode kunne gå igennem
generationerne af frigivelse/test/forbedring meget hurtigt i modsætning
til Emacs selv.
Tidlige og hyppige frigivelser er en vigtig del af Linux'
udviklingsmodel. De fleste udviklere (mig selv inklusive) troede, at
det var en dårlig politik for større projekter, da tidlige versioner
per definition altid er fulde af fejl, og da du ikke ønsker at
opbruge dine brugeres tålmodighed.
Denne tro var forstærket af den generelle tilslutning til
katedralen som udviklingsstil. Hvis den overvældende målsætning
var, at brugerne skulle se så få fejl som muligt, så burde du kun
frigive en version hver sjette måned (eller sjældnere) og arbejde
som en hest på
at finde fejl mellem frigivelserne. Emacs' C-kerne blev udviklet på
denne måde. Lisp-biblioteket blev det faktisk ikke -- fordi der var
aktive Lisp-arkiver uden for FSF's kontrol, hvor du kunne finde nye
versioner af kode under udvikling uafhængig af Emacs'
frivgivelsesmønster [QR].
Det vigtigste af disse, the Ohio Sate Elisp Archive, foregreb ånden og
mange af mulighederne i nutidens store Linux-arkiver. Men få af os
tænkte særlig meget over, hvad vi gjorde, eller over, hvad eksistensen
af det arkiv antydede af problemer med FSF's udviklingsmodel med
katedral-bygning. Jeg gjorde et seriøst forsøg i 1992 på formelt at få
en stor del af Ohio-koden ind i det officielle Emacs
Lisp-bibliotek. Jeg løb ind i politiske problemer og havde ingen
synderlig succes.
Men et år senere, da Linux blev bredt kendt, blev det klart, at noget
anderledes og meget sundere foregik der. Linus' åbne udviklingspolitik
var modsætningen til katedral-bygningen. Sunsite- og tsx-11-arkiverne
bugnede og adskillige distributioner kom frem. Og alt dette var drevet
af en uhørt frekvens af frigivelse af nye Linux-kerner.
Linus behandlede sine brugere som medudviklere på den mest effektive
måde:
7. Frigiv tidligt. Frigiv hyppigt. Og lyt til dine kunder.
Linus' fornyelse bestod ikke så meget i, at han gjorde ekspederede
hurtige frigivelser, hvor han indkorporerede masser af bruger feedback (noget
lignende havde været en del af Unix-traditionen længe), men at han
skalerede princippet op til et intensitetsniveau, der matchede
kompleksiteten af det, som han udviklede. Dengang (omkring 1991) var
det ikke ualmindeligt, at han frigav en kerne hyppigere end en gang om
dagen! Det virkede, fordi han dyrkede sin base af medudviklere og
brugte Internet til samarbejde meget mere end nogen anden.
Men hvordan virkede det? Og var det noget, jeg kunne gøre efter, eller
skyldtes det Linus Torvalds' unikke geni?
Det troede jeg ikke. Jeg medgiver gerne, at Linus er en pokkers god
hacker (hvor mange af os kunne konstruere en fuldstændig,
produktionsklar kerne til et operativsystem fra bunden?) Men Linux
repræsenterede
ikke nogen frygtindgydende begrebsmæssigt spring fremad. Linus er ikke
(eller i det mindste ikke endnu) et innovativt design-geni, ligesom
Richard Stallman eller James Gosling (NeWS og Java) er det. Snarere
synes Linus at være et geni til udvikling, med en sjette sans til at
undgå fejl, udvikling i forkert retning og sand evne til at finde
vejen mellem A og B med den minimale indsats. Hele Linux'
opbygning stråler i sandhed af den kvalitet, der afspejler Linus' i grunden
konservative og forenklede udviklingsstil.
Så hvis hurtig frigivelse og fuldt brug af Internet som medie ikke
var et tilfælde men integrerede dele af Linus' udviklings-genis
forståelse for vejen med den minimale indsats, hvad var det så han
maksimerede? Hvad var det han hev ud af maskineriet?
Når det udtrykkes sådan, besvarer spørgsmålet sig selv. Linus holdt
sine hackere/brugere konstant stimulerede og belønnede -- stimulerede af
udsigten til en del af æren til at tilfredsstille egoet og med udsigt
til konstante (ja daglige) forbedringer af deres eget arbejde.
Linus forsøgte direkte at maksimere antallet af mandetimer, der blev
brugt til at finde fejl og til at udvikle, selv om det betød
ustabil kode og udbrændte brugere, hvis en alvorlig fejl viste
sig at være umedgørlig. Linus opførte sig som om, han troede på sådan
noget som dette:
8. Med en stor nok base af betatestere og medudviklere, vil næsten
ethvert problem blive hurtigt beskrevet og rettelsen være åbenlys for
en eller anden.
Eller mindre formelt, 'Med nok øjne er alle fejl banale'. Jeg kalder
det: Linus' lov.
Min originale formulering var, at ethvert problem 'vil være
gennemskueligt for en eller anden'. Linus indvender, at den person, som
først forstår og retter problemet, ikke nødvendigvis -- eller ikke
engang som regel -- er den, som først beskrevet det. 'En eller anden
finder problemet', siger han, 'og en helt anden forstår det. Og jeg vil
gerne citeres for at sige, at det at finde problemet er den største
udfordring'. Men pointen er, at det har en tendens til at ske
hurtigt.
Jeg tror, at her er den fundamentale forskel på katedral-stilen og
basar-stilen. Når en katedral-bygger programmerer, er fejl og udvikling
vanskelige, lumske, grundlæggende fænomener. Det tager måneder med
grundig overvejelse for de pligttro at tro på, at de har fundet alle
fejlene. Derfor er der lange intervaller mellem frigivelser, og den
uundgåelige skuffelse, når den længeventede frigivelse ikke er
perfekt.
På den anden side er holdningen i basaren, at du går ud fra, at fejl i
al almindelighed er banale -- eller i det mindste bliver de hurtig
banale, når de eksponeres til tusinder af villige medudviklere, der
hamrer løs på enhver ny frigivelse. Følgelig frigiver du hyppigere for at
få flere rettelser, og som en god sidegevinst er der mindre at miste,
hvis et lejlighedsvis makværk slipper ud af døren.
Og det er det. Det er nok. Hvis 'Linus' lov' er falsk, så burde
ethvert system så komplekst som Linux-kernen, der er blevet hacket af så
mange, på et eller andet
tidspunkt være brudt sammen under vægten af uforudset dårligt
sammenspil og 'grundlæggende' fejl, der ikke er fundet. På den anden
side -- hvis den er sand, er det tilstrækkeligt til at forklare Linux'
relative mangel på fejl og dens fortsatte høje oppetid, der strækker sig over
måneder og år.
Og måske burde det ikke have været sådan en overraskelse. Sociologer
opdagede for år siden, at den gennemsnitlige mening hos en gruppe af
lige dygtige (eller lige ignorante) iagttagere, er en del mere
pålidelig end en enkelt tilfældigt udvalgt af iagttagerne. De kaldte
det 'delfi-effekten'. Det virker som om, at det, Linus har vist, er,
at det også gælder om det at finde fejl i et operativsystem -- at
delfi-effekten kan tæmme udviklingens kompleksitet selv ved et
kompleksitetsniveau som med en operativsystem-kerne.
En særlig egenskab ved Linux-situationen, som klart hjælper sammen med
delfi-effekten, er det faktum, at bidragsyderne til et hvilket som
helst projekt er selv-valgte. En tidlig kritiker gjorde opmærksom på,
at bidrag ikke modtages fra en tilfældig stikprøve, men fra folk, som
er tilstrækkeligt interesseret til at bruge softwaren, lære hvordan
den virker, forsøge at finde løsninger på de problemer, som de støder
på, og faktisk producere en tilsyneladende fornuftig løsning. Det er
overordentlig
sandsynligt, at enhver, der kommer igennem disse filtre, kan bidrage
med noget brugbart.
Jeg står i gæld til Jeff Dutky (dutky@wam.umd.edu), som gjorde
opmærksom på, at Linus' lov kan omformuleres til 'Fejlfinding
kan paralleliseres'. Jeff observerer, at selvom fejlfinding kræver, at
fejlfinderne kommunikerer med en eller anden koordinerende udvikler,
så kræver det ikke nogen betydelig koordinering mellem
fejlfinderne. Det falder ikke som bytte for den samme kvadratiske
kompleksitet og de ledelsesudgifter, som gør det problematisk at
øge antallet af udviklere.
I praksis synes det teoretiske tab af effektivitet, som skyldes
duplikeringen af fejlfindernes arbejde, aldrig at være et problem i
Linux-verdenen. En effekt af 'politikken om at frigive tidligt og hyppigt'
er at minimere sådan duplikering ved at hurtigt sprede rettelser, der
stammer fra feedback [JH].
Brooks (forfatteren af ”The Mythical Man-Month) kom endda med en henkastet
bemærkning om Jeff: 'Den totale
omkostning ved at vedligeholde et bredt anvendt program er typisk 40
procent eller mere af omkostningen ved at udvikle det. Det er
overraskende, at de omkostninger er påvirket af antallet af brugere.
Flere brugere finder flere fejl' (min fremhævning).
Flere brugere finder flere fejl, fordi flere brugere betyder flere
måder at stresse programmet på. Den effekt er forstærket, når brugerne
er medudviklere. Enhver af dem griber opgaven med at beskrive fejl an
med et lidt anderledes begrebssæt og og andre analytiske værktøjer, en anden
vinkel på problemet. Delfi-effekten synes at virke præcis på grund af
denne variation. Specifikt med hensyn til at finde fejl har
variationen også tendens til at reducere duplikeringen af indsatsen.
At have flere betatestere reducerer således ikke nødvendigvis
kompleksiteten af forhåndenværende grundlæggende fejl, men det øger
sandsynligheden for, at en eller andens arbejdsmetode bliver stillet
overfor problemet på en sådan måde, at fejlen bliver banal for denne
person.
Linus helgarderer også sit væddemål. Hvis der er alvorlige fejl, er en
version af Linux-kernen nummereret på en sådan måde, at en potentiel
bruger kan vælge enten at køre den sidste version, som er 'stabil',
eller afprøve det nyeste nye og risikere fejl for at få nye
muligheder. Denne taktik er endnu ikke formelt efterlignet af de
fleste Linux-hackere, men måske skulle den være det; faktum er, at det
at begge valg er mulige, gør begge valg mere attraktive [HBS].
Da jeg havde studeret Linus' adfærd og formuleret en teori om, hvorfor
den var succesfuld, tog jeg en bevidst beslutning om at afprøve hans
teori på mit nye projekt (som jeg indrømmer er meget mindre komplekst
og ambitiøst).
Men det første jeg gjorde var at reorganisere og forenkle Popclient en
hel del. Carl Harris' implementeringer var meget solide, men bar præg
af en unødvendig kompleksitet, som er kendetegnende for mange
C-programmører. Han behandlede koden som om, den var det centrale i
sig selv, og datastrukturerne som understøttelse for koden. Resultatet
var, at koden var smuk, men designet af datastrukturerne var tilfældigt
og temmelig grimt (i det mindste efter den gamle LISP-hackers høje
standarder).
Udover at forbedre koden og datastrukturerne havde jeg dog en anden
grund til at omskrive koden. Det var at udvikle det til noget, som jeg
fuldstændigt forstod. Det er ikke særligt morsomt at rette fejl i et
program, som du ikke forstår fuldt ud.
I den første måned, cirka, fulgte jeg simpelthen betingelserne i Carls
grundlæggende design. Den første alvorlige ændring, jeg lavede, var at
tilføje understøttelse af IMAP. Jeg gjorde dette ved at reorganisere
indretningen af protokollerne til en standard-driver og tre
metode-tabeller (til POP2, POP3 og IMAP). Dette og de forrige ændringer
illustrerer et generelt princip, som programmører gør klogt i at
huske, specielt med hensyn til sprog som C, der ikke naturligt
arbejder med dynamisk skrivning:
9. Smarte datastrukturer og dum kode virker meget bedre end det
modsatte.
Brooks, kapitel 9: 'Vis mig din [kode] skjul dine [data strukturer],
og jeg vil fortsat være mystificeret. Vis mig dine [data strukturer],
og jeg vil sandsynligvis ikke behøve din [kode]; den vil være
indlysende'.
Faktisk sagde han 'oversigts-diagrammer' og 'tabeller'. Men hvis man
tager højde for tredive års skift i terminologi/kultur, er det næsten
samme pointe.
På dette tidspunkt (tidligt i september 1996, omkring seks uger efter
år nul) begyndte jeg at tænke på, at et navneskift ville være passende
-- når alt kommer til alt, var det jo ikke mere bare en POP
klient. Men jeg tøvede, fordi der endnu ikke var noget virkelig nyt i
designet. Min version af Popclient manglede stadig at udvikle en
selvstændig identitet.
Det ændredes radikalt, da Fetchmail lærte at videresende post til
SMTP-porten. Jeg kommer til det om et øjeblik. Men først: jeg sagde
ovenfor, at jeg bestemte mig til at bruge dette projekt til at teste
min teori om, hvad Linus Torvalds havde gjort rigtigt. Hvordan (kan du
sagtens spørge) gjorde jeg det? På disse måder:
- Jeg frigav tidligt og hyppigt (næsten aldrig mindre end hver tiende dag; en gang om dagen i perioder med intens udvikling).
- Jeg udvidede min beta-liste ved at tilføje enhver, som kontakte mig angående Fetchmail.
- Jeg sendte sludrende meldinger til beta-listen hver gang, jeg frigav, hvor jeg opfordrede folk til at deltage.
- Og jeg lyttede til mine betatestere, spurgte dem om beslutninger om design og roste dem hver gang, de sendte rettelser og feedback ind.
Gevinsten fra disse simple forholdsregler var øjeblikkelig. Fra
projektets begyndelse fik jeg fejlrapporter af en kvalitet, som de
fleste udviklere ville dræbe for, ofte vedhæftet rettelser. Jeg fik
opmærksom kritik, jeg fik fanpost, jeg fik intelligente forslag til
faciliteter. Hvilket fører til:
10. Hvis du behandler dine betatestere, som om de er din mest
værdifulde ressource, vil de reagere ved at blive din mest værdifulde
ressource.
Et interessant mål for Fetchmails succes er bare størrelsen af
beta-listen, vennerne af Fetchmail. I skrivende stund har den 249
medlemmer, og der kommer to eller tre til hver uge.
Faktisk er der en interessant grund til, at listen er ved at miste
medlemmer fra højdepunktet tæt på 300, da jeg reviderer i maj 1997.
Adskillige folk har bedt mig slette dem, fordi Fetchmail virker
så godt for dem, at de ikke længere har behov for at være på listen!
Måske er det den normale livscyklus for et modent projekt af
basar-stilen.
Det virkelige vendepunkt i projektet var, da Harry Hochheiser sendte
mig sin skrabede kode til at videresende post til klientmaskinens
SMTP-port. Jeg blev straks klar over, at en pålidelig implementering
af denne facilitet ville gøre alle de andre leveringsmåder praktisk
talt forældede.
I mange uge havde jeg kun rykket gradvist frem med Fetchmail, selv om
jeg syntes, at designet af brugergrænsefladen var brugbart men groft
-- uelegant og med for mange ubetydelige muligheder stikkende frem
alle vegne. Muligheden for at smide den hentede post ned i en
postkasse-fil eller til standard uddata generede mig især, men jeg
kunne ikke finde ud af hvorfor.
(Hvis du ikke er interesseret i den tekniske side af hvordan
elektronisk post på Internet fungerer, kan du uden problemer springe
de næste to afsnit over)
Det jeg så, når jeg tænkte over videresendelse med SMTP var, at
Popclient havde forsøgt at gøre for mange ting på en gang. Den var
blevet designet til både at være en posttransportagent (MTA) og en
lokal leverings-agent (MDA). Med videresendelse med SMTP kunne den
komme væk fra MDA-området og blive en ren MTA, der afleverer posten
til andre programmer, som så håndterer den lokale levering -- ligesom
Sendmail gør.
Hvorfor besvære sig med kompleksiteten i konfigurering af MDA eller
med at sætte en lås-og-tilføj på en postkasse, når port 25 til at
begynde med næsten med sikkerhed findes på enhver platform med
understøttelse af TCP/IP? Især når det betyder, at hentet post med
sikkerhed vil se ud som SMTP-post fra en normal afsender, hvilket i
virkeligheden var det, som jeg alligevel ville.
(Tilbage til et højere niveau…)
Selvom du ikke fulgte den foregående tekniske jargon, så er der adskillige
lektioner her. For det første var denne ide om
videresendelse med SMTP den største enkelte gevinst, jeg fik ved
bevidst at efterligne Linus' metoder. En bruger gav mig denne
fremragende ide -- det eneste jeg behøvede at gøre var at forstå
implikationerne.
11. Det næstbedste efter at få gode ideer er at genkende gode ideer
fra dine brugere. Nogle gange er det sidste bedre.
Interessant nok finder du hurtigt ud af, at hvis du er hudløst ærlig
med hensyn til, hvor meget du skylder andre mennesker, så vil verdenen
som helhed behandle dig som om, du selv har opfundet hver en detalje,
og som om du bare er passende ydmyg med hensyn til dit medfødte
geni. Vi kan alle se, hvor godt det virkede for Linus!
(Da jeg holdt dette foredrag på Perl-konference i august 1997, sad
Larry Wall på forreste række. Da jeg kom til den sidste af ovenstående
linier, råbte han i religiøs vækkelsesstil, 'Sig det, sig det,
broder'! Hele publikummet grinede, fordi de vidste, at det også havde
virket for opfinderen af Perl)
Efter i nogle få uger at have kørt projektet i den samme ånd, begyndte
jeg at få lignende ros ikke bare fra mine brugere men fra andre folk,
som havde hørt rygtet. Jeg har gemt nogle af de emails; jeg vil tage
dem frem igen, hvis jeg nogen sinde begynder at tvivle på, om mit liv
har været noget værd :-)
Men der er yderligere to fundamentale, upolitiske lektioner her, som
gælder for alle former for design.
12. Ofte stammer de mest slående og nyskabende løsninger fra en
erkendelse af, at din forståelse af problemet var forkert.
Jeg havde forsøgt at løse det forkerte problem ved at forsætte med at
udvikle Popclient som en kombineret MTA/MDA med alle slags smarte
lokale leveringsmåder. Fetchmails design trængte til at blive
genovervejet fra grunden som en rendyrket MTA, som en del af den
normale postvej på Internet med SMTP.
Når du rammer muren under udvikling -- når du har problemer med at
komme gennem næste rettelse -- er det ofte på tide at spørge, ikke om
du har det rigtige svar, men om du stiller det rigtig spørgsmål. Måske
trænger spørgsmålet til at blive omformuleret.
Ok, jeg havde omformuleret mit problem. Tydeligvis var det rigtige at
gøre, (1) at hacke understøttelse af videresendelse med SMTP ind i
standard-driveren, (2) at gøre det til standardmåden og (3) i sidste
ende smide alle de andre leveringsmåder væk, især mulighederne for
levering som fil og levering som standard uddata.
Jeg tøvede nogen tid med hensyn til skridt 3, da jeg var bange for at
gøre gamle brugere af Popclient,som var afhængige af vekslende
mekanismer til postleveringer, vrede. I teorien kunne de med det samme
skifte til .forward-filer eller deres tilsvarende non-sendmail for at få samme
effekt (for andre postservere end
Sendmail) for at have samme mulighed. I praksis kunne overgangen blive
noget skidt.
Men da jeg gjorde det, viste fordelene sig at være enorme. Den
tungeste del af koden til driveren forsvandt. Konfigurationen blev
voldsomt enklere -- ikke flere problemer med MDA-systemet og brugerens
postkasse, ikke flere bekymringer om hvorvidt det underliggende OS
understøttede fillåsning.
Desuden forsvandt den eneste måde, man kunne miste post. Hvis du
valgte aflevering som fil, og din disk løb fuld, mistede du
posten. Det kan ikke ske ved videresendelse med SMTP, da postserveren
ikke returnerer et OK med mindre beskeden kan blive leveret eller i
det mindste sendt til en midlertidig kø for senere levering.
Derudover blev ydelsen forbedret (dog ikke sådan, at du ville bemærke
det i første omgang). En anden ikke uvæsentlig fordel af denne ændring
var, at den manuelle side blev enklere.
Senere måtte jeg genindføre levering via brugerspecificeret MDA for at
tillade håndtering af nogle obskure situationer med dynamisk SLIP. Men
jeg fandt en meget simplere måde at gøre det på.
Moralen? Tøv ikke med at kaste overudviklede funktioner bort, når du
kan gøre det uden at miste effektivitet. Antoine de Saint-Expéry (som
var pilot og flydesigner, når han ikke forfattede klassiske
børnebøger) sagde:
13. 'Perfektion (med hensyn til design) opnås ikke, når der ikke er
mere at tilføje, men snarere når der ikke er mere at tage bort'.
Når din kode er ved at blive bedre og enklere, så ved du, at
det er rigtigt. Og i processen fik Fetchmails design sin egen
identitet, som var forskellig fra forgængeren Popclient.
Det var tid til en navneforandring. Det nye design lignede Sendmail
meget mere end den gamle Popclient; begge er MTA'er, men hvor Sendmail
sender før levering, så henter den nye Popclient før levering. Så to
måneder ude af starthullerne omdøbte jeg den til Fetchmail.
Der er en mere almindelig lektie af lære fra denne historie om hvordan,
SMTP-levering blev indarbejdet i fetchmail. Det er ikke kun fejlfinding,
der kan paralleliseres; det kan udvikling og (i en måske overraskende
grad) udforskning af designrummet også. Når din udviklingsmetode hurtigt
gentages, kan udvikling og forøgelse blive særlige tilfælde af fejlfinding
-- at rette 'udeladelsesfejl i softwarens originale anvendelighed og koncept.
Selv på et højere designniveau, kan det være meget værdifuldt, at masser af
tænkende medudvikleres tilfældigt gennemgår designrummet omkring dit produkt.
Se til eksempel den måde en vandpyt finder et afløb, eller endnu bedre hvordan
myrer finder mad: i grunden udforskning gennem spredning efterfuldt af
udforskning formidlet gennem en skalerbar kommunikationsmekanisme. Det virker
rigtig godt; som med Harry Hochheiser og jeg er det muligt, at en af dine
udforskere finder et stort bytte i nærheden, som du var bare lidt for snævert
fokuseret til at se.
Der var jeg med et godt og innovativt design, kode, som jeg vidste
virkede godt, fordi jeg brugte den hver dag, og en spirende
beta-liste. Det gik gradvist op for mig, at jeg ikke længere var
involveret i et trivielt, personligt hack, som måske ville være
brugbart for nogle få andre. Jeg havde fat i et program, som enhver
hacker med en Unix-boks og en SLIP/PPP postforbindelse virkelig havde
brug for.
Med faciliteten til SMTP-videresendelse rykkede det så langt foran
konkurrenterne, at det blev en potentiel 'kategoridræber', et af de
klassiske programmer, der udfylder sin niche så fuldstændigt, at
alternativerne ikke bare kastes væk men næsten glemmes fuldstændigt.
Jeg tror ikke, at du kan sigte mod eller planlægge et resultat som
dette. Du skal næsten trækkes ind i det af ideer om design, der er så
kraftfulde, at resultaterne bagefter virker uundgåelige, naturlige,
næsten forudbestemte. Den eneste måde at sigte efter sådanne ideer er
ved at have masser af ideer -- eller ved at have evnen til at bringe
gode ideer videre, end deres ophavsmænd troede, de kunne komme.
Andrew Tanenbaum fik den originale idé at bygge en simpel
enkeltstående Unix til en 386-platformen til brug som
undervisningsredskab (han kaldte det Mimix). Linus Torvalds drev
formentlig Minix-projektet
længere, end Andrew troede det kunne komme -- og det voksede til noget
vidunderligt. På samme måde (bare i mindre målestok) tog jeg nogle af
Carl Harris' og Harry Hochheisers ideer og pressede dem videre. Ingen
af os var 'originale' i den romantiske forstand, som folk synes er
genialt. Men på den anden side er det meste videnskab, ingeniørarbejde
og softwareudvikling ikke udført af originale genier, uanset hvad
hacker-mytologien siger.
Resultaterne var alligevel temmelig voldsomme -- faktisk var det den
slags succes, som alle hackere lever for! Og de betød, at jeg skulle
sigte endnu højere. For at gøre Fetchmail så godt, som jeg nu så det
kunne blive, måtte jeg nu skrive ikke bare efter mine egne behov men
også inkludere og understøtte faciliteter, som var nødvendige for
andre uden for min kreds. Og at gøre det mens programmet fortsat
forblev enkelt og robust.
Den første og overvældende vigtige facilitet, jeg skrev, efter jeg
havde indset det, var understøttelse af levering til mange brugere --
muligheden for at hente post fra postkasser, der opsamlede al post for
en gruppe af brugere og så sende hver enkelt stykke post til de
enkelte modtagere.
Jeg besluttede at tilføje understøttelse af levering til mange
brugere, delvist fordi nogle brugere råbte op om det, men mest fordi
jeg mente, at det ved at tvinge mig til at håndtere adressering
fuldstændig generelt ville fremprovokere fejl i koden, som var skrevet
med henblik på levering til en enkelt bruger. Og det gjorde det. At få
RFC 822-fortolkeren til at virke tog mig bemærkelsesværdig lang tid,
ikke fordi nogen enkelt del af det var svært, men fordi det havde
betydning for en bunke af gensidigt afhængige og forvirrende detaljer.
Men levering til mange brugere viste sig også at være en fremragende
design-løsning. Det vidste jeg fordi:
14. Ethvert værktøj bør være anvendeligt på den forventede måde,
men et i sandhed enestående værktøj kan bruges til ting, som du aldrig
havde forventet.
Den uventede brug af Fetchmails levering til mange brugere er styring
af postfordelingslister og alias-ekspansion udført på klientsiden af
SLIP/PPP-forbindelsen. Det betyder, at man fra en personlig maskine
koblet op gennem en ISP, kan administrere en postfordelingsliste uden
konstant adgang til alias-filerne hos ISP'en.
En anden vigtig ændring, som mine betatestere forlangte, var
understøttelsen af 8-bit MIME. Det var temmelig nemt at gøre, da jeg
var omhyggelig med at holde koden i ren 8-bit. Ikke fordi jeg havde
forventet krav om den facilitet, men i overensstemmelse med en anden
regel:
15. Når du skriver gateway software, skal du sørge for at forstyrre
datastrømmen så lidt som muligt -- og aldrig smide
informationer væk, med mindre modtageren tvinger dig til det!
Hvis jeg ikke havde fuldt denne regel, ville understøttelsen af 8-bit
MIME have været svær og fejlbehæftet. Faktisk behøvede jeg kun at læse
RFC 1652 og tilføje en triviel mængde logik til generering af
brevhoveder.
Nogle europæiske brugere plagede mig om at tilføje en mulighed for at
begrænse antallet af beskeder, som blev hentet per session (så de
kunne kontrollere omkostningerne ved deres dyre
telefonforbindelser). I lang tid strittede jeg imod dette, og jeg er
fortsat ikke helt glad for det. Men når man skriver til hele verdenen, skal
man lytte til sine kunder -- det ændrer sig ikke bare fordi, de ikke
betaler med penge.
Før vi vender tilbage til generelle emner vedrørende udvikling af
software, skal vi lige overveje yderligere et par specifikke lektioner
fra Fetchmail-projektet. Ikke-tekniske mindede læsere kan roligt springe
dette afsnit over.
Syntaksen i rc-filen indeholder valgfri 'støj'-nøgleord, som ignoreres
fuldstændigt af fortolkeren. Den engelsklignende syntaks, som
tillades, er betragteligt mere læsevenlig end den traditionelle
stringente kombination af nøgleord og tilhørende værdier, som man får
ved at fjerne dem helt.
De begyndte som et sent natte-eksperiment, da jeg lagde mærke til,
hvor meget deklarationen af rc-filen begyndte at ligne et imperativt
minisprog (det er derfor, jeg ændrede det oprindelige Popclient
nøgleord 'server' til 'poll').
Det forekom mig, at hvis jeg gjorde det imperative minisprog mere som
engelsk, ville det måske gøre det lettere at bruge. Selvom jeg er en
overbevist tilhænger af 'gør det til et sprog'-designskolen, som
Emacs og HTML er eksempler på, er jeg normalt ikke fan af
engelsklignende syntakser.
Traditionelt har programmører haft tendens til at favorisere
kontrolsyntakser, som er meget præcise og kompakte, og som ikke har nogen
redundans overhovedet. Det er en kulturel arv fra dengang, hvor
computerressourcer var dyre, så fortolkerniveauer skulle være så
billige og simple som mulige. Engelsk med omkring 50% redundans, lignede en
meget uegnet model dengang.
Det er ikke årsagen til, at jeg normalt undgår engelsklignende
syntaks; jeg nævner det kun her for at modsige det. Med billig cpu-tid
og datakraft bør enkelthed ikke være et mål i sig selv. Nu om dage er
det mere vigtigt, at et sprog er bekvemt for mennesker, end at det er
besparende for computeren.
Der er derimod gode grunde til at være varsom. En grund er
omkostningen ved kompleksiteten af fortolkerniveauet -- du bør ikke
håndhæve det til et niveau, hvor det i sig selv bliver en kilde til
fejl og brugerforvirring. En anden grund er, at når du prøver at gøre
et sprogs syntaks mere engelsklignende, kræver det ofte, at det
engelske, som bruges, bliver så fordrejet, at den overfladiske lighed
med et naturligt sprog bliver lige så forvirrende, som en traditionel
syntaks ville have været (du ser det ofte i de såkaldte 'fjerde
generations'-sprog og kommercielle database-sprog).
Syntaksen, der styrede Fetchmail, synes at undgå disse problemer, da
sprogområdet er ekstremt begrænset. Det er ikke engang i nærheden af
et generelt anvendeligt sprog; indholdet er ganske enkelt ikke særligt
kompliceret, så der er ikke særlig stor chance for forvirring ved
mentalt at bevæge sig mellem et mindre undersprog til engelsk og det
faktiske kontrolsprog. Jeg tror, at der er en generel lektie her:
16. Når dit sprog ikke engang er i nærheden af turingstandard, kan
syntaktisk sukker være din ven.
En anden lektie drejer sig om sikkerhed gennem uigennemskuelighed. Nogle
Fetchmail-brugere bad mig om at ændre softwaren, så adgangskoder blev
opbevaret krypterede i rc-filen, så snushaner ikke ville være i stand
til at se dem ved en tilfældighed.
Det gjorde jeg ikke, da det ikke rigtigt giver nogen yderlig
sikkerhed. Hvem som helst, som har tilegnet sig tilladelse til at læse
din rc-fil, vil alligevel være i stand til at starte Fetchmail som dig
- og hvis det er din adgangskode, de er ude efter, vil de være i stand til
at få den nødvendige dekoder ud af selve Fetchmail-koden for at få
adgangskoden.
Det eneste en kryptering af adgangskoder til .fetchmailrc ville
have gjort, var at give en falsk følelse af sikkerhed for folk, som ikke tænker
sig om. Den generelle regel her er:
17. Et sikkerhedssystem er kun så sikkert som dets hemmelighed. Pas
på pseudohemmeligheder.
Tidlige anmeldere og testlæsere af dette skrift stillede vedholdende
spørgsmål om forudsætningerne for udvikling efter basar-metoden,
inklusive både projektlederens kvalifikationer og kodens tilstand, når
du offentliggører projektet og begynder at opbygge et fællesskab af
medudviklere.
Det er temmelig åbenlyst, at du ikke kan kode fra starten efter
basar-metoden [IN]. Du kan teste, fejlsøge og forbedre med
basar-metoden, men det vil være meget svært at starte et nyt projekt
med basar-metoden. Linus prøvede det ikke. Det gjorde jeg heller
ikke. Dit spirende udviklerfællesskab har brug for noget at lege med,
der virker og kan testes.
Når du begynder at opbygge et fællesskab, har du behov for at kunne
præsentere et sandsynligt løfte. Dit program behøver ikke at virke
særlig godt. Det kan være ufærdigt, fejlbehæftet, ufuldstændigt og
dårligt dokumenteret. Det skal dog være i stand til at a) kunne køre,
og b) og det skal dog kunne overbevise potentielle
medudviklere om, at det kan udvikles til noget rigtigt godt inden for
en overskuelig fremtid.
Linux og Fetchmail blev begge offentliggjort med et stærkt og
tiltalende grundlæggende design. Mange, der har tænkt over
basar-modellen, som jeg har præsenteret den, betragter ganske rigtigt
dette som centralt, og har så draget den konklusion, at en veludviklet
sans for intuitivt design og begavelse hos projektlederen er
uundværlig.
Men Linus fik sit design fra Unix. Jeg fik mit design fra den fædrene
Popclient (selv om det senere skulle ændre sig temmelig meget,
proportionalt meget mere end Linux har gjort). Er det virkelig
nødvendigt, at lederen/koordinatoren af en indsats efter basar-metoden
har et exceptionel talent for design, eller kan han nøjes med at løfte
andres talent?
Jeg mener ikke, at det er centralt, at koordinatoren er i stand til at
skabe design af exceptionel karakter, men det er absolut centralt, at
koordinatoren er i stand til genkende andres gode design-ideer.
Både Linux- og Fetchmail-projekterne viser tegn på det. Linus, selv om
han (som tidligere gennemgået) ikke er en spektakulær, original
designer, har vist et stærkt håndelag for at godt design og for at
integrere det i Linux-kernen. Og jeg har allerede beskrevet, hvordan
den allervigstigste design-ide i Fetchmail (videresendelse med SMTP)
kom fra en anden.
Tidlige læsere af dette skrift komplimenterer mig ved at foreslå, at
jeg er tilbøjelig til at undervurdere originalt design i
basar-projekter, fordi jeg selv har masser af det og derfor tager det
for givet. Der kan være noget sandhed i det; design (i modsætning til
kodning og fejlsøgning) er bestemt min stærkeste egenskab.
Men problemet med at være smart og original i forbindelse med design
af software er, at det bliver en vane -- det bliver en vane at gøre
ting smarte og komplicerede, hvor du i stedet skulle lade dem være
robuste og enkle. Jeg har ødelagt projekter, fordi jeg gjorde den
fejl, men det lykkedes mig at undgå det med Fetchmail.
Så jeg tror, at projektet Fetchmail blev en succes, delvist fordi jeg
beherskede min tendens til at være smart; det er et argument (i det
mindste) mod, at originalt design er essentielt for et succesfuldt
basar-projekt. Tag Linux for eksempel. Forestil dig, at Linus Torvalds
have forsøgt at gennemføre fundamentale nyskabelser indenfor design af
operativsystemer under udviklingen; virker det så overhovedet
sandsynligt, at den resulterende kerne ville være blevet så stabil og
succesfuld, som den vi har?
Selvfølgelig er et grundniveau af design- og programmeringsevner som
minimum nødvendige. Jeg regner med, at næsten enhver, der tænker på at
starte en basar-indsats, allerede er over det minimum. Open
source-samfundets indre marked for omdømme lægger et subtilt pres på
folk om ikke at starte en udviklingsindsats, som de ikke er kompetente
til at gennemføre. Hidtil ser det ud til at have virket temmelig godt.
Der er en anden egenskab, som ikke normalt er forbundet med udvikling
af software, som jeg mener er ligeså vigtig som smart design -- og det
er måske mere vigtigt. En koordinator eller leder af et basar-projekt
må have gode sociale og kommunikationsevner.
Dette burde være indlysende. For at opbygge et udviklingssamfund, har
du brug for at tiltrække folk, gøre dem interesseret i, hvad du laver,
og gøre dem glade for den indsats, de yder. Teknisk brillans bringer
dig langt mod opnåelsen af dette, men det er langt fra det hele. Den
personlighed, som du udstråler, betyder også noget.
Det er ikke et tilfælde, at Linus er en flink fyr, som får folk til at
synes om sig og få lyst til at hjælpe ham. Det er ikke et tilfælde, at
jeg er energisk og udadvendt, holder af at underholde, og at jeg har
noget af den indlevelse og de instinkter, som en stand up-komiker
har. For at få en basar-model til at virke, hjælper det enormt, hvis du
i det mindste har en smule evne til at charmere folk.
Det er så sandt som det er sagt: at de bedste hacks begynder som personlige
løsninger til forfatterens dagligdags problemer og spreder sig, fordi det
viser sig, at problemerne er typiske for en stor klasse af
brugere. Det fører os tilbage til emnet for regel 1 måske skrevet mere
anvendeligt:
18. For at løse et interessant problem skal du starte med at finde
et problem, der interesserer dig.
Sådan var det for Carl Harris og det fædrende Popclient, og sådan var
det med mig og Fetchmail. Men det har været kendt i lang tid. Det
interessante, som historierne om Linux og Fetchmail synes at kræve at
vi fokuserer på, er det næste stadie -- udviklingen af software i
store og aktive miljøer af brugere og medudviklere.
I 'The Mythical Man-Month' bemærkede Fred Brooks, at programmørers tid
ikke er ombyttelig; når der bliver tilført udviklere til et forsinket
software-projekt, bliver det mere forsinket. Han mener, at kompleksiteten
og omkostningerne ved et projekt vokser med kvadratet på antallet af
udviklere, men at det udførte arbejde kun vokser lineært. Denne
påstand er siden blevet kaldt for 'Brooks lov' og anses i vide kredse
for at være en selvindlysende sandhed. Men hvis Brooks lov var hele
sandheden, ville Linux have været en umulighed.
Gerald Weinbergs klassiske 'The Psychology Of Computer Programming'
giver set i bagklogskabens lys en væsentlig korrektion af Brooks. I
hans diskussion af 'jegløs programmering' bemærker Weinberg, at i
forretninger, hvor programmører ikke er territoriale med hensyn til
deres kode, og hvor de opfordrer andre til at lede efter fejl og
potentielle forbedringer i den, sker fremskridt dramatisk hurtigere
end ellers.
Weinbergs valg af terminologi har måske forhindret hans analyse i at
få den accept, som den fortjente -- man må smile af ideen om
Internet-hackere som 'jegløse'. Men jeg mener hans argument virker mere
tiltalende end nogen sinde.
Unix' historie burde have forberedt os på, hvad vi er ved at lære af
Linux (og hvad jeg har bekræftet eksperimentelt i mindre målestok ved
bevidst at kopiere Linus' metoder [EGCS]). Det
vil sige, at selv om
kodning basalt set er en ensom opgave, så kommer de virkelig store
hacks ved at anvende opmærksomheden og hjernekraften fra hele
samfund. Udvikleren, som kun bruger sin egen hjerne i et lukket
projekt, vil falde bagud i forhold til udvikleren, som ved, hvordan
han skaber en åben, evolutionær kontekst, hvor fejlfinding og
forbedringer udføres af hundreder af mennesker.
Men den traditionelle Unix-verden var af mange årsager forhindret i at
anvende denne fremgangsmåde optimalt. En årsag var lovmæssige
begrænsninger som følge af licenser, forretningshemmeligheder og
kommercielle interesser. En anden (i bagklogskabens lys) var, at
Internet ikke var særlig godt endnu.
Før Internet blev billigt, var der geografisk tætte miljøer, hvor
kulturen opfordrede til Weinbergs 'jegløse' programmering, og en
udvikler kunne let tiltrække masser af dygtige kibitzere og
medudviklere. Bell Labs, MIT AI Lab, UC Berkely -- alle blev hjemsted
for innovationer, der er legendariske og stadigt potente.
Linux var det første projekt, som var et bevidst og succesfuldt forsøg
på at bruge hele verdenen som talentmængde. Jeg tror ikke, det er et
tilfælde, at Linux' drægtighedsperiode faldt sammen med fødslen af
World Wide Web, og at Linux overstod sin barndom i den samme periode i
1993-94, hvor ISP-industrien tog fart og eksplosionen i den almene
interesse i Internet. Linus var den første, som lærte at spille efter
de nye regler, som det vidt udbredte Internet muliggjorde.
Selv om billigt Internet var en nødvendig betingelse for at
Linux-modellen kunne udvikles, tror jeg ikke, at det alene i sig selv
var en tilstrækkelig betingelse. En anden væsentlig faktor var
udviklingen af en lederstil og af samarbejdsmåder, som tillod
udviklere at tiltrække medudviklere og få maksimalt udbytte af mediet.
Men hvad er den lederstil, og hvordan er disse samarbejdsmåder? De kan
ikke være baserede på magtforhold -- og selv om de kunne, ville ledelse
ved tvang ikke producere de resultater, som vi ser. Weinberg citerer
med stor effekt fra den russiske 1900-tals anarkist Pyotr Alexeyvich
Kropotkins selvbiografi 'Memoirs of a Revolutionist' om det emne:
'Efter at være vokset op i en familie med livegne begyndte jeg et
aktivt liv med, som alle andre andre unge mænd i min tid, en stor
portion tiltro til nødvendigheden af befaling, ordre, udskældning,
straf og lignende. Men da jeg på et tidligt tidspunkt skulle lede
seriøse virksomheder og gøre forretning med (frie) mennesker, og hvor
enhver fejl med det samme ville have alvorlige konsekvenser, begyndte
jeg at værdsætte forskellen mellem at handle efter principper som
befaling og disciplin og at handle efter princippet om almindelig
forståelse. De første virker fortrinligt i en militærparade, men er
intet værd i det virkelige liv, og målet kan kun nås gennem en stor
indsats fra mange konvergerende viljer'.
Denne 'store indsats af mange konvergerende viljer' er præcis, hvad et
projekt som Linux kræver -- og 'princippet om befaling' er praktisk
umulig at anvende blandt frivillige i det anarkistiske paradis, som vi
kalder Internet. For at fungere og konkurrere effektivt må hackere,
som vil lede samarbejdende projekter, lære at rekruttere og motivere
de nødvendige og effektive interessemiljøer på en måde, der svagt
antydes i Kropotkins 'princip om forståelse'. De må lære at følge
Linus' lov. [SP]
Tidligere henviste jeg til 'delfi-effekten' som en mulig forklaring af
Linus' lov. Men bedre analogier til adaptive systemer indenfor biologi
og økonomi trænger sig uimodståeligt på. Linux-verdenen opfører sig på
mange måder som det frie marked eller et økosystem, en samling
selviske agenter, som forsøger at maksimere nytte, en proces, der
medfører selvkorrigerende og spontan orden med mere fuldendelse og
effektivitet, end en hvilken som helst grad af central planlægning
ville have opnået. Det er altså her, man skal søge efter 'princippet
om forståelse'.
'Nyttefunktionen', som Linux-hackere maksimerer, er ikke klassisk
økonomisk, men det er den uhåndgribelige tilfredsstillelse af ego og
anseelse blandt andre hackere (man kunne kalde deres motivation
'uegennyttig', men det ville være at ignorere det faktum, at
uegennyttighed er en form for tilfredsstillelse af ego for den
uegennyttige). Frivillige kulturer, der fungerer på denne måde, er
faktisk ikke ualmindelige; en anden kultur, hvor jeg har været med, er
science fiction, som i modsætning til hacker-kulturen,
udtrykkeligt anerkender 'egoboo' (forøgelse af ens anerkendelse
blandt andre fans) som drivkraft for frivillig aktivitet.
Linus har vist en fin fornemmelse for Kropotkins 'princip om fælles
forståelse' ved succesfuldt at placere sig som vogter for et projekt,
hvor udviklingen for det meste udføres af andre, og ved at støtte
interessen for projektet indtil den blev selvunderstøttende. Denne
halvøkonomiske anskuelse af Linux-verdenen viser os, hvordan denne
forståelse anvendes i praksis.
Vi kan se Linus' metode som en måde at skabe et marked for
egoboo -- at knytte enkelte hackeres selviskhed så tæt sammen som
muligt omkring et vanskeligt formål, der kun kan nås ved vedholdende
samarbejde. Med Fetchmail-projektet har jeg vist (omend i mindre
målestok), at hans metode kan kopieres med gode resultater. Måske har
jeg gjort det en smule mere bevidst og systematisk, end han gjorde.
Mange mennesker (især dem, som politisk er mistroiske over for det
frie marked) ville forvente, at en kultur med selvstyrende egoister
ville være fragmenteret, territorial, præget af splid,
hemmelighedsfuld og fjendtlig. Men denne forventning er klart
modbevist af (bare for at give et eksempel) den slående varians,
kvalitet og dybde af Linux' dokumentation. Alle ved, at programmører
hader at at dokumentere; hvordan kan det så være, at Linux-hackere
genererer så meget af det? Åbenbart er Linux' frie marked for egoboo
bedre til at producere dydig adfærd, der er styret af andre end de
kommercielle software-producenters massivt financierede
dokumentationsforretning.
Både Fetchmail- og Linuxkerne-projektet viser, at ved at belønne mange
andre hackeres ego ordentligt, kan en stærk udvikler/koordinator bruge
Internet til at opnå fordelene ved at have mange udviklere uden at
projektet kollapser i kaotisk rod. Så til Brooks' lov har jeg følgende
modforslag:
19: Under forudsætning af at udviklingskoordinatoren har et
medium, som er mindst så godt som Internet, og forstår at lede uden
tvang, er mange hoveder uundgåeligt bedre end et.
Jeg tror, at open source i fremtiden i stigende grad vil tilhøre folk,
som ved, hvordan man spiller Linus' spil, folk, som forlader
katedralen og lader sig indrulle i basaren. Det betyder ikke, at
individuelle visioner og åndrighed ikke vil have nogen betydning; jeg
tror snarere, det mest banebrydende open source-software vil komme fra
folk, som starter med en individuel vision og åndrighed og så
forstærker det ved at opbygning af frivillige interessefællesskaber.
Og i fremtiden måske ikke kun open source-software. Ingen udvikler af
lukket kildekode vil kunne måle sig med den talentmasse, som
Linux-miljøet retter mod et problem. Meget få vil have råd til at
ansætte bare mere end de to hundrede (1999: 600. 2000: 800), som har
bidraget til Fetchmail!
Måske vil open source-kulturen til sidst triumfere ikke på grund af,
at samarbejde er moralsk korrekt, eller at 'hamstring' af software er
moralsk forkert (under forudsætning af, at du mener det sidste,
hvilket hverken Linus eller jeg gør), men simpelthen fordi en verden
med lukket kildekode ikke kan vinde et evolutionært oprustningkapløb
mod open source-miljøer, som kan sætte store mængder af kvalificeret
tid ind på at løse et problem.
Den oprindelige 'Katedralen og basaren' sluttede med ovenstående
vision -- at glade netværksforbundne horder af programmører/anarkister
udkonkurrerede og overvældede det lukkede hierarki i den konventionelle
software-verden.
En del skeptikere blev dog ikke overbevist; og deres spørgsmål
fortjener at blive taget alvorlige. De fleste af indvendingerne mod
basar-argumenterne drejer sig egentlig om, at fortalerne herfor har
undervurderet den produktivitetsforøgende effekt ved konventionel
ledelse.
Traditionelt indstillede ledere af softwareudviklere hævder, at den
skødesløshed, projektgrupper skabes, ændres og opløses med,
ophæver en betydelig del af de tilsyneladende fordele i antal, som
open source-miljøet har overfor den enkelte udvikler af lukket
kildekode. De vil hævde, at med hensyn til udvikling af software er
det i virkeligheden vedholdende indsats over tid og det, at kunderne
kan forvente en fortsat investering i produktet, som betyder noget,
ikke bare hvor mange mennesker, der har smidt et ben i gryden og så
ladet den stå at simre.
Der er klart noget om dette argument; faktisk har jeg i
The Magic Cauldron arbejdet på den ide, at den forventede værdi af
service i fremtiden er nøglen til økonomien bag udvikling af software.
Men dette argument har også et stort skjult problem; dets implicitte
antagelse af at udvikling af open source ikke leverer en sådan
vedholdende indsats. Faktisk har der været open source-projekter, der
har fastholdt en sammenhængende retning og et effektivt
vedligeholdelsesniveau over ganske lange perioder uden den slags
tilskyndelsestrukturer og institutionelle kontroller, som
konventionelle ledere finder nødvendige. Udviklingen af editoren GNU
Emacs er et ekstremt og lærerigt eksempel; den har indarbejdet
indsatsen fra hundrede af bidragsydere gennem femten år til en samlet
arkitektonisk vision, på trods af høj gennemstrømning og det faktum,
at kun en person (forfatteren) vedvarende har været aktiv i al den
tid. Ingen editor med lukket kildekode er nogen sinde kommet i
nærheden af denne holdbarhedsrekord.
Dette antyder, at der er en grund til at stille spørgsmål ved fordelene
ved konventionelt ledet udvikling af software, der er uafhængig af
resten af argumenterne omkring katedral- overfor basar-måden. Hvis det er
muligt for GNU Emacs at fremvise en konsistent arkitektonisk vision
gennem femten år, eller for et operativsystem som Linux at gøre det
samme gennem otte år med voldsomt skiftende teknologi med hensyn til
hardware og platforme; og hvis der (som det faktisk er tilfældet) har
været mange open source-projekter med god arkitektur og en levetid på
mere end fem år -- så er vi berettigede til at undre os over, hvad --
hvis noget -- vi får for de enorme faste omkostninger forbundet med
konventionelt ledet udvikling.
Hvad det end er, så indebærer det i hvert fald ikke troværdig
overholdelse af deadlines, budget eller faciliteter i specifikationen;
det er sjældent, at et 'ledet' projekt overholder bare et af disse
krav endsige alle tre. Det synes heller ikke at være evne til at
tilpasse sig forandringer i teknologi eller økonomisk sammenhæng; open
source-miljøet har vist sig meget mere effektivt i den henseende (som
det for eksempel klart bevises ved en sammenligning af Internets
tredive-årige historie med de proprietære netværksteknologiers halvliv
-- eller omkostningen ved Microsoft Windows skift fra 16-bit til
32-bit og Linux' næsten lette opmigrering i den samme periode, ikke
bare inden for udviklingen af Intel-linien, men også inden for mere
end et dusin andre hardware-platforme også inklusive 64-bit Alpha).
Mange mennesker tror, at de på den traditionelle måde får en, de kan
holde juridisk ansvarlig og eventuelt hente kompensation fra, hvis
projektet går galt. Men det er en illusion; de fleste software-licenser
indeholder forbehold for garantien af holdbarhed og endda ydelse -- og
tilfælde af succesfuld erstatning for manglende ydelse er forsvindende
få. Selv hvis erstatninger var almindelige, ville det være forfejlet
at være beroliget af følelsen af at kunne sagsøge nogen. Du ønskede
ikke et søgsmål; du ønskede software, der virkede.
Så hvad får du for alle de faste omkostninger?
For at forstå det, må vi undersøge, hvad ledere af softwareudvikling
tror, de gør. Jeg kender en kvinde, som virker som om, hun er meget
god til det her job, og som siger, at projektledelse af software har fem
funktioner:
- At definere mål og holde alle rettet i den samme retning.
- At holde øje med og sikre at afgørende detaljer ikke bliver sprunget over.
- At motivere folk til at udføre kedeligt men nødvendigt slavearbejde.
- At organisere anvendelsen af folk for at opnå den bedste produktivitet.
- At styre de nødvendige ressourcer for at opretholde projektet.
Tilsyneladende alle værdige mål; men under open source-modellen og
dens sociale sammenhæng begynder de at virke underligt irrelevante. Vi
gennemgår dem i den modsatte rækkefølge.
Min ven fortæller, at meget styring af ressourcer i bund og grund er
defensiv; når du har dine folk, maskiner og kontorpladser, skal du
forsvare dem overfor dine med-ledere, der kæmper om de samme
ressourcer, og dem højere oppe, der prøver at allokere den mest
effektive brug af en begrænset gruppe.
Men open source-udviklere er frivillige, selvvalgte med både interesse
for og evne til at bidrage til projekterne, de arbejder på (og det
gælder hovedsagelig stadig, selv om de får løn for at hacke open
source). Den frivillige etos har tendens til automatisk at tage sig
af 'angrebssiden' af ressourcestyringen; folk bringer selv deres egne
ressourcer til bordet. Og der er kun lidt eller intet behov for en
leder til at 'spille i forsvaret' i den konventionelle forstand.
Under alle omstændigheder viser det sig konstant, i en verden med
billige PC'er og hurtige forbindelser til Internet, at den eneste
virkeligt begrænsede ressource er faglært opmærksomhed. Når open
source-projekter mislykkes, gør de det i bund og grund aldrig på grund
af mangel på maskiner, forbindelser eller kontorplads; de dør kun, når
udviklerne selv mister interessen.
Når det er tilfældet, er det dobbelt så vigtigt, at open
source-hackere organiserer sig selv for at opnå maksimal produktivitet
gennem selvudvælgelse -- og det sociale miljø vælger hensynsløst på
grundlag af kompetence. Min ven, der er bekendt med både open
source-verdenen og store lukkede projekter, mener, at open source
delvist har været succesfuld, fordi kulturen kun accepterer de cirka
5% mest talentfulde af programmørerne. Hun bruger det meste af sin tid
på at organisere anvendelsen af de sidste 95%, og hun har derfor
førstehåndserfaringer med den velkendte forskel i form af en faktor
hundrede i produktivitet mellem de dygtigste programmører og de
almindeligt kompetente.
Størrelsen af denne forskel har altid rejst et pinligt spørgsmål:
ville individuelle projekter, og faget som sådan, være bedre tjent
uden mere end 50% af de mindst dygtige? Fornuftige ledere har længe
forstået, at hvis ledelse af konventionel software kun drejer sig om
at ændre de mindst dygtige fra et netto tab til en marginal gevinst,
så er indsatsen måske ikke besværet værd.
Open source-miljøets succes gør spørgsmålet mere aktuelt med sit klare
bevis på, at det ofte er billigere og mere effektivt at rekrutere
selvudvalgte frivillige på Internet, end det er at lede bygninger
fulde af folk, som hellere ville lave noget andet.
Hvilket bekvemt bringer os videre til spørgsmålet om motivation. En
lignende og ofte hørt måde at fremsætte min vens pointe er, at
traditionel udviklingsledelse er en nødvendig kompensation for
utilstrækkeligt motiverede programmører, der ellers ikke ville udføre
et godt stykke arbejde.
Dette svar kommer sædvanligvis sammen med en påstand om, at man kun
kan regne med, at open source-miljøet vil udføre arbejde, der er
'sexet' eller teknisk interessant; intet andet vil blive udført (eller
udført dårligt), med mindre det er fabrikeret på stribe af daglejere,
der er motiveret af penge, i små kontorer med ledere, der svinger
pisken over dem. Jeg skriver om de psykologiske og sociale grunde til
at være kritisk over for denne påstand i 'Homesteading the Noosphere'.
Men til dette formål mener jeg, at det er mere interessant at påpege
følgerne af at acceptere påstanden som værende sandfærdig.
Hvis den konventionelle stærkt ledede måde at udvikle software med
lukket kildekode kun forsvares af en slags Maginotlinie af problemer,
som bidrager til kedsommelighed, så vil det kun være holdbart for hver
enkelt applikation så længe, at ingen synes problemerne er særligt
interessante, og ingen andre finder en måde at komme uden om dem
på. For i det øjeblik, at der opstår en open source-konkurrence om et
stykke 'kedeligt' software, vil kunderne vide, at det i sidste ende
var løst af en, som valgte at løse det problem, fordi problemet var
fascinerende i sig selv -- hvilket inden for software som inden for
andre slags kreativt arbejde er en langt mere effektiv motivator end
pengene alene.
At have en konventionel ledelsesstruktur udelukkende for at motivere
er sikkert god taktik men dårlig strategi; en kortsigtet gevinst
men i det lange løb et mere sikkert tab.
Indtil videre ser konventionel udviklingsledelse på to punkter
(styring af ressourcer og organisering) nu ud som en dårlig satsning
overfor open source, og den lever på lånt tid med hensyn til til en
tredie (motivation). Og den stakkels belejrede konventionelle leder
vil ikke få undsætning fra spørgsmålet om at holde øje med afgørende
detaljer; det stærkeste argument, open source-miljøet har, er, at en
decentraliseret gennemgang blandt ligemænd vinder over alle
konventionelle metoder i at sikre, at detaljer ikke overses.
Kan vi bruge definering af mål som en berettigelse for de faste
omkostninger ved ledelse af konventionel udvikling af software? Måske;
men for at gøre det, har vi behov for en god grund til at tro, at
ledelsesgrupper og virksomhedernes faste måder at gøre ting på er
bedre til at definere værdige og bredt accepterede mål end de
projektledere og stammeældste, som har den tilsvarende rolle i open
source-verdenen.
Det er en svær pille at sluge uden beviser. Og det er ikke så meget
open source-siden af argumentet (Emacs' holdbarhed eller Linus
Torvalds' evne til at mobilisere horder af udviklere med tale om
'verdensdominans'), der gør det svært. Snarere er det den forfærdelige
demonstration af de konventionelle mekanismer til definition af mål
for software-projekter.
Et af de bedst kendte, folkelige teoremer om softwareudvikling er, at
60% til 75% af konventionelle software-projekter enten aldrig bliver
færdiggjorte eller bliver forkastet af deres kommende brugere. Hvis
det bud er bare i nærheden af at være sandt (og jeg har aldrig mødt en
leder med nogen erfaring, som bestrider det), så er flertallet af
projekter rettet mod mål, der er enten (a) ikke realistisk opnåelige
eller (b) fuldstændigt forkerte.
Det er mere end noget andet grunden til, at det inden for
softwareudvikling nu om dage sandsynligvis løber en koldt ned af
ryggen, når blot vendingen 'ledelsesgruppe' nævnes -- selv (eller
måske især) hvis den, der hører det, selv er leder. De dage, hvor kun
programmører brokkede sig over dette mønster, er ovre;
'Dilbert'-striber hænger nu over chefers skriveborde.
Så vores svar til den traditionelle leder af softwareudvikling er
enkelt -- hvis open source-miljøet virkeligt har undervurderet værdien
af konventionel ledelse, hvorfor viser så mange af jer så foragt for
jeres egen proces?
Endnu en gang skærper eksistensen af open source-miljøet dette
spørgsmål -- for vi har det sjovt, mens vi gør det. Vores kreative leg
har skabt tekniske succeser med en markedsandel og offentligt kendskab
i et forbavsende antal. Vi beviser, at vi ikke bare kan lave bedre
software, men at glæde også er en fordel.
To et halvt år efter den første version af dette essay er den mest
banebrydende tanke, jeg kan afslutte med ikke længere en
vision om en open source-domineret software-verden; det ser for tiden,
når alt kommer til alt, ud til at være en mulighed for en masse
besindige mennesker i jakkesæt.
Jeg vil snarere foreslå, hvad der vil være en dybere lektion om
software (og måske om enhver slags kreativt og professionelt
arbejde). Mennesker er generelt glade for en opgave, når den falder i
en slags optimal udfordringszone; ikke for let til at være kedelig,
ikke for svær til at løse. En tilfreds programmør er en, der hverken
bliver udnyttet tilstrækkeligt eller tynget af dårligt formulerede mål
og stressede arbejdsprocesser. Morskab går forud for
effektivitet.
Med hensyn til din egen arbejdssituation med frygt og afsky (selv i
den fortrængte og ironiske måde i form af ophængning af
Dilbert-striber) burde derfor i sig selv betragtes som et tegn på, at
processen har fejlet. Glæde, humor og leg er sandelig en fordel; det
var ikke bare for sjov, jeg skrev 'glade horder' ovenfor, og det er
ikke mere en vittighed, at Linux' maskot er en sød, neotenisk pingvin.
Det vil måske vise sig, at en af de mest vigtige følger af open
source' succes vil være at lære os, at leg er den økonomisk mest
effektive måde at udføre kreativt arbejde på.
Dette skrift er forbedret gennem samtaler med et stort antal
mennesker, som hjalp til med at finde fejl. Især tak til Jeff Dutky (dutky@wamumd.edu),
som foreslog formuleringen 'fejlsøgning er paralleliseret', og som
hjalp med at udvikle analysen, som følger deraf. Også til Nancy
Lebovitz (nancyl@universe.digex.net) for hendes forslag om, at
jeg efterlignede Weinberg ved at
citere Kropotkin. Perspektiverende kritik kom også fra Joan Eslinger (wombat@kilimanjaro.engr.sgi.com)
og Mart Franz (marty@net-link.net) fra General Technics-postfordelingslisten.
Glen Vandenburg påpegede vigtigheden af, at bidragsyderne
selv foretager en udvælgelse, og han antydede, at megen udvikling retter op på ’udeladelsessynder’; Daniel Upper foreslog de naturlige
analogier til dette. Jeg er
taknemmelig overfor medlemmerne af PLUG, Philadelphia Linux User's
Group, der var det første testpublikum af den første offentlige
version af dette skrift. Paula Matuszek
lærte mig om ledelse inden for inden for software. Phil Hudson
mindede mig om, at den sociale organisering
af hacker-kulturen er et spejl af organiseringen af dets software
om omvendt. Endelig var Linus Torvalds' kommentarer
hjælpsomme og hans tidlige støtte meget opmuntrende.
Jeg citerede adskillige stykker fra Frederick P. Brooks klassiske 'The
Mythical Man-Month', da hans indsigter på mange måder ikke er blevet
forbedret. Jeg anbefaler varmt 25-årsudgaven fra Addison-Wesley (ISBN
0-201-83595-9), som også indeholder hans skrift fra 1986 'No Silver Bullet'.
Den nye udgave indeholder et uundværlig tilbageblik, der er skrevet 20
år senere, hvor Brooks åbent indrømmer de få fejlbedømmelser i den
originale tekst, som ikke har holdt stik. Jeg læste først
tilbageblikket efter, at dette skrift stort set var færdig, og jeg var
overrasket over, at Brooks tillægger Microsoft basar-lignende metoder
(i virkeligheden viste det sig at være forkert. I 1998 afslørede the
Halloween
Documents, at Microsofts interne udviklingsmiljø er stærkt
balkaniseret, og hvor den grad af generel adgang til kildekoden, der
skal til at understøtte en basar, ikke engang er mulig)!
Gerald M. Weinbergs 'The Psychology Of Computer Programming' (New York,
Van Nostrand Reinhold 1971) introducerede det ret uheldigt formulerede
begreb om 'jegløs programmering'. Selv om han ikke engang var i
nærheden af at være den første, der indså det nytteløse i 'princippet
om befaling', var han sikkert den første til at anerkende og tale for
pointen i direkte sammenhæng med udvikling af software.
Da Richard P. Gabriel betragtede Unix-kulturen fra før Linux-tiden,
talte han modvilligt for en primitiv basar-lignende models overlegenhed
i sit skrift 'Lisp: Good News, Bad News, and How To Win Big' fra
1989. Selv om det er forældet på nogle områder, er essayet stadig med
rette værdsat blandt fans af Lisp (mig selv inklusive). En læser
mindede mig om, at afsnittet med titlen 'Worse Is Better' kan læses
som en forudanelse om Linux. Skriftet er tilgængeligt på World Wide
Web på
http://www.naggum.no/worse-is-better.html.
De Marco og Listers 'Peopleware: Productive Projects and Teams' (New
York; Dorset House, 1987; ISBN 0-932633-05-6) er en perle, der ikke er
tilstrækkeligt værdsat, og som jeg var glad for at se Fred Brooks
citere i sit tilbageblik. Selv om kun lidt af, hvad forfatterne
skriver, er direkte anvendeligt på Linux- eller open source-miljøet,
er forfatternes indsigt i de nødvendige betingelser for kreativt
arbejde skarpsindige og værdifulde for enhver, som forsøger at bruge
nogle af basar-modellens dyder i en kommerciel sammenhæng.
Til sidst må jeg indrømme, at jeg næsten kaldte dette skrift
'Katedralen og agoraen', hvor det sidste udtryk er græsk for et åbent
marked eller offentligt mødested. De skabende skrifter 'agoric
systems' af Mark Miller og Eric Drexler, som beskriver de
markedslignende egenskaber inden for computer-økosystemer, som er ved
at opstå, hjalp mig med at tænke klart omkring analoge fænomener i
open source-kulturen, da Linux udpenslede det for mig fem år
senere. Disse skrifter er tilgængelige på nettet på
http:/www.agorics.com/agorpapers.html.
Det er en underlig fornemmelse at blive klar over, at man er med til
skabe historie...
Den 22. januar 1998, omkring 7 måneder efter jeg først havde
offentliggjort dette skrift, annoncerede Netscape Communications,
Inc. deres planer om at
frigive kildekoden til Netscape Communicator. Jeg havde ingen ide om,
at det ville ske, før jeg hørte om det.
Eric Hahn, Executive Vice President og Chief Technology Officer hos
Netscape sendte mig kort derefter følgende i en e-mail: 'På vegne af
alle i Netscape vil jeg gerne takke dig for at hjælpe os til
overhovedet at nå til dette punkt. Dine ideer og skrifter var en
fundamental inspiration til vores beslutning'.
Den efterfølgende uge fløj jeg til Silicon Valley inviteret af
Netscape til en dagslang strategikonference (den 4. februar 1998) med
nogle af deres topchefer og tekniske folk. Vi lavede sammen Netscapes
strategi for frigivelse af kildekoden og licensen.
Nogle få dage senere skrev jeg følgende:
Netscape er ved at give os en storstilet, virkelig test af
basar-modellen i den kommercielle verden. Open source-kulturen står nu
over for en fare: hvis Netscapes udførelse ikke virker, kan open
source-konceptet blive så miskrediteret, at den kommercielle verden
ikke vil forsøge det igen i det næste årti.
På den anden side er det også en spektakulær mulighed. De første
reaktioner på beslutningen på Wall Street og andre steder har været
forsigtigt positive. Vi har også fået en chance for at bevise vores
eget værd. Hvis Netscape genvinder betydelig markedsandel gennem denne
beslutning, kan det starte en revolution i software-industrien, som har
ladet vente alt for længe på sig.
Det næste år vil blive en meget lærerig og interessant tid.
Og det blev det virkelig. I midten af 1999 har udviklingen af det,
der senere blev navngivet 'Mozilla' kun været en begrænset succes.
Netscapes oprindelige mål blev nået, som var at forhindre Microsoft i
at opnå monopolstatus på browsermarkedet. Det opnåede også en vis
dramatisk succes (specielt frigivelsen af næste-generations
renderingsmaskinen Gecko).
På den anden side har det endnu ikke fremprovokeret den massive
udvikling udefra, som Mozilla-grundlæggerne oprindeligt håbede
på. Problemet synes at være, at Mozilla-distributionen i lang tid
faktisk brød en af de grundlæggende regler for udvikling under
basar-modellen: de frigav ikke noget potentielle udviklere kunne køre
og se virke (indtil mere end et år efter frigivelsen, krævede det en
licens til det proprietære Motif-bibliotek for at måtte oversætte
Mozilla fra kildekoden).
Værst er det (set fra resten af verdenens synspunkt), at
Mozilla-gruppen endnu ikke har udsendt en browser af
produktionskvalitet -- og en af projektets ledere skabte noget af en
sensation ved at droppe ud af projektet, klagende over dårlig ledelse
og manglende muligheder. 'Open source', observerede han korrekt, 'er
ikke tryllepulver'.
Og det er det ikke. Langtidsprognosen for Mozilla-projektet ser en
del bedre ud nu (i august 1999), end den gjorde i tiden omkring Jamie
Zawinskis afsked -- men han havde ret op til det punkt, at det at
frigive koden ikke nødvendigvis vil redde et eksisterende projekt, der
i forvejen lider af dårligt definerede mål, spaghetti-kode eller andre
af software-udviklingens kroniske sygdomme. Mozilla har præsteret at
give os samtidige eksempler på hvordan open source kan føre til succes
og samtidigt fejle.
I mellemtiden har open source-ideen dog haft succes og fundet
støtte andre steder. 1998 og sidste del af 1999 var der en fantastisk
eksplosion i interessen for open source-udviklingsmodellen, en trend
både drevet af og drivende Linux-operativsystemets fortsatte
succes. Den trend, Mozilla satte i gang, fortsætter nu i imponerende
fart.
[JB] I Programming Pearls
kommenterer den kendte computeraforist Jon
Bentley Brooks antagelse ved at sige 'Hvis du planlægger at smide en
væk, vil du smide to væk'. Han har næsten sikkert ret. Pointen
i Brooks og Bentleys antagelse er ikke kun, at du må forvente at
første forsøg vil gå galt, det er ofte mere effektivt, at starte forfra med den
rigtige ide end at forsøge at redde noget rod.
[QR]Der har været eksempler på open
source, basar-udvikling, der er fra før Internet-eksplosionen, og som
ikke er relateret til traditionerne omkring Unix og
Internet. Udviklingen af info-Zip-komprimeringsværktøjet
omkring 1990-1992 især til DOS-maskiner var sådan et eksempel. Et
andet var RBBS bulletin board-systemet (igen til DOS), som begyndte i
1983 og udviklede et tilstrækkeligt stærkt miljø, og der har været
temmeligt regelmæssige frigivelser op til nu (midten af 1999) på trods
af vældige teknologiske fremskridt med email og frem for alt fildeling
på lokale BBS'er. Mens info-Zip-miljøet i nogen grad brugte email, var
udviklerkulturen omkring RBBS faktisk i stand til at basere et
væsentligt online-miljø på på RBBS, som var fuldstændigt uafhængig af
TCP/IP-infrastrukturen.
[JH] John Hasler har foreslået en
interessant forklaring på det faktum, at fordobling af indsats ikke
synes at bremse open source-udvikling. Han foreslår, hvad jeg vil
kalde 'Haslers lov': omkostningerne ved dobbelt arbejde har tendens
til at vokse med mindre end kvadratet på team-størrelsen -- det vil
sige langsommere end de faste omkostninger forbundet med den
planlægning og ledelse, som ville være nødvendig for at eliminere dem.
Denne påstand er ikke i modstrid med Brooks lov. Det er måske sådan,
at de samlede faste omkostninger ved kompleksitet og sårbarhed overfor fejl vokser
med kvadratet på team-størrelsen, mens omkostningerne ved
dobbelt arbejde ikke desto mindre er et særligt tilfælde, der
vokser langsommere. Det er ikke svært at udvikle plausible grunde til
dette, startende med det utvivlsomme faktum, at det er meget lettere
at blive enige om funktionelle grænser mellem forskellige udvikleres
kode, som vil forhindre dobbelt indsats, end det er at forhindre de
forskellige uplanlagte, dårlige samspil over hele systemet, der ligger
til grund for de fleste fejl.
Kombinationen af Linus' lov og Haslers lov antyder, at der faktisk er
tre kritiske størrelsesforhold i software-projekter. I mindre
projekter (med mellem en og højst tre udviklere) behøver
ledelsesstrukturen ikke at være mere kompliceret end at udnævne en
hovedprogrammør. Og der er en mellemgruppe derover, hvor
omkostningerne ved traditionel ledelse er relativt lave, så fordelene
ved at undgå dobbelt arbejde, fejlfinding og overvågning, så detaljer
ikke overses, er en netto fordel.
Men derover betyder kombinationen af Linus' lov og Haslers lov, at
omkostningerne og problemerne i traditionelt ledet store
projektgrupper stiger meget hurtigere end den forventede omkostning
ved dobbelt indsats. Ikke mindst består en del af omkostningen af en
strukturelt bestemt manglende evne til at udnytte effekten af mange
øjne, der (som vi har set) meget bedre end traditionel ledelse sikrer,
at fejl og detaljer ikke overses. I store projekter er det således
kombinationen af disse love, der effektivt får nettogevinsten ved
traditionel ledelse til at gå mod nul.
[HBS] Opsplitningen i Linux'
eksperimentelle og stabile versioner har en anden funktion, som er
beslægtet med, men alligevel forskellig fra sikring mod
risici. Opsplitningen bekæmper et andet problem: de farlige
tidsfrister. Når programmører skal opfylde en uforanderlig
facilitets-liste og nå en fastsat definitiv deadline, går kvaliteten
tabt, og der er sandsynligvis et stort rod på vej. Jeg er taknemmelig
overfor Marco Iansiti og Allan MacCormack fra Harvard Business School,
som gjorde mig opmærksom på, at planlægningen kan lykkes, hvis der
slækkes på et af disse krav.
En måde at gøre dette på er at fastholde fristen men lade
facilitets-listen være fleksibel og fjerne faciliteter, hvis de ikke er
færdige inden fristen udløber. Det er i grunden strategien for den
'stabile' udviklingsgren af kernen; Alan Cox (der vedligeholder den
stabile kerne) sender frigivelser ud med ret jævnlige intervaller men
garanterer ikke, hvornår specifikke fejl vil være rettet, eller
hvornår faciliteter fra den eksperimentelle kerne implementeres i den
stabile.
Den anden måde at gøre dette er at fastsætte en ønskelig
facilitets-liste og først levere, når det er lavet. Det er i grunden
strategien for den 'eksperimentelle' udviklingsgren. De Marco og Lister
citerede forskning, der viste, at denne planlægningspolitik ('væk mig,
når arbejdet er udført') ikke bare giver den bedste kvalitet men i
gennemsnit kortere afleveringstider end enten 'realistisk' eller
'aggressiv' planlægning.
Jeg er begyndt at tro (i starten af 2000), at jeg i tidligere udgaver
af dette dokument alvorligt undervurderede vigtigheden af 'væk mig,
når arbejdet er udført' anti frist-politikken for open source-miljøets
produktivitet og kvalitet. Den generelle erfaring fra den forcerede
GNOME 1.0 i 1999 antyder, at pres for en for tidlig frigivelse kan
neutralisere mange af kvalitetsfordelene, som open source normalt
giver.
Det kan meget vel vise sig, at den gennemskuelige proces inden for
open source er en af tre ligeværdige drivkræfter bag kvaliteten sammen
med 'væk mig, når arbejdet er udført'-planlægning og selvudvælgelse
blandt udviklere.
[IN] Det er et emne beslægtet med
spørgsmålet, om man kan starte projekter fra bar bund efter
basar-metoden, hvorvidt basar-metoden er i stand til at understøtte
virkeligt innovativt arbejde. Nogle hævder, at da basaren mangler
stærkt lederskab, kan den kun håndtere kloningen og forbedringen af
ideer, der allerede findes i produktion, men ikke er i stand til at
være markedsførende. Dette argument blev måske mest berygtet fremsat i
the Halloween
Documents, to pinlige, interne Microsoft-notater skrevet om open
source-fænomenet. Forfatterne sammenlignede Linux' udvikling af et
Unix-lignende operativsystem med at 'løbe efter biler' og hævdede, at
'(når et projekt har opnået 'paritet' med de markedsførende) bliver
det nødvendige behov for ledelse massivt for blive i stand til at
bryde igennem nye grænser'.
Der er alvorlige faktuelle fejl indeholdt i dette argument. En viser
sig, da Halloween-forfatterne senere selv bemærker, at 'ofte [...] er
nye forskningsideer først implementeret og tilgængelige på Linux, før
de er tilgængelige/indarbejdede på andre platforme'.
Hvis vi læser 'open source' i stedet for 'Linux', ser vi, at dette
langt fra er et nyt fænomen. Historisk set opfandt open source-miljøet
ikke Emacs, World Wide Web eller Internet ved at løbe efter biler
eller ved at blive massivt ledet -- og i nutiden foregår der så meget
innovativt arbejde inden for open source, at man er forkælet i sit
valg. GNOME-projektet (for at vælge et af mange) flytter grænser for
GUI og objektorienteret teknologi så voldsomt, at det har tiltrukket
sig opmærksomhed i såvel computerbladene som uden for
Linux-miljøet. Der er talrige andre eksempler, som et besøg når som
helst på Freshmeat hurtigt vil
vise.
Men der er mere fundamentale fejl i den implicitte antagelse, at
katedral-modellen (eller basar-modellen eller en hvilken som
helst anden ledelsesstruktur) på en eller anden måde kan gøre
innovativ skabelse pålidelig. Det er nonsens. Grupper får ikke
gennembrydende indsigt -- selv frivillige grupper af basar-anarkister er
sædvanligvis ikke i stand til at være ægte originale, endnu mindre er
folk i arbejdsgrupper, der har overlevelsesinteresse i et status quo
ante. Indsigt kommer fra individer. Det eneste, det sociale
maskineri omkring dem kan håbe på at gøre, er at være lydhøre
over for gennembrydende indsigter -- at nære, belønne og grundigt
teste dem i stedet for at undertrykke dem.
Nogle vil karakterisere dette som et romantisk synspunkt, en
tilbagevenden til gammeldags stereotyper med ensomme opfindere. Det er
det ikke; jeg påstår ikke, at grupper er ude af stand til at
udvikle gennembrydende indsigter, når de er udklækket; vi har
faktisk lært af processen med gennemgang blandt ligemænd, at
sådanne udviklingsgrupper er essentielle for at kunne producere et
resultat af høj kvalitet. Snarere påpeger jeg, at alle sådanne
udviklingsgrupper starter med -- er nødvendigvis sat i gang af -- en
god ide i en persons hoved. Katedraler, basarer og andre sociale
strukturer kan opfange indsigten og raffinere den, men de kan ikke
frembringe den på kommando.
Derfor er grundproblemet med innovation (inden for software og alle
andre steder) især hvordan man undgår at undertrykke det -- men endnu
mere fundamentalt hvordan man producerer masser af folk, der
overhovedet kan få indsigten i første omgang.
Det vil være absurd at antage, at udvikling efter katedral-metoden kan
udføre dette trick, mens basarens lave adgangskrav og flydende
processer ikke kan. Hvis det kræver en person med en god ide, så vil
et socialt miljø, hvor en person lynhurtigt kan tiltrække hundreder
eller tusinder af andre i et samarbejde om den gode ide, uundgåeligt
være mere innovativt end et miljø, hvor personen skal igennem et
politisk salgsarbejde i hierakiet, inden han kan arbejde på sin ide
uden at risikere at blive fyret.
Og især, hvis vi ser historisk på innovation inden for software i
organisationer, der anvender katedral-modellen, opdager vi hurtigt, at
det er sjældent. Store virksomheder binder an på universitetsforskning
for at få nye ideer (derfor er forfatterne af Halloween Documents
utrygge ved Linux' evne til at supplere sig selv med forskning
hurtigere). Eller de overtager små firmaer opstået omkring en
innovators hjerne. I ingen af tilfældene sker innovationen kun under
katedral-kulturen; faktisk ender mange innovationer, der er importeret
på den måde, med at blive kvalt af 'det massive ledelsesniveau', som
forfatterne til Halloween Document lovpriser.
Det er dog en negativ pointe. Læseren vil være bedre tjent med en
positiv pointe. Jeg foreslår følgende som et eksperiment:
- Vælg et kriterie for originalitet, som du mener, du kan bruge konsekvent. Hvis din definition er 'jeg ved det, når jeg ser det', erdet ikke noget problem for hensigten med denne test.
- Vælg et hvilket som helst operativsystem med lukket kildekode, der konkurrerer med Linux, og vælg den bedste kilde til information om igangværende udviklingsarbejde.
- Hold øje med den kilde og Freshmeat i en måned. Tæl hver dag antallet af meddelelser om frigivelser, som du betragter som 'originalt' arbejde. Anvend den samme definition på meddelelser om det andet operativsystem og tæl også dem.
- Opsummer og sammenlign tredive dage senere.
Den dag, jeg skrev dette, var der toogtyve meddelelser om frigivelser
på Freshmeat, hvoraf tre virker som om, de vil være banebrydende på en
eller anden måde. Det var en sløv dag på Freshmeat, men jeg vil blive
forbavset, hvis nogen læser rapporterer om tre potentielle
innovationer på en måned fra en kilde til lukket kildekode.
[EGCS] Vi kender nu et projekt, som på
mange måder kan give os en bedre test af basar-præmissen end Fetchmail;
EGCS, det Eksperimentelle GNU
Oversættersystem.
Dette projekt blev lanceret i midten af august 1997 som et bevidst
forsøg at anvende ideerne fra de tidlige offentlige versioner af
'Katedralen og basaren'. Stifterne af projektet mente, at udviklingen
af GCC, GNUs C-oversætter, var stagneret. I de efterfølgende tyve
måneder fortsatte GCC og EGCS som parallelle projekter -- begge trak
på den samme gruppe af udviklere på Internet, begge startede med den
samme GCC kodebasis, begge brugte stort set de samme Unix-værktøjer og
udviklingsmiljøer. Projekterne adskilte sig kun derved, at EGCS bevidst
prøvede at anvende basar-taktikkerne, jeg tidligere havde beskrevet,
mens GCC beholdte en mere katedral-lignende organisation med en lukket
udviklergruppe og sjældne frigivelser.
Det var omtrent så tæt på et kontrolleret eksperiment, som man kunne
håbe på, og resultaterne var dramatiske. I løbet af få måneder var
EGCS kommet væsentligt foran med hensyn til faciliteter; bedre
optimering, bedre understøttelse af FORTRAN og C++. Mange mennesker
synes, at EGCS' udviklingsudgave var mere pålidelig end den seneste
stabile version af GCC, og store Linux-distributioner begyndte at
skifte til EGCS.
I april 1999 opløste Free Software Foundation (den officielle
sponsor for GCC) den originale GCC-udviklingsgruppe og overrakte
officielt kontrollen med projektet til EGCS-styringsgruppen.
[SP] Selvfølgelig rejser Kropotkins
kritik og Linus' lov nogle bredere spørgsmål om den social
organisations kybernetik. Et andet folkeligt teorem om
softwareudvikling antyder en af dem; Conways lov -- der normalt lyder
'Hvis du har fire grupper, der hver arbejder på en oversætter, vil du
få en oversætter med fire gennemløb'. Den originale fremstilling var
mere generel: 'Organisationer, som designer systemer, er begrænsede
til at lave designs, der er kopier af kommunikationsstukturen i disse
organisationer'. Vi kan udtrykke det mere koncist som: 'Midlerne
afgører resultaterne' eller endda 'Proces bliver til produkt'.
Det er derfor værd at bemærke, at organisationsform og funktion i open
source-miljøet matcher på mange niveauer. Netværket er alt og over
alt: ikke bare Internet, men menneskene, der udfører arbejdet, skaber
et distribueret, løst forbundet netværk af ligemænd, som bidrager med
en mangfoldighed af redundans, og som opløses uden problemer. I begge
netværk er hver enkelt enhed kun vigtig i det omfang, at andre enheder
vil samarbejde med den.
Gennemgang blandt ligemænd er essentiel for miljøets
forbavsende produktivitet. Kropotkins pointe om magtforhold er
videreudviklet i SNAFU-princippet: 'Ægte kommunikation er kun
mulig mellem ligemænd, fordi underordnede mere konsekvent bliver
belønnet for at fortælle deres overordnede behagelige løgne end for at
fortælle sandheden'. Kreativt teamwork er fuldstændigt afhængigt af
ægte kommunikation og er således alvorligt hæmmet af tilstedeværelsen
af magtforhold. Open source-miljøet, der effektivt er fri for sådanne
magtforhold, lærer os på den anden side, hvor forfærdelig meget de
koster i fejl, nedsat produktivitet og mistede muligheder.
Desuden forudsiger SNAFU-princippet en progressiv adskillelse i
autoritative organisationer mellem beslutningstagere og virkeligheden
efterhånden som flere og flere input til dem, der beslutter, har
tendens til at blive behagelige løgne. Det er let at se hvordan,
dette foregår på inden for
konventionel udvikling af software; der er stærke
tilskyndelser for de underordnede til at skjule, ignorere og minimere
problemerne. Når denne proces bliver produkt, er software en
katastrofe.