Unix odrasta

Kako je birokracija patentnog odjela Bell Labsa nehotice sponzorirala operacijski sustav koji danas kuca u tvom terminalu.

poglavlje 1/2719 min čitanja1970 – 1980

Godina je 1970., ili tu negdje, i svijet je, iskreno, malo na rubu. U Vijetnamu se rat vuče kao loša serija koju nitko ne otkazuje, Nixon sjedi u Bijeloj kući i govori o miru s časti dok bombarderi i dalje lete, a u travnju te godine dvadesetak milijuna Amerikanaca izađe na ulice i proglasi prvi Dan planeta Zemlje — kao da se čovječanstvo odjednom sjetilo da ima samo jednu kuglu za stanovati i da bi je možda trebalo malo manje gaziti. Sve je to veliko, glasno, na naslovnicama.

U New Jerseyu, u zgradi koja izgleda kao da je arhitekt zamislio budućnost pa onda pretjerao s betonom, hodnicima Bell Labsa šeta posve druga vrsta ljudi. Dugokosi, u sandalama, s bradama kakve bi majke prijavile policiji. Netko svira gitaru u laboratoriju u pola tri ujutro. Netko drugi programira igru Space Travel na skupom, gotovo svetom stroju — samo zato što može. Bell Labs je, teoretski, dio ozbiljne telefonske korporacije — AT&T, monopol koji plaća račune milijunima Amerikanaca — a praktično je najveći dnevni boravak za genijalce koje nitko ne smije prekinuti dok razmišljaju.

A računala u ovom trenutku – ne zaboravi to, jer je ključno za sve što slijedi – nisu ono što danas zamišljaš pod tom riječi. Računalo je institucija. Stoji u klimatiziranoj sobi, iza staklenih vrata, čuva ga netko u sivom mantilu, i zauzima cijele katove zgrade. Da mu se obratiš, moraš dobiti dozvolu, stati u red čekanja, ponekad ispuniti i formular u tri primjerka. Kompanije koje ih prave – IBM na vrhu, veličanstven i nedodirljiv – grade sustave koji zvuče kao katedrale: OS/360, monolitan, ozbiljan, projektiran od odbora za odbore.

U takvom svijetu postoji ideja da operativni sustav — onaj komad softvera koji upravlja hardverom, pokreće sve ostale programe i zapravo je jedini prevoditelj između tebe i gomile struje i tranzistora koju zovemo računalom — bude malen. Da bude drag. Da ga jedan čovjek napiše u tjedan-dva, na stroju koji je drugi odjel bacio u kut kao neupotrebljiv. To nije samo neobično. To je vic. Onaj tip vica koji izgovoriš na sastanku, ljudi se nasmiju, potapšaju te po ramenu, i vrate se ozbiljnom poslu.

Samo što ovi ljudi u sandalama baš i ne slušaju kad im kažeš da je nešto vic. To im je, ako ćemo iskreno, omiljeni predznak da su na dobrom putu.

Dakle: rat se gasi negdje daleko, planet dobiva svoj dan, Nixon sjedi u Ovalnom uredu i smišlja sljedeći potez, a u jednoj zgradi u New Jerseyu par ljudi s previše slobodnog vremena i premalo nadzora upravo počinje pisati sustav koji će za pola stoljeća pokretati telefon u tvom džepu. Nitko to još ne zna. Ponajmanje oni sami.

Sjećaš se PDP-7 iz trideset trećeg poglavlja? Ona odbačena igračka na kojoj su Thompson i Ritchie potajno pisali svoj operativni sustav, dok je službeni Multics projekt tonuo kao brod bez kapetana — Multics je bio ambiciozan pothvat Bell Labsa, MIT-a i General Electrica da napravi jedan veliki, univerzalni operativni sustav za sve, i propao je na klasičan način: previše kuhara, presložena juha. E, ta priča ima nastavak, i taj nastavak je manje romantičan, ali puno važniji. Igračka je bila zabavna. Igračka nikoga nije plaćala.

PDP-7 je bio, budimo iskreni, muzejski komad već kad su na njemu radili — stroj s DECtape vrpcom umjesto diska, memorija mjerena u kilobajtima koje danas potroši favicon. Bio je to takozvani „minicomputer”, proizvod tvrtke Digital Equipment Corporation (DEC) — puno manji i jeftiniji od ogromnih IBM-ovih mainframea koji su tada punili cijele prostorije i koštali kao zgrada, ali za standarde industrije još uvijek prava sitna igračka, ne ozbiljan alat za rad. Dobar za dokazivanje koncepta, katastrofalan za bilo što ozbiljno. Pa je 1970. u laboratorij stigao PDP-11, noviji Digital Equipmentov model, i Thompson je sa svojom malom bandom prebacio kod na njega. Ne prepisao iz nule — prebacio, reciklirao, krpao. Unix je od prvog dana bio sastavljen od komada koji su već negdje postojali, i to mu se, paradoksalno, ne može zamjeriti nego pripisati u zaslugu.

Ali stroj bez svrhe i dalje je samo skupa hrpa metala koja grije prostoriju, koliko god ti se sviđala filozofija iza njega. Bell Labs nije neprofitna udruga za očuvanje zanimljivih ideja — to je dio AT&T-a, telekomunikacijskog monstruma koji plaća struju i plaće, i menadžment je s pravom pitao: dobro, dečki, a tko će ovo koristiti? Ne za igru. Za posao.

Odgovor je stigao iz smjera koji nijedan informatičar ne bi sanjao, i to je prva velika ironija ove priče: prvi stvarni kupac Unixa bio je — patentni odjel Bell Labsa. Ozbiljno. Ljudi koji su cijele dane tipkali patentne prijave, revidirali ih, brojali stranice, ispravljali zareze u pravnom žargonu gustom kao beton. Trebao im je sustav za obradu teksta, i to nije bio hir — patentne prijave bile su krvotok tvrtke koja je živjela od intelektualnog vlasništva.

Thompson i Ritchie su to shvatili kao šansu, ne kao poniženje. Dobili su pristup PDP-11 pod uvjetom da isporuče alat za obradu teksta — posao je preuzeo njihov kolega Joseph Ossanna, i tako se rodio roff, jedan od prvih programa za formatiranje dokumenata na Unixu, predak troffa, čiji strogi, geometrijski izgled dokumenata i danas podsjeća na onaj poseban „LaTeX osjećaj” koji dio informatičara nostalgično njeguje. Cijeli sustav koji ćeš danas povezati s hakerima, serverima i terminalskim prozorima sa zelenim slovima na crnoj podlozi — svoj prvi ozbiljan posao odradio je kao Word za pravnike, verzija 1971.

Menadžment je odriješio kesu za nešto malo — jedan PDP-11, nekoliko mjeseci vremena — i u zamjenu dobio softver koji je rješavao njihov stvarni, dosadni, papirnati problem. Thompson i Ritchie su, s druge strane, dobili ono što je njima trebalo: stroj koji radi, budžet koji postoji i, što je najvažnije, opravdanje da nastave razvijati sustav ispod površine te jedne aplikacije za tekst. Patentni odjel je htio procesor teksta. Dobio je trojanskog konja s cijelim operativnim sustavom skrivenim unutra.

Do kraja 1971. Unix je imao desetak korisnika u zgradi, stroj koji je radio pod punim opterećenjem i reputaciju sustava koji, čudom, ne pada. Igračka je odrasla. Sad je trebalo smisliti zašto bi, uopće, radio drugačije od svega ostalog što se u to doba zvalo operativni sustav — a to je priča za sljedeći dio.

Filozofija: radi jednu stvar dobro
§ 02

Filozofija: radi jednu stvar dobro

Dobro, imamo stroj. Imamo Thompsona i Ritchieja i onu ekipu iz Bell Labsa kako polako pretvaraju PDP-11 iz skupe igračke u alat kojim se stvarno nešto radi. Ali dosad smo samo pričali o hardveru i o tome tko je kome kupio kavu da nastavi projekt. Prava priča, ona zbog koje ovo poglavlje uopće postoji, počinje kad ti ljudi sjednu i, umjesto da napišu jedan veliki, moćni, sve-u-jednom program koji radi baš sve — odluče napraviti suprotno. Hrpu malih programića, od kojih svaki radi jednu, jedinu stvar. I radi je dobro.

Zvuči kao ništa, zar ne? Kao da sam potrošio deset minuta da ti kažem da su napravili alat za rezanje kruha koji samo reže kruh, umjesto stroja koji reže kruh, pjeva rođendansku pjesmicu i uzgred ti napuni mirovinski fond. Ali baš ta skromnost bila je eksplozivna. Da shvatiš koliko, moraš se sjetiti kako je izgledao normalan softver za mainframeove tog doba: jedan ogroman program, pisan od jedne firme, koji pokušava unaprijed predvidjeti svaku moguću upotrebu, pa ti onda za stvar koju bi trebao riješiti u tri poteza nudi izbornik od dvjesto opcija. Monolit. Katedrala koju je netko sagradio i koje se sad nitko ne dotiče, jer ako makneš jednu ciglu, cijela se zgrada može srušiti nekome tri kata iznad.

Unixov pristup je bio skoro pa filozofija, mada ga to nitko od njih tada ne bi tako nazvao — vjerojatnije bi frknuli i rekli da su samo lijeni pisati veliki kod kad mogu napisati mali. Napravi program koji radi jednu stvar. Napravi ga dobro. I onda — ovo je ključni dio — napravi ga tako da može razgovarati s drugim programima koji rade svoju jednu stvar dobro. Ne zato da bi bio elegantan za neki filozofski seminar, nego zato da bi ti, kad ti sutra zatreba kombinacija koju nitko od njih nije predvidio, mogao samo — spojiti postojeće komadiće. Kao lego kockice, samo što ovdje kockica koja je jednom napravljena ostaje zauvijek korisna, umjesto da čeka da netko izda novu verziju katedrale.

Alat koji je sve to spojio, i koji je vjerojatno najelegantnija stvar koja je ikad izašla iz te sobe, zove se pipe — cijev. Ideja je smiješno jednostavna kad je objasniš: izlaz jednog programa postaje ulaz drugom. Ne moraš spremati privremenu datoteku, ne moraš pisati poseban kod da ih spojiš — samo staviš znak »|« između dva imena i gotovo je, voda teče iz jedne cijevi u drugu. Htio prebrojati koliko se puta neka riječ pojavljuje u tekstu? Ne pišeš program za brojanje riječi. Uzmeš program koji ispisuje tekst, provučeš ga kroz program koji filtrira riječi, provučeš to kroz program koji sortira, provučeš to kroz program koji broji jednake susjedne linije. Četiri mala alata, spojena u tri poteza, i dobio si potpuno novu funkcionalnost koju nitko od te četvorke nije znao da će jednog dana raditi.

Druga stvar koja se u to vrijeme rodila, i koja zvuči kao parola neke sekte a zapravo je čisto praktično rješenje, jest da je u Unixu sve datoteka. Zvuči mistično dok ne demistificiraš — a demistifikacija je ovdje kratka i lijepa. Kad kažeš da je sve datoteka, ne misliš da je disk datoteka u smislu da ga možeš staviti u ladicu. Misliš da svemu — tvom dokumentu, ali i tvrdom disku, printeru, čak i procesu koji trenutno radi u pozadini — možeš pristupiti kroz isto, jednostavno sučelje: otvori, pročitaj, piši, zatvori. Ista četiri poteza za apsolutno sve u sustavu. To znači da program napisan za rad s tekstualnom datotekom radi i s printerom, i s diskom, bez posebne verzije za svaki uređaj. Nema stotinu različitih jezika za stotinu različitih komada hardvera. Postoji jedan jezik, i sve njime govori, htjelo to ili ne.

Zajedno, ta dva poteza — mali alati koji se spajaju cijevima, i jedinstveno sučelje prema svemu u sustavu — daju ti nešto što nijedan mainframe monolit (ogroman, sve-u-jednom sustav, pisan kao jedan zbijeni blok koda) nije mogao ponuditi: kombinatoriku. Deset malih alata, svaki sa svojom jednom funkcijom, spojenih na razne načine, daju ti stotine mogućih upotreba koje nijedan od te desetorice u sobi nije morao unaprijed osmisliti. Monolit ti daje onoliko funkcija koliko je netko unaprijed odlučio da ti treba. Unix ti daje alat i cijev, a kombinaciju ostavlja tebi. To je razlika između kupovine gotovog jelovnika i dobivanja pristupa cijeloj smočnici.

Nije ovo bila neka objava genijalnosti odozgo, neki manifest zakucan na vrata Bell Labsa. Bilo je to nešto puno prizemnije — hrpa ljudi koji su se umorili od pisanja velikog koda za male probleme, i koji su otkrili da je puno lakše napraviti deset malih stvari nego jednu veliku, i da te male stvari, kad ih dobro posložiš, rade posao velike i bolje. Filozofija je došla poslije, kad je netko morao objasniti drugima zašto to radi tako dobro. A to je, uzgred, i razlog zašto tvoj terminal danas — bilo da kucaš u macOS-u, Linuxu, čak i u onom podsustavu u Windowsima — i dalje razmišlja u tim istim malim komadima. Ti alati koje danas spajaš znakom cijevi nisu naslijeđe iz nostalgije. Oni su naslijeđe iz jedne sobe u kojoj je nekome bilo lakše napisati deset malih programa nego jedan veliki.

Kultura oko stroja
§ 03

Kultura oko stroja

Ta soba u Murray Hillu i dalje je bila poprište te iste priče — hrpa neispavanih ljudi u sandalama, s kosom koja bi danas dobila otkaz u pola korporacija, provodila noći dok su ostali u zgradi razmišljali o telefonskim mrežama. Nema tu svečanog laboratorija sa staklenim zidovima i svjetlima koja se pale čim uđeš. Ima terminal, ima pepeljara, ima ljudi koji su otkrili da im je zabavnije igrati se sa strojem nego raditi ono za što ih tehnički plaćaju.

I to je ključna stvar koju moraš shvatiti prije nego nastavimo: Unix se nije rodio iz konferencijske sobe s projektorom i planom kvartala. Rodio se iz dosade, upornosti i činjenice da je Bell Labs bio dovoljno bogat i dovoljno siguran u sebe da pusti šačicu čudaka da se igraju s računalom koje im, formalno gledano, baš i nije trebalo. Zajednički računi, zajednički terminal, zajednička odgovornost — ako je netko srozao sustav u tri ujutro, sutradan su svi znali čiji je to bio eksperiment, jer u toj hodničkoj kulturi nije postojalo puno privatnosti. Bilo je to malo pleme, ne odjel.

Iz te atmosfere je iznikao i jedan od najpodcijenjenijih izuma cijele priče — man stranice. Zvuči trivijalno, dokumentacija, ali zapravo je to bio prvi put da je neki sustav dobio dokumentaciju koja je i sama dio sustava, a ne naknadna isprika za njega. Otkucaš „man ls” i stroj ti sam objasni što ta naredba radi. Nema traženja po policama s priručnicima, nema zvanja kolege koji je to jednom davno napisao pa se odselio u drugi grad. Man stranice su postale žanr za sebe: suhe, precizne, pomalo arogantne u svojoj kratkoći — i taj ton, taj suhi humor birokrata koji ti štedi vrijeme, prepoznaješ i danas čim otvoriš terminal na svom Macu ili Linuxu.

A onda su tu imena. Kad grupa mladih inženjera bez nadzora smišlja nazive naredbi, ne dobiješ nešto poput ENTERPRISE_DOCUMENT_RETRIEVAL_UTILITY. Dobiješ „cat”, jer spaja datoteke kao što mačka spaja — ma nema smisla, jednostavno je kratko i lijepo se tipka. Dobiješ „grep”, kriptičnu kraticu koja zvuči kao da je netko kihnuo, a zapravo dolazi od naredbe za pretragu u jednom starijem uređivaču teksta. Dobiješ „finger”, naredbu koja ti kaže je li kolega trenutno prijavljen na sustav — što je bilo i korisno i, budimo iskreni, prastari oblik uhođenja, prije nego što je uhođenje dobilo ljepše ime: status na Facebooku.

Nitko od njih tada nije mislio da piše rječnik za pola stoljeća unaprijed. Mislili su da smišljaju prečicu kako ne bi morali tipkati dugo ime funkcije u tri ujutro. Ali baš zato što su te naredbe nastale iz nužde i lijenosti, a ne sa sastanka o brendiranju proizvoda, ostale su. Preživjele su promjenu operacijskih sustava, promjenu desetljeća, promjenu cijelih generacija programera koji ni ne znaju otkud im „grep” dolazi — samo znaju da radi, i da je, na neki čudan način, drag.

Šesta edicija ide u svijet
§ 04

Šesta edicija ide u svijet

Evo gdje priča prestaje biti samo o inženjerima u sobici na drugom katu Bell Labsa i postaje priča o cijelom svijetu — i evo zašto je to čista slučajnost pravne prirode, a ne genijalan marketinški plan. AT&T je 1956. potpisala dekret s američkim antitrust regulatorima (isti onaj K1 spomen, sjećaš se) koji joj je zabranio bavljenje bilo čime izvan telefonije. Ozbiljno. Kompanija je smjela graditi telefonske centrale, ali nije smjela prodavati operativne sustave. Unix je, po toj logici, bio nešto što AT&T tehnički nije smjela komercijalizirati — pa ga jednostavno nisu ni pokušali prodati. Umjesto toga su ga davali fakultetima. Skoro badava. Licenca za izvorni kod plus medij za distribuciju, i to je to.

Zamisli tu situaciju iz perspektive profesora informatike na nekom američkom sveučilištu 1974. godine. Kompanije koje prodaju mainframove – one ogromne strojeve za koje je i jedna jedina jedinica koštala kao pola fakulteta – daju ti crnu kutiju: platiš, dobiješ samo binarni kod, a ako te zanima kako to iznutra radi, sretno, jer izvorni kod je poslovna tajna vrijedna više od tvoje cijele katedre. A onda dođe AT&T i kaže: evo ti Unix, evo ti i cijeli izvorni kod, radi s njim što hoćeš, samo ga ne prodaji. Za akademsku zajednicu to nije bio poklon. To je bila krijumčarena roba koja je, ovaj put, potpuno legalna.

Šesta edicija, ona iz 1975., postala je verzija koja je stvarno procurila u svijet — ne u smislu curenja, nego u smislu da je to bila prva inačica koja je stigla u dovoljno ruku da netko poželi napisati knjigu o tome kako sve to zapravo radi. I tu na scenu stupa John Lions, profesor s University of New South Wales u Australiji, koji je uzeo cijeli izvorni kod jezgre — nekoliko tisuća linija, ono što danas staje u jedan solidan mikroservis — i napisao komentar, red po red. Jezgra, ili kernel, je onaj dio operativnog sustava koji stvarno dodiruje hardver — on odlučuje koji program smije koristiti procesor, kako se čita s diska, gdje u memoriji nešto smije živjeti; sve ostalo na računalu, u nekom smislu, samo traži dopuštenje od njega. Rezultat rada Johna Lionsa zvao se »Lions' Commentary on UNIX 6th Edition«, i to nije bio priručnik za korištenje, nego anatomija — kako kernel doslovno funkcionira, s objašnjenjima zašto je nešto napisano baš tako, a ne drukčije.

Ono što je slijedilo je ta vrsta apsurda koju samo pravni odjel velike korporacije može smisliti. AT&T je knjigu prvo tolerirao, a onda mu je, valjda kad je shvatio da je vlasnik izvornog koda koji netko javno secira na sve strane, sinulo da bi to ipak trebalo biti tajna — pa je distribuciju zabranio. Ne zato što je knjiga bila pogrešna, nego zato što je bila previše dobra. Rezultat zabrane bio je, kao i uvijek u povijesti zabrana, potpuno suprotan od namjere: knjiga je postala relikvija. Kopirala se na fotokopirnim strojevima, kopija kopije kopije, dok slova nisu počela nestajati u sivoj mrlji, i prosljeđivala iz ruke u ruku kao nešto između udžbenika i ilegalnog letka. Neki je zovu najfotokopiranijom knjigom u povijesti informatike, i vjerojatno je to preskromna procjena — teško je brojati primjerke koje nitko nije smio imati.

Ali suština nije u sivom papiru i lošoj čitljivosti fotokopija. Suština je da generacija studenata koja je čitala Lionsov komentar, legalno ili ispod ruke, nije samo naučila kako koristiti Unix — naučila je kako je Unix napravljen, a to je posve druga vrsta znanja, ona koja rađa nove operativne sustave, ne samo nove korisnike starih. Kad je AT&T pokušao zatvoriti vrata, znanje je već bilo unutra, u glavama ljudi koji su se spremali otići na Berkeley, MIT i svugdje odakle će se, koju godinu kasnije, vratiti s vlastitim idejama o tome kako bi Unix trebao izgledati.

Sjeme svega
§ 05

Sjeme svega

Dok se u Murray Hillu — sjedištu Bell Labsa, gdje je Unix i rođen — Šesta edicija pakirala u kutije s izlikom „to je samo tekst procesor, stvarno”, jedan primjerak je sletio na sveučilište u Berkeleyu i naišao na doktoranda po imenu Bill Joy. Sveučilišta su, sjećaš se, dobivala kod gotovo za džeparac — antitrustovski dekret tjerao je AT&T da ne smije prodavati softver kao proizvod, pa je Unix dijelio kao znanstvenu kurioznost, uz slegnuće ramenima. Nitko u pravnom odjelu nije sjedio i mislio: pazi, ovo će nam se jednog dana vratiti kao bumerang u glavu. A hoće.

Berkeley nije samo koristio Unix — Berkeley ga je počeo prepravljati. Joy i društvo ubacivali su svoje uređivače teksta, svoje mrežne dodatke, svoj sustav za virtualnu memoriju, i sve to pakirali u distribuciju koju su nazvali Berkeley Software Distribution — BSD, dakle. Prva verzija iz 1977. bila je skromna, gotovo stidljiva — nekoliko traka, tek desetak-dvadesetak korisnika koji su se poznavali po imenu. Ali sjeme je sjeme, a ovo je bilo posebno plodno sjeme, zasađeno u tlo puno pametnih, dosadnih studenata s pristupom izvornom kodu i noćima punim slobodnog vremena.

I tu dolazimo do jezgre cijele priče, one koju ćeš čuti da se prepričava kao vic na svakoj konferenciji o operativnim sustavima: Unix nije pobijedio jer je bio tehnički najbolji. Pobijedio je jer su ga studenti smjeli čitati.

Tako je Unix, umjesto da ostane proizvod jedne firme, postao jezik koji su svi učili zajedno — s istim greškama i istim rješenjima koji su kružili po fakultetskim mrežama Amerike. BSD je rastao paralelno s originalnim AT&T stablom, čas posuđujući kod, čas ga vraćajući, u jednom nesuvislom, plodnom kaosu koji nitko nije planirao, ali koji je funkcionirao bolje od bilo kojeg planiranog proizvoda tog doba.

Naravno, AT&T je s vremenom shvatio što je zapravo poklonio. Kad se Unix pretvorio iz akademske kuriozitete u temelj cijele industrije, pravnici su se probudili i počeli mahati prstom — tko je uzeo što, tko duguje kome, čije su te linije koda uistinu. Ta priča, s tužbama i sudnicama i AT&T-om koji pokušava zatvoriti štalu nakon što su konji, telad i pola susjedstva već izašli, čeka te u knjizi četiri. Za sada je dovoljno znati ovo: velikodušnost iz 1974. bila je slučajna, nesvjesna, gotovo nemarna — i baš zato nezaustavljiva. Kad nešto pustiš da se širi bez ugovora koji to sprječava, ne možeš se onda iznenaditi kad se proširi svugdje.