Release Early, Release Often

Julkaise aikaisin, julkaise usein


Early and frequent releases are a critical part of the Linux development model. Most developers (including me) used to believe this was bad policy for larger than trivial projects, because early versions are almost by definition buggy versions and you don't want to wear out the patience of your users.

Olennainen osa Linuxin kehittämismallia on tapa julkaista uusia versioita jo varhaisessa vaiheessa ja usein. Aiemmin uskoin muiden ohjelmistokehittäjien tapaan, että se sopisi vain yksinkertaisiin projekteihin, koska käytännössä aina ohjelmien alkuversiot sisältävät virheitä, eikä käyttäjien kärsivällisyyttä ole syytä koetella.

-Voisiko olla "koska ohjelmien alkuversiot" sijaan "koska aikaiset ohjelmaversiot" -"Melkein määritelmän mukaan" kankea suora käännös alkuperäisestä, "käytännössä aina" sopinee tähän (JarkkoIH)


This belief reinforced the general commitment to a cathedral-building style of development. If the overriding objective was for users to see as few bugs as possible, why then you'd only release a version every six months (or less often), and work like a dog on debugging between releases. The Emacs C core was developed this way. The Lisp library, in effect, was not—because there were active Lisp archives outside the FSF's control, where you could go to find new and development code versions independently of Emacs's release cycle [QR].

Tämä käsitys vahvisti pitäytymistä ohjelmistokehityksen katedraalimalliin. Jos päämääränä on suojella käyttäjiä ohjelmavirheiltä, silloin uusia versioita tulisi julkaista vain puolen vuoden välein tai vielä harvemmin. Väliajat saisi sitten raataa kuin muuli virheitä korjaten. Emacsin C-kielinen ydin kehitettiin näin. Lisp-kirjaston kehityksessä niin ei toimittu, sillä tarjolla oli Free Software Foundationin ulkopuolisia Lisp-arkistoja. Niistä saattoi löytää uusia ja kehitettävänä olevia versioita riippumatta Emacsin aikataulusta [QR].

[QR]? -Tämä viittaa huomautuksiin, joka on kirjan lopussa.


The most important of these, the Ohio State Emacs Lisp archive, anticipated the spirit and many of the features of today's big Linux archives. But few of us really thought very hard about what we were doing, or about what the very existence of that archive suggested about problems in the FSF's cathedral-building development model. I made one serious attempt around 1992 to get a lot of the Ohio code formally merged into the official Emacs Lisp library. I ran into political trouble and was largely unsuccessful.

Arkistoista merkittävin oli Ohion osavaltion yliopiston Emacs Lisp -arkisto. Se enteili nykypäivän suurten Linux-arkistojen henkeä ja ominaisuuksia. Vain harva meistä kuitenkaan ajatteli sen vakavammin mitä olimme tekemässä, tai mitä merkitystä arkistolla voisi olla FSF:n katedraalityylisen kehitysmallin ongelmien kannalta. Itse yritin tosissani vuoden 1992 tienoilla liittää valtaosan Ohion koodista viralliseen Emacs Lisp-kirjastoon. Siitä syntyi mielipide-eroja, eikä hanke onnistunut.

Ohio State = osavaltion yliopisto! Linux-kielessä ihmisten välisiä turhanpäiväisiä nahinoita sanotaan poliittisiksi ongelmiksi, mutta väärinkäsitysten välttämseksi ohessa 'poliittinen ongelma' on käännetty mielipide-eroiksi. - Jopi.

Mikä Linux-arkisto?! - rhk


But by a year later, as Linux became widely visible, it was clear that something different and much healthier was going on there. Linus's open development policy was the very opposite of cathedral-building. Linux's Internet archives were burgeoning, multiple distributions were being floated. And all of this was driven by an unheard-of frequency of core system releases.

Vain vuotta myöhemmin Linux sai laajaa näkyvyyttä. Jotain uutta ja tervettä oli viriämässä. Linuksen avoin kehitystyyli oli vastakohta katedraalin rakentamiselle. Linuxin internet-arkistot kehittyivät harppauksin, ja useita jakeluversioita laskettiin liikkeelle. Kaikkea tätä vei eteenpäin ennenkuulumattoman ripeä järjestelmän ytimen julkaisutahti.


Linus was treating his users as co-developers in the most effective possible way:

Linus kohteli käyttäjiään tehokkaimmalla mahdollisella tavalla, ohjelmistokehittäjinä:


7. Release early. Release often. And listen to your customers.

7. Julkaise aikaisin. Julkaise usein. Ja kuuntele asiakkaitasi.

Alla kommentti varhaisempaan versioon: -Jopi.

(Eiko olisi parempi käyttää tässäkin suomennosta "Julkaise aikaisin", kuten luvun otsikossakin on käytetty.)

Vaihdettu.


Linus's innovation wasn't so much in doing quick-turnaround releases incorporating lots of user feedback (something like this had been Unix-world tradition for a long time), but in scaling it up to a level of intensity that matched the complexity of what he was developing. In those early times (around 1991) it wasn't unknown for him to release a new kernel more than once a day! Because he cultivated his base of co-developers and leveraged the Internet for collaboration harder than anyone else, this worked.

Uutta Linuksen toiminnassa ei ollut, että hän julkaisi käyttäjien palautteen perusteella äkkikäännöksiä sisältäviä versioita nopeasti, sillä niin oli toimittu jo pitkään Unix-maailmassa. Linus kiihdytti prosessin intensiteetin tasolle, joka vastasi hänen kehittämänsä järjestelmän monimutkaisuuden tarpeita. Pioneerikaudella vuoden 1991 paikkeilla ei ollut mitenkään ainutkertaista häneltä julkaista uusi ydin useita kertoja päivässä! Koska hän keräsi ympärilleen suuren joukon muita kehittäjiä ja käytti internetin mahdollisuuksia yhteistyöhön sinnikkäämmin kuin kukaan muu, tämä toimi.


But how did it work? And was it something I could duplicate, or did it rely on some unique genius of Linus Torvalds?

Mutta miten prosessi toimi? Voisinko itse päästä samanlaisiin tuloksiin, vai oliko kaikki kiinni jostain Linus Torvaldsin ainutlaatuisen nerokkaasta piirteestä?


I didn't think so. Granted, Linus is a damn fine hacker. How many of us could engineer an entire production-quality operating system kernel from scratch? But Linux didn't represent any awesome conceptual leap forward. Linus is not (or at least, not yet) an innovative genius of design in the way that, say, Richard Stallman or James Gosling (of NeWS and Java) are. Rather, Linus seems to me to be a genius of engineering and implementation, with a sixth sense for avoiding bugs and development dead-ends and a true knack for finding the minimum-effort path from point A to point B. Indeed, the whole design of Linux breathes this quality and mirrors Linus's essentially conservative and simplifying design approach.

Luullakseni ei. Taatusti Linus on pahuksen loistava hakkeri. Kuinka moni meistä pystyy rakentamaan kokonaisen tuotantokäyttöön sopivan käyttöjärjestelmän ytimen? Linux ei kuitenkaan ollut aivan ällistyttävä käsitteellinen loikka. Linus ei ole (ainakaan vielä) sellainen nerokkaan innovatiivinen ohjelmistosuunnittelija kuin Richard Stallman tai James Gosling (NeWSin ja Javan kehittäjä). Sen sijaan Linus on ainakin minusta insinööritaidon ja soveltamisen mestari. Hänellä tuntuu olevan jonkinlainen kuudes aisti, jolla hän välttää ohjelmointivirheitä ja umpikujia. Sen lisäksi hänellä on kyky löytää suorin reitti pisteestä A pisteeseen B. Todellakin, koko Linuxin kehitys huokuu näitä Linuksen ominaispiirteitä ja heijastaa hänen pohjimmiltaan perinteistä, yksinkertaisuuteen pyrkivää toimintatapaansa.

mitenkähän tuo engineering pitäisi kääntää? rakentaminen? Muuttaisin "koko Linuxin kehitys huokuu tätä laatua" muotoon "koko Linuxin kehitysmalli huokuu tätä laatua".


So, if rapid releases and leveraging the Internet medium to the hilt were not accidents but integral parts of Linus's engineering-genius insight into the minimum-effort path, what was he maximizing? What was he cranking out of the machinery?

Mutta mitä Linus oikein tavoitteli, jos nopea julkaisutahti ja internetin täysimääräinen hyödyntäminen eivät olleet sattumalta muotoutuneita työtapoja vaan keskeisiä keinoja, joiden avulla tuo ohjelmistotekniikan nero etsi mahdollisimman nopeita reittejä versiosta toiseen? Mitä hyötyä hän tavoitteli prosessista?

viimeinen lause sisältää pienen sanaleikin :) Sanatarkemmin olisi muodossa "Mitä hän oli suoltanut ulos tuosta koneistosta?"


Put that way, the question answers itself. Linus was keeping his hacker/users constantly stimulated and rewarded—stimulated by the prospect of having an ego-satisfying piece of the action, rewarded by the sight of constant (even daily) improvement in their work.

Kysymyksestä voi päätellä vastauksen. Linus piti hakkeri-käyttäjät jatkuvasti innostuneina palkitsemalla ja innostamalla. He saivat kokea egoa hivelevää mielihyvää osallistumisesta tärkeään työhön. Heitä palkittiin sillä, että he näkivät työnsä tuloksen kehittyvän jatkuvasti, joskus jopa päivittäin.


Linus was directly aiming to maximize the number of person-hours thrown at debugging and development, even at the possible cost of instability in the code and user-base burnout if any serious bug proved intractable. Linus was behaving as though he believed something like this:

Linuksen tavoitteena oli maksimoida virheiden korjaamiseen ja kehitystyöhön käytettyjen työtuntien määrä silläkin uhalla, että koodista tulisi epävakaata tai että käyttäjät uupuisivat, jos jokin bugi osoittautuisi liian vaikeaksi korjattavaksi. Linus toimi ikään kuin olisi ajatellut seuraavaan tapaan:

"Linus tähtäsi kehitys- ja virheidenpoistamis-työtuntien maksimointiin jopa mahdollisen koodin epävakauden ja käyttäjien loppuunpalamisen kustannuksella..."


8. Given a large enough beta-tester and co-developer base, almost every problem will be characterized quickly and the fix obvious to someone.

8. Jos beta-testaajia ja ohjelmistokehittäjiä on tarpeeksi, miltei kaikki ongelmat jäsentyvät nopeasti ja joku löytää ratkaisun.


Or, less formally, "Given enough eyeballs, all bugs are shallow." I dub this: "Linus's Law".

Toisin sanoen, kun silmäpareja on tarpeeksi, kaikki ohjelmistovirheet ovat pinnallisia. Kutsun tätä "Linuksen laiksi".

Järkyttävän köpö tuli tuosta vähemmän muodollisesta Linusin laista: "Kun on riittävästi silmämunia, kaikki ohjelmointivirheet ovat pinnallisia" ... "Miljoonan ihmisen katsellessa kaikki bugit ovat pinnallisia" - http://www.digitoday.fi/tietoturva/2008/07/11/unix-virheelle-kertyi-ikaa-33-vuotta/200818262/66 Ehdotus: "Kunhan tarpeellinen määrä silmiä valvoo (työtä), ei yksikään virhe (bugi; vrt. "kivi") jää kääntämättä (paljastumatta)" 5.12.2008 (JP)

--nyt on taasen parempi (15.1.2009)


My original formulation was that every problem "will be transparent to somebody". Linus demurred that the person who understands and fixes the problem is not necessarily or even usually the person who first characterizes it. "Somebody finds the problem," he says, "and somebody else understands it. And I'll go on record as saying that finding it is the bigger challenge." That correction is important; we'll see how in the next section, when we examine the practice of debugging in more detail. But the key point is that both parts of the process (finding and fixing) tend to happen rapidly.

Alkujaan muotoilin asian niin, että jokainen ongelma "on jollekulle läpinäkyvä". Linuksen mukaan henkilö, joka ymmärtää ja korjaa ongelman ei välttämättä tai useinkaan ole se, joka ensimmäisenä paikallisti ongelman. "Joku havaitsee ongelman" hän toteaa, "ja joku toinen ymmärtää sen. Sanoisin harkitusti, että havaitseminen on suurempi haaste". Tämä tarkennus on tärkeä, ja seuraavassa kappaleessa näemme miksi, kun tutkimme virheiden hakua ja korjaamista tarkemmin. Tärkeintä on, että prosessin kumpikin osa, virheiden löytyminen ja korjaaminen, saadaan toimimaan nopeasti.


In Linus's Law, I think, lies the core difference underlying the cathedral-builder and bazaar styles. In the cathedral-builder view of programming, bugs and development problems are tricky, insidious, deep phenomena. It takes months of scrutiny by a dedicated few to develop confidence that you've winkled them all out. Thus the long release intervals, and the inevitable disappointment when long-awaited releases are not perfect.

Käsitykseni mukaan perustava ero katedraalityylin ja basaarityylin välillä kiteytyy Linuksen laissa. Katedraalin ohjelmoija näkee virheet ja kehitysongelmat hankalina, salakavalina ja syvää ymmärrystä vaativina ilmiöinä. Asialleen omistautuneelta ryhmältä kestää kuukausia päästä varmuuteen siitä, että kaikki virheet on eliminoitu. Versioiden pitkät julkaisuvälit johtuvat tästä, samoin väistämätön pettymys, kun pitkään odotettu uusi versio ei olekaan täydellinen.


In the bazaar view, on the other hand, you assume that bugs are generally shallow phenomena—or, at least, that they turn shallow pretty quickly when exposed to a thousand eager co-developers pounding on every single new release. Accordingly you release often in order to get more corrections, and as a beneficial side effect you have less to lose if an occasional botch gets out the door.

Basaarin näkökulmasta ohjelmointivirheet oletetaan sitä vastoin pinnallisiksi ongelmiksi, tai ainakin niiden uskotaan tulevan pinnallisiksi nopeasti, kun tuhat innokasta kehittäjää syynää jok'ikistä uutta versiota. On järkevää tuottaa uusia versioita tiheään tahtiin, jotta saadaan paljon korjauksia koodiin. Hyödyllinen sivuvaikutus on, että syntyy vähemmän vahinkoa, jos sattuukin tekemään jossain versiossa möhläyksiä.

"...kun joka ainoa uusi julkaisu altistetaan tuhannelle innokkaalle kehittäjälle rusikoitavaksi."


And that's it. That's enough. If "Linus's Law" is false, then any system as complex as the Linux kernel, being hacked over by as many hands as the that kernel was, should at some point have collapsed under the weight of unforseen bad interactions and undiscovered "deep" bugs. If it's true, on the other hand, it is sufficient to explain Linux's relative lack of bugginess and its continuous uptimes spanning months or even years.

Siinäpä se. Se riittää. Jos "Linuksen Laki" on väärässä, silloin mikä tahansa monimutkainen järjestelmä, jota hakkeroidaan isolla joukolla, kuten Linuxin ydin, romahtaa jossain vaiheessa ennalta aavistamattomien riippuvuuksien ja havaitsematta jääneiden syvällisten ohjelmavirheiden painosta. Jos taas laki pitää paikkansa, se riittää selittämään, miksi Linuxissa on suhteellisen vähän bugeja ja miksi Linux-järjestelmien yhtäjaksoiset käynnissäoloajat voivat venyä kuukausiin ja jopa vuosiin.


Maybe it shouldn't have been such a surprise, at that. Sociologists years ago discovered that the averaged opinion of a mass of equally expert (or equally ignorant) observers is quite a bit more reliable a predictor than the opinion of a single randomly-chosen one of the observers. They called this the Delphi effect. It appears that what Linus has shown is that this applies even to debugging an operating system—that the Delphi effect can tame development complexity even at the complexity level of an OS kernel. [CV]

Ehkä sen ei edes olisi pitänyt olla yllätys. Jo vuosia sitten sosiologit havaitsivat ns. Delfoi-ilmiön. Sen mukaan suuren, yhtä pätevistä (tai epäpätevistä) henkilöistä kootun joukon yhteinen mielipide on selvästi luotettavampi kuin yksittäisen jäsenen käsitys. Linus näyttää osoittaneen, että tämä ilmiö toimii myös käyttöjärjestelmien virheiden korjaamisessa. Eli Delfoi-ilmiö tekee mahdolliseksi hallita niinkin monimutkaista prosessia kuin käyttöjärjestelmän ytimen kehitystä. [CV]

Delphi-sana tulee kreikasta, suomeksi se on Delfoi. - Jopi


One special feature of the Linux situation that clearly helps along the Delphi effect is the fact that the contributors for any given project are self-selected. An early respondent pointed out that contributions are received not from a random sample, but from people who are interested enough to use the software, learn about how it works, attempt to find solutions to problems they encounter, and actually produce an apparently reasonable fix. Anyone who passes all these filters is highly likely to have something useful to contribute.

Delfoi-efektin rinnalla Linuxin kehitystyötä edistää se, että osallistujat ovat hakeutuneet projekteihin vapaaehtoisesti. Erään varhaisen osallistujan mukaan työssä mukana olevat henkilöt ovat kiinnostuneita kehittämänsä ohjelman käytöstä, haluavat oppia kuinka se toimii, koettavat löytää ratkaisuja kohtaamiinsa ongelmiin ja usein jopa tuottavat varsin järkeviä ratkaisuja. Kuka tahansa joka täyttää edellä mainittuja ehtoja pystyy todennäköisesti tekemään jotain hyödyllistä.

Alla kommentti aiempaan versioon. - Jopi

Respondent? Jätin pois, en ymmärtänyt viittausta. --pilkoin lauseita oikein urakalla.


Linus's Law can be rephrased as "Debugging is parallelizable". Although debugging requires debuggers to communicate with some coordinating developer, it doesn't require significant coordination between debuggers. Thus it doesn't fall prey to the same quadratic complexity and management costs that make adding developers problematic.

Linuksen laki voidaan muotoilla myös seuraavasti: "Virheenkorjaus voidaan rinnakkaistaa." Vaikka virheiden korjaaminen vaatii kommunikointia työtä vetävän kehittäjän kanssa, paljoakaan vuorovaikutusta ei tarvita eri korjaajien välillä. Työ ei kärsi sellaisesta toiseen potenssiin kasvavasta monimutkaisuudesta ja hallintokulujen kasvusta, joka tavallisesti tekee kehittäjien määrän lisäämisen ongelmalliseksi.


In practice, the theoretical loss of efficiency due to duplication of work by debuggers almost never seems to be an issue in the Linux world. One effect of a "release early and often" policy is to minimize such duplication by propagating fed-back fixes quickly [JH].

Rinnakkain tehty virheenkorjaus ei näytä aiheuttavan merkittävästi päällekkäistä työtä Linux-maailmassa. "Julkaise aikaisin, julkaise usein" -kehitysmalli onkin omiaan minimoimaan päällekkäisyyksiä, sillä julkaisua seuranneen palautteen perusteella tehdyt korjaukset levitetään eteenpäin nopeasti [JH].

Jos on siten sovittu, että debuggaus on sana suomen kielessä, niin eletään sitten sen mukaisesti.


Brooks (the author of The Mythical Man-Month) even made an off-hand observation related to this: "The total cost of maintaining a widely used program is typically 40 percent or more of the cost of developing it. Surprisingly this cost is strongly affected by the number of users. More users find more bugs." [emphasis added].

Fred Brooks, The Mythical Man-Month -kirjan kirjoittaja, arvioi virheenkorjauksen kustannuksia seuraavasti: "Laajasti käytetyn ohjelman ylläpitokustannukset ovat tyypillisesti vähintään 40 prosenttia ohjelman kehityskustannuksista. Käyttäjien lukumäärä vaikuttaa yllättävän paljon ylläpitokustannuksiin. Mitä enemmän on käyttäjiä, sitä enemmän havaitaan bugeja."

Suomessa ei sukunimi riitä, tarvitaan myös etunimi. Alla jonkun aiempi kommentti. - Jopi.

Bugin voisi korvata ohjelmointivirheellä.


More users find more bugs because adding more users adds more different ways of stressing the program. This effect is amplified when the users are co-developers. Each one approaches the task of bug characterization with a slightly different perceptual set and analytical toolkit, a different angle on the problem. The "Delphi effect" seems to work precisely because of this variation. In the specific context of debugging, the variation also tends to reduce duplication of effort.

Iso käyttäjäjoukko havaitsee enemmän virheitä, koska käyttäjien määrän kasvaessa ohjelmaa koetellaan yhä uusilla tavoilla. Jos käyttäjät ovat samalla apukehittäjiä, ilmiö vain vahvistuu. Jokainen käyttäjä-kehittäjä jäsentää ongelmaa omasta näkökulmastaan ja omilla analyyttisilla työkaluillaan. Delfoi-efekti näyttää perustuvan juuri näihin eroihin. Virheiden korjaamisessa käyttäjien väliset erot vähentävät päällekkäistä työtä.

Ei tullut hyvä. Delphi-efekti kuten yllä, onko se sitten hyvä vai huono. Muuttaisin "Erityisesti virheenjäljittämisen yhteydessä tällä variaatiolla on tapana vähentää työpanoksen moninkertaistumista".


So adding more beta-testers may not reduce the complexity of the current "deepest" bug from the developer's point of view, but it increases the probability that someone's toolkit will be matched to the problem in such a way that the bug is shallow to that person.

Beta-testaajien määrän kasvu ei vähennä hankalimpiin virheisiin liittyviä vaikeuksia kehittäjän näkökulmasta, mutta se lisää todennäköisyyttä että jollekulle heistä ongelma on helposti ratkaistavissa.


Linus coppers his bets, too. In case there are serious bugs, Linux kernel version are numbered in such a way that potential users can make a choice either to run the last version designated "stable" or to ride the cutting edge and risk bugs in order to get new features. This tactic is not yet systematically imitated by most Linux hackers, but perhaps it should be; the fact that either choice is available makes both more attractive. [HBS]

Myös Linus pelaa varman päälle. Vakavien ohjelmavirheiden varalta Linux-ytimen versiot numeroidaan niin, että käyttäjät voivat valita vakaaksi nimetyn ja viimeisimmän, uusimmatkin ominaisuudet sisältävän version välillä. Kaikki Linux-kehittäjät eivät seuraa tätä menettelyä vaikka heidän ehkä pitäisi: vakaan ja uusimman version olemassaolo lisää molempien vaihtoehtojen kiinnostavuutta. [HBS]

"Copper one's bets" tarkoittaa yleensä asettamansa vedon muuttamista päinvastaiseksi, ks. http://en.wikipedia.org/wiki/Faro_(card_game). Tässä kirjoittaja näyttää tarkoittavan ilmauksella, että Linus tarjoaa käyttäjille mahdollisuuden vähentää koodinsa käyttämisen riskiä. - Jopi

Kuka tuntee tämän idiomin? "coppers his bets". "Kuparoi panoksensa" ei kyllä toimi suomeksi noin, ei millään (samaa sarjaa kuin "seison korjattuna"); käänsin "coppers his bets" asettaa panoksensa (on jokin pelitermi, jossa onnella on roolinsa) "Linus myös pelaa varman päälle"? -> muutettu --rhk [HBS] viite lähteisiin

Tähän voisi lisätä selvityksen mitä tarkoitetaan tällä versionumerojutulla (parilliset/parittomat)


Katedraali ja basaari: Luku4 (last edited 2009-05-15 22:36:44 by JarkkoIH)