Unix se rađa (1969)
Jedan dosadan inženjer, napuštena igrica i stroj bez posla — tako je nastalo nešto što danas pokreće pola interneta.
Murray Hill, New Jersey, ljeto 1969. Bell Labs — istraživački pogon telefonskog giganta AT&T-a, mjesto gdje su se rađale stvari poput tranzistora i lasera, dakle ne baš neka garažna radionica — izgleda kao da je netko uzeo sveučilišni kampus, oduzeo mu studente i dodao plaću. Hodnici dugi kao pista, ploče prekrivene kredom koju čistačica navečer ne briše jer nitko nije siguran je li to formula koja vrijedi milijardu dolara ili netko crta krugove jer se dosađuje. Uzde su labave do besmisla — možeš raditi na čemu hoćeš, dokle god s vremena na vrijeme proizvedeš nešto što se može staviti u interni memorandum.
Taj luksuz labavosti postoji jer je AT&T monopol, a monopolu para curi iz svih rupa, pa si može priuštiti da plaća ljudima samo da razmišljaju. Problem je što razmišljanje, kad mu daš dovoljno vremena i dovoljno pametnih glava u istoj sobi, često proizvede čudovište. Ime čudovišta je Multics.
Multics je trebao biti operacijski sustav za sve i svakoga — timesharing san u kojem stotine korisnika sjede na istom stroju i svatko misli da ima računalo samo za sebe. Da razjasnimo taj timesharing: zamisli jedno jedino računalo (a u to doba su bila ogromna i skupa kao kuća) koje naizmjenično opslužuje hrpu ljudi, svakome dodijeli sićušnu krišku svog vremena, tisućinku sekunde ovdje, tisućinku tamo, i to radi tako brzo da svaki korisnik ima osjećaj da cijeli stroj radi samo za njega. Bell Labs, MIT i General Electric guraju to zajedno godinama, uz proračune koji bi danas pokrenuli malu državu. I onda, 1969., Bell Labs jednostavno — izađe. Povuče ljude, povuče novac, ode kući. Projekt je, službeno rečeno, prekompliciran. Nezvanično rečeno: nitko više ne zna zašto radi ono što radi, a kamoli kako da ga popravi.
To je lekcija broj jedan ove priče, iako je u tom trenutku još nitko ne prepoznaje kao lekciju — velebne stvari umiru od vlastite veličine. Za sada je to samo neugodna tišina u jednom krilu zgrade i par inženjera koji su preko noći ostali bez igračke.
Jer to se ne vidi kad gledaš fotografiju te zgrade iz zraka — koliko je toga u povijesti računalne znanosti nastalo ne iz vizije, ne iz petogodišnjeg plana, nego iz čistog, neopisivo dosadnog popodneva. Multics je mrtav, projektni prostor je opustio, a negdje u podrumu stoji zapušten PDP-7 — malen, star računalni stroj, danas bi ga jedva nazvali kalkulatorom s pretenzijama — kojeg nitko ne koristi jer je, iskreno, prilično bezvrijedan za sve ozbiljne stvari koje se rade na katu iznad.
Nitko u tom trenutku ne piše u dnevnik da će se upravo tu, na otpadu jedne propale imperije, roditi sustav koji će za pola stoljeća pokretati telefon u tvom džepu, poslužitelj koji poslužuje ovu stranicu i svemirski teleskop koji gleda u rub svemira. Nitko ne sluti ništa. Postoji samo praznina nakon velikog projekta, kreda po zidovima i dvojica ljudi koji žele — u biti — samo jednu jedinu stvar.
Igrati igricu.
Multics, projekt koji je trebao svima dati zajednički, moćni, sveprisutan operativni sustav, upravo je proglašen mrtvim. AT&T je povukao ljude, Bell Labs je povukao novac, i sve što je ostalo od te avanture je desetak inženjera naviklih na veliki, elegantan stroj pod nogama, koji sad taj stroj nemaju. Jedan od tih ljudi je Ken Thompson. I Ken Thompson ima problem. Ne egzistencijalni, ne filozofski. Manji. Puno manji, i baš zato zanimljiviji: nema više gdje igrati svoju igricu, Space Travel.
Da, dobro si pročitao. Space Travel — igra koju je sam napravio na Multicsu, simulacija leta kroz Sunčev sustav, gdje pomičeš brod po zvjezdanom nebu i pokušavaš sletjeti na neki od planeta bez da se raspadneš u komadiće. Nije to nikakav uzvišeni motiv za promjenu povijesti informatike. Nije ni blizu. Ali eto ga — Multics je otišao, a s njim i stroj na kojem je igra živjela, i Thompson se našao u situaciji koju svaki gejmer prepozna: igra ti se gasi jer platforma na kojoj je igraš više ne postoji.
Rješenje je stajalo u kutu laboratorija i skupljalo prašinu — taj isti zapušteni PDP-7, siroče odjela kojeg se Bell Labs odavno odrekao, jer za ozbiljan posao trebao im je Multics, a Multics je trebao onaj drugi, veći i skuplji stroj. Nitko ga nije htio, nitko ga nije održavao, a upravo je zato bio slobodan — nitko te ne tjera da ga koristiš na neki poseban način, jer ga nitko ne koristi nikako.
Thompson je prenio Space Travel na PDP-7. I baš tu kreće cijela stvar — ne na nekom sastanku s velikom vizijom budućnosti računalstva, nego u sitnom, gotovo bezobraznom detalju: da bi igra radila na tom stroju, netko je morao napisati barem osnovni skup alata koji joj daju gdje da „živi” — nešto što učitava program, nešto što upravlja diskom, nešto što uopće razumije da postoje tipkovnica i ekran. To nije bio operativni sustav u smislu u kojem ga danas zamišljaš, s ikonicama i prozorčićima. Bio je to minimalni kostur, sastavljen samo da posluži jednoj igri jednog čovjeka na jednom napuštenom stroju.
Uz Thompsona se, gotovo prirodno, priključio Dennis Ritchie — kolega iz istog razbijenog Multics-tima, isto tako bez stroja, isto tako s viškom vremena i manjkom volje da se vrati administrativnom poslu. I tu leži prva prava ironija priče: dvojica inženjera koji su upravo gledali kako pada najambiciozniji operativni sustav svog doba sad, u dosadi, bez ičijeg odobrenja, bez proračuna i bez sastanaka, grade kostur novog. Ne zato što su vjerovali da će promijeniti svijet. Zato što su htjeli da im brodić leti.
Ono što slijedi u ovom poglavlju je upravo taj domino-efekt — kako se skup alata za jednu igru na napuštenom stroju pretvorio u filozofiju koja i danas pogoni pola interneta. Ali zapamti za sad samo ovo: u trenutku kad je Multics umro s velikim planovima i praznim rukama, Unix se rodio bez ikakvog plana, s ciljem sitnijim od sitnog. Netko je samo htio igrati igricu.

Prva posljedica: filozofija iz nužde
Dobro, imaš igru. Space Travel radi, brodić leti preko ekrana, Thompson je sretan. Ali da bi igra radila, netko mora napisati asembler — program koji čovjekove donekle razumljive naredbe pretvara u strojni jezik koji procesor stvarno razumije — da bi se igra mogla napisati, i uređivač teksta da napiše asembler, i sustav datoteka da spremi ono što uređivač uredi, i raspoređivač procesa koji odlučuje kad tko dobije procesor. Odjednom imaš — hoćeš, ne hoćeš — cijeli operativni sustav. Samo ga nitko nije tako planirao. Nastao je kao lanac isprika: da bi ovo radilo, treba mi ono, a da bi ono radilo, treba mi to.
I tu dolazimo do detalja koji cijelu priču pretvara iz šale u lekciju. PDP-7, stroj na kojem se sve ovo događa, nije bio moćan ni u 1969., a 1969. nije bila godina moćnih strojeva. Imao je otprilike 8 kilo-riječi radne memorije (18-bitnih, što je grubo oko 18 kilobajta). Za usporedbu — ova rečenica koju sad čitaš vjerojatno zauzima više prostora u memoriji tvog mobitela nego što je Thompson imao za CIJELI operativni sustav. Ne za jednu aplikaciju. Za sve. Kernel (jezgru operacijskog sustava, dio koji izravno razgovara s hardverom i drži sve ostalo pod kontrolom), upravljanje datotekama, procese, sve što bi trebalo pokretati igru s brodićem.
I upravo tu nastaje ono što će kasnije neki filozof softvera na konferenciji nazvati Unix filozofijom, s velikim F, kao da je netko sjeo, popio kavu i zapisao deset zapovijedi na kamenu. Nije. Zapovijed je bila jedna, i nije je izrekao filozof nego memorijski čip: nemaš mjesta za veliki program, dakle nećeš pisati velike programe. Svaki komad koda mora raditi jednu stvar, i to dobro, jer ako pokuša raditi dvije stvari, jednostavno neće stati u prostor koji imaš. Nije to skromnost. To je fizika.
Usporedi to s Multicsom, čiji leš još leži topao dva hodnika dalje (o tome više u rubrici, ali osjeti kontrast već sad) — projektom koji je htio riješiti sve odjednom: sigurnost, umrežavanje, više korisnika istovremeno, napredno upravljanje memorijom, sve u jednom golemom, elegantno zamišljenom, katastrofalno teškom sustavu. Multics je imao viziju i budžet. Thompsonov Unix nije imao ni jedno ni drugo. Imao je stroj koji je drugi odjel već otpisao i memoriju u kojoj se jedva okrećeš. Pa je napravio suprotno od Multicsa u svakom mogućem smislu — i to suprotno se pokazalo boljim.
Ovo je onaj trenutak u lančanoj reakciji gdje sitnica prestaje biti sitnica. Igra je i dalje samo igra, brodić i dalje leti preko ekrana kao da je 1969. jučer izmislila zabavu. Ali princip koji je nastao usput — radi malo, radi jedno, radi to dobro, i onda spoji male stvari u velike — taj princip će nadživjeti i igru i stroj i cijelo desetljeće. Ne zato što je bio genijalna ideja smišljena unaprijed, nego zato što je bio jedina moguća ideja s obzirom na resurse. Siromaštvo je, kao što često biva, roditelj discipline. Samo što ovaj put disciplina neće umrijeti kad stroj ode u otpad — preživjet će ga za pedeset i više godina.

Eskalacija: pipe, fajl, sve
E sad dolazi dio gdje Thompson i Ritchie prestaju biti dvojica dosadnih tipova s igricom i postaju dvojica koja slučajno mijenjaju povijest. Jer kad ti je igrica proradila, kad imaš ono što nazoveš operativnim sustavom (skromno — u početku ga zovu i UNICS, kao neka jeftinija verzija Multicsa, zloban interni vic koji je toliko dobar da su ga zadržali dok se nije istrošio), odjednom te taj mali stroj tjera da rješavaš probleme koje veliki timovi na Multicsu rješavaju s beskrajno više resursa. I onda dolazi ideja koja danas zvuči kao floskula na majici, a tad je bila čisto praktično rješenje: sve je datoteka.
Zamisli to malo. Ne samo tekstualni dokument koji zoveš datotekom, nego i tvoj disk, i tvoj terminal, i printer u drugoj sobi, i ono što upravo tipkaš na tipkovnici. Sve to isti sustav gleda kroz identičnu apstrakciju — niz bajtova koje možeš otvoriti, pročitati, zapisati, zatvoriti. Nema posebnog sučelja (onog što bi danas zvao API-jem) za disk, posebnog za pisač, posebnog za tipkovnicu. Jedan mehanizam za sve. Zvuči kao genijalna arhitektonska odluka nekog vizionara koji je vidio budućnost umreženih sustava. Nije. Zvuči kao rješenje ljudi koji nisu imali vremena pisati dvadeset različitih sustava za dvadeset različitih uređaja, pa su napisali jedan i onda ga silom natjerali da radi za sve. Elegancija je ovdje nuspojava lijenosti, a lijenost nuspojava premalo memorije da bi si mogao dopustiti raskoš kompliciranja.
I onda, negdje u toj istoj godini ili malo poslije, dolazi ideja koja je toliko jednostavna da zvuči glupo kad je izgovoriš naglas: što ako izlaz jednog programa jednostavno postane ulaz drugog? Bez privremenih datoteka, bez copy-paste, bez čovjeka koji sjedi između dva programa i prenosi podatke rukama kao poštar. Ideju je predložio Doug McIlroy — da, opet on, isti čovjek koji je nekoliko poglavlja prije ovoga zagovarao filozofiju malih programa koji rade jednu stvar (ako se ne sjećaš, nema veze, samo znaj da je čovjek imao viziju i prije nego je Unix uopće postojao da je provede). Thompson je to poslušao, sjeo i za jednu večer — jednu — implementirao »pipe« (cijev) u kernelu. Jedna večer rada koja danas leži ispod svakog znaka | koji otipkaš u terminalu, svaki put kad spojiš `ls` s `grep` kao da je najnormalnija stvar na svijetu. I jest, danas. Tad nije bila.
Pipe rješava nešto duboko — programi ne moraju znati jedni za druge da bi surađivali. `grep` (program koji pretražuje tekst i izbacuje redove koji odgovaraju uzorku) ne mora znati da postoji `sort` (koji, sasvim logično, sortira), `sort` ne mora znati da postoji `uniq` (koji uklanja duplikate iz popisa). Svaki radi svoj mali posao, dobro, i onda predaje rezultat dalje kroz cijev koju kernel održava. To je ono McIlroyevo „radi jednu stvar dobro” pretvoreno u infrastrukturu, a ne u parolu s predavanja. I opet — ne zato što je nekome sinulo da je to filozofski ispravno, nego zato što je pisanje jednog velikog programa koji radi sve, na stroju s osam kilobajta, bilo fizički bolno.
Treći komad slagalice, i vjerojatno najmanje glamurozan, ali podjednako trajan: hijerarhijski sustav datoteka. Mape unutar mapa unutar mapa, stablo koje se granama i granama, svaki list dostupan preko jasne staze. Danas ti je to toliko prirodno da ni ne primjećuješ da je ikad mogao biti drugačiji — a mogao je, i mnogi su sustavi prije toga radili s ravnim popisom datoteka ili čudnim shemama numeriranja koje su tražile priručnik da ih razumiješ. Unix je rekao: staza je ime, ime je adresa, i svi znamo o čemu govorimo. „/usr/bin/nešto” čita se kao rečenica, ne kao lozinka.
Vidiš kamo ovo vodi? Nijedna od te tri stvari — sve je datoteka, pipe, hijerarhija — nije nastala kao veliki plan za budućnost računalstva. Nastale su jer je stroj bio mali, tim je bio mali i vremena je bilo malo. A baš ta stisnutost je iz njih istisnula nešto što nijedan odbor od dvadeset inženjera s neograničenim budžetom nije uspio proizvesti (vidi: Multics, u susjednoj zgradi, upravo se gasi). Elegancija se, ispada, rijetko rađa iz obilja. Rađa se kad nemaš izbora nego biti jednostavan.

Domino: pravnici šišaju, Unix cvjeta
Dobro, sad malo pravne arheologije, ali obećavam da je zabavnija nego što zvuči. Vrati se u 1956. Američka vlada je te godine natjerala AT&T na potpis dekreta koji je, u prijevodu s pravničkog na ljudski, glasio: smiješ imati monopol na telefoniju, to ti dopuštamo, ali se ne smiješ igrati u tuđem dvorištu. Konkretno — ne smiješ prodavati softver kao komercijalni proizvod. AT&T je bio telefonska kompanija, ne softverska kuća, i država je to htjela tako i zadržati. Nitko 1956. nije razmišljao o operacijskim sustavima kao proizvodu vrijednom monopola — ta rečenica u dekretu bila je sitna napomena, fusnota u dokumentu o bakrenim žicama.
Trinaest godina kasnije ta fusnota u dokumentu o bakrenim žicama postaje najvažnija stvar koja se AT&T-u ikad dogodila — a oni toga u tom trenutku nisu bili ni svjesni.
Thompson i Ritchie su imali na rukama Unix. Nešto što je nastalo iz dosade, iz ostataka Multicsa i iz potrebe da igrica ima gdje raditi — a sad je ispalo da im ta stvar radi bolje nego bilo što u kući. Menadžment je htio da se to nekako iskoristi, ali AT&T nije smio prodavati softver kao proizvod, sjeti se onog dekreta iz 1956. Ne smiješ ga prodavati — ali nitko u dekretu nije rekao da ga ne smiješ *dati*. Pravnici su šišali korporaciju sa svih strana, sprječavali je da uđe u posao za koji je, ironično, upravo stvorila najbolji proizvod desetljeća — i onda su, gotovo kao usputna gesta, otvorili vrata kroz koja je taj proizvod pobjegao u svijet.
Pa je AT&T učinio ono što je jedino mogao: poslao Unix na fakultete. Ne besplatno — nisu bili filantropi, bili su telekomunikacijska korporacija s pravnim odjelom koji broji slova u ugovorima — ali za smiješan iznos. Cijena vrpce. Doslovno, onoliko koliko bi koštalo da netko presnimi kôd na traku i pošalje je poštom. Kôd, dokumentacija, sve ide s njom, bez licenci koje danas poznajemo, bez EULA-e od dvadeset stranica koju nitko ne čita. Sveučilišta poput Berkeleya dobivaju punokrvni operacijski sustav — izvorni kôd i sve — za cijenu koja je bila zaokruživanje greške u proračunu odjela.
I tu dolazi domino koji je stvarno bitan. Nije poanta da su fakulteti dobili jeftin softver — poanta je da su generacije studenata odrasle *unutra*, u njemu. Ne kao korisnici koji kliknu i čekaju da radi, nego kao ljudi koji čitaju kôd, popravljaju ga, dodaju mu stvari za domaću zadaću. Na Berkeleyu se to posebno primilo — toliko da su počeli slagati vlastite zakrpe i dodatke u paket koji će jednog dana postati poznat kao BSD. To je priča za sljedeću knjigu, ali zapamti ime, vraćamo se na njega.
Ono što je ključno sad: kad softver dobiješ gotovo besplatno i s punim uputama kako je sastavljen, ne tretiraš ga kao crnu kutiju. Tretiraš ga kao zajedničku imovinu koju svatko malo popravi i vrati bogatiju. To se nije dogodilo Windowsu. Nije se dogodilo ni jednom komercijalnom proizvodu koji je ikad izašao iz neke garaže s cjenikom u ruci. Dogodilo se Unixu, i to isključivo zato što ga jedna telefonska kompanija nije imala pravo naplatiti kao što bi htjela.

Svijet kakav poznaješ
Brzo premotaj sad pola stoljeća unaprijed. Otvoriš telefon — Android, dakle Linux jezgra ispod svega, svejedno drži li ti u ruci Samsung ili neki kineski model za sto eura. Otvoriš laptop — macOS, koji je, iskreno, samo Unix u skupom sakou i s dobrim marketingom. Spojiš se na bilo koji server koji ti gura ovaj tekst do ekrana, na bilo koju bazu podataka, na bilo koji router koji ti provlači pakete kroz internet — Linux, Linux, Linux. Devedeset i nešto posto svih superračunala na planeti. Praktički cijeli cloud, sve te tuđe računalne farme na kojima danas žive tvoje fotke, tvoji mailovi, tvoja sramota od prije deset godina koju Google pamti bolje nego ti.
I sve to, svaka od te vojske strojeva, nosi u sebi DNK dvojice frustriranih tipova koji su 1969. samo htjeli da im onaj isti zapušteni PDP-7 iz podruma pokrene svemirsku igricu bez da se sruši. Nisu planirali osvojiti svijet. Planirali su da im brod na ekranu ne zapinje. Svijet je bio nuspojava.
Ono što se onda dogodilo — kako je taj mali eksperiment na jednom napuštenom stroju u New Jerseyu prerastao u sustav koji danas pogoni polovicu civilizacije, kako su fakulteti, hakeri, jedan Finac po imenu Linus i cijela vojska ljudi koji su odbili platiti Microsoftu doveli Unixovu djecu do toga da danas vrte tvoj router, tvoj telefon i tvoju banku — to je priča koja zaslužuje puno više prostora nego što joj ovdje mogu dati.
A kako se ta loza granala, tko je ukrao što od koga, i zašto se pola interneta i danas svađa oko toga je li to „GNU/Linux” ili samo „Linux” — to je priča za sljedeće poglavlje. Berkeley te čeka.