Von Neumannova arhitektura (1945)

Jedan tip je 1945. odlučio da su podaci i program isto smeće u istoj kutiji — i otad ti sve, od Worda do virusa, sjedi na toj odluci.

poglavlje 11/3424 min čitanja∞ – 1969
ti@kronika:~$ ./sviraj K1_11_neumann.mp3

# da, poglavlje ima pjesmu. ne, nitko ne zna zašto.

Kolovoz 1945. Dvije bombe, dva grada, i onda tišina koja zvuči kao da je cijeli svijet nakratko zaustavio dah. Rat je gotov. Formalno će papirologija još malo potrajati — Japan se službeno predaje 2. rujna 1945. — ali svi znaju: gotovo je. I sad dolazi ono neugodno poslijeratno pitanje koje nitko baš ne izgovara naglas: dobro, i sad što?

Jer u pustinji Novog Meksika, u mjestu koje ni na karti nije službeno postojalo, upravo se raspustio najgušći nakup genija koji je ljudska vrsta ikad natrpala na jednu adresu. Los Alamos nije bio institut — bio je tajna sama po sebi, grad koji se zvao „Site Y”, s poštanskim brojem koji je vodio u pravnu prazninu, a unutra fizičari koji su računali koliko će uranija trebati da se sravni grad sa zemljom. Taj posao je sad — nažalost, uspješno — obavljen. Ljudi se pitaju kamo dalje s viškom pameti koji je upravo dokazao da može, ako treba, ugasiti civilizaciju u sekundi.

Odgovor je, ispada, jednostavan: nikamo. Ta pamet se ne raspusti, ona se prelije dalje. Fizičari, matematičari i inženjeri koji su tri godine radili zbijeni u istoj baraci sele se sada na Princeton, MIT, Cambridge, Manchester — ali sa sobom nose nešto što prije rata nije postojalo u toj mjeri: naviku da znanost i vojska sjede za istim stolom, i da to nikome ne izgleda čudno. Granica između sveučilišta i vojske, koja je 1938. bila skoro nezamisliva, do 1945. je izbrisana toliko potpuno da je ljudi više ni ne primjećuju.

Novac ide u jednom smjeru — od Pentagona (to jest američkog Ministarstva obrane, čije se sjedište zove tako upravo po tom peterokutnom zdanju) i njegovih rođačkih agencija prema sveučilištima — a ideje u drugom. Vojska ima proračune veće nego što ih je imala u bilo kojem mirnodopskom razdoblju i, po prvi put, ne stidi se trošiti ih na stvari koje trenutno ne ubijaju nikoga, nego samo — računaju. Sveučilišta pak imaju mozgove koji su upravo naučili raditi pod pritiskom, u rokovima, na problemima koji su prije bili čista teorija, a sad su, dokazano, primjenjivi. Kombinacija je opasna u najboljem smislu te riječi.

Riječ atomsko postala je, preko noći, sinonim za budućnost samu. Atomska energija, atomsko doba, atomski automobili u reklamama koje obećavaju da će za deset godina svaka kuća imati mali reaktor u podrumu umjesto peći na ugljen. Nitko baš ne zna što to znači u praksi, ali svi znaju da znači unaprijed — i da će znanost, ona ista koja je upravo dokazala da može sravniti grad sa zemljom, sad dobiti zadatak da dokaže i nešto ljepše.

U toj klimi — pobjedničkoj, paranoičnoj, nabildanoj novcem i istovremeno moralno mamurnoj — jedan mađarski matematičar koji je pola rata proveo računajući koliko plutonija treba za implozivnu bombu (to je onaj tip atomske bombe kod kojeg se punjenje ne baca, nego se stišće samo sebe do eksplozije, poput oraha u čeljustima škripca) sad u glavi ima sasvim drugu ideju. Manje eksplozivnu. Ali, ispast će, dugoročno gledano, gotovo jednako sudbonosnu.

Zamisli da je tvoj mobitel spojen na struju kabelima koje moraš ručno prespajati svaki put kad želiš prijeći iz kalkulatora u kameru — ne pritisnuti ikonu, nego fizički izvući utikač iz jedne rupice i utrpati ga u drugu, prema planu koji izgleda kao karta podzemne željeznice u Tokiju. E, upravo je tako radio ENIAC, jedno od prvih pravih elektroničkih računala, sagrađeno neposredno nakon rata: da bi mu se promijenio zadatak, nije bilo dovoljno samo utipkati novu naredbu — cijeli se stroj morao, ruku na srce, ponovno sastaviti.

Electronic Numerical Integrator and Computer, dovršen 1945., djelo inženjera Johna Mauchlyja i Prespera Eckerta, bio je čudovište od 30 tona i 18.000 elektronskih cijevi — staklenih „žarulja” veličine šake koje su radile posao kakav danas obavlja tranzistor manji od zrnca prašine, samo što su se, poput žarulja, grozničavo grijale i s vremena na vrijeme pregorijevale, pa je netko od inženjerki ili inženjera stalno morao trčati po zamjenu. Sve to zajedno grijalo je prostoriju bolje nego bilo koja tadašnja peć. I bio je brz — za standarde tog doba, brzina munje. Problem je bio drugdje: ENIAC nije imao pojma što je „program” u smislu u kojem to danas shvaćamo. Nije se učitavao. Nije se pokretao klikom. Gradio se, fizički, iznova, za svaki zadatak.

Žene koje su radile na ENIAC-u — da, žene, cijela vojska programerki čije je ime povijest uporno gubila negdje između fusnota — morale su doslovno prespajati stotine kablova (zovu se „patch cords”, ako te zanima naziv) da bi stroj s računanja balističkih putanja topovskih granata prešao na, recimo, neki drugi matematički problem. To nije bilo „pokreni drugi fajl”. Bilo je to: izvuci ovo, utakni ono, provjeri je li spojeno na pravi „akumulator” — dio stroja koji je privremeno držao brojku dok se s njom računalo, otprilike kao kad zbrajaš u glavi i moraš pamtiti međurezultat prije nego stigneš do konačnog — pa se nadaj da nisi zabrljao jedan od tisuću mogućih spojeva.

Trajalo je to. Danima, ne minutama. Preprogramiranje ENIAC-a za novi zadatak znalo je potrajati duže nego sam zadatak koji je stroj trebao izračunati. Zamisli da kupiš superračunalo, a onda dva tjedna montiraš vodovodne cijevi da bi mu rekao što da radi. Genijalno u teoriji, noćna mora u praksi.

Ovdje dolazimo do sitnice koja je pokrenula cijelu lavinu. ENIAC su fizički sagradili inženjeri Eckert i Mauchly — oni su bili ti koji su, zajedno sa svojom vojskom programerki, morali gledati u tu šumu kablova i mučiti se s njom. I baš gledajući to gnijezdo žica, netko je postavio naizgled bezazleno pitanje: a što ako program — taj niz uputa koje stroj treba izvršiti — ne mora biti ožičen u hardver, nego može biti samo... podatak? Broj u memoriji, potpuno isti kao i brojevi koje stroj računa? Zamisli kuharicu u kojoj bi recept za tortu bio urezan u samu pećnicu, pa bi za svaki novi kolač trebalo razvaliti pećnicu i sagraditi novu — umjesto da recept i sastojci jednostavno leže u istoj ladici, spremni za zamjenu kad ti se prohtije. Upravo to je predloženo: da računalo samo čita svoje instrukcije iz istog mjesta gdje čuva i rezultate, umjesto da instrukcije budu zabetonirane u kabelima.

Zvuči kao sitnica, zar ne? Kao administrativna dosjetka, a ne otkriće koje mijenja svijet. Ali upravo je to obrazac ove priče — sitnica koja pokreće domino-efekt koji se, osamdesetak godina kasnije, ni danas ne zaustavlja.

Čovjek koji je tu ideju pretočio u pravi dokument, dao joj ime i — što je ključno za ovu priču — pritom je, sasvim slučajno, tu ideju nazvao svojim vlastitim prezimenom, zvao se John von Neumann. I baš je taj trenutak, kad program prestaje biti kabel a postaje broj u memoriji, granica između doba kad su računala bila projekti za vodoinstalatere i doba kad su postala sve ono što danas nosiš u džepu.

Jezgra koncepta, demistificirana
§ 02

Jezgra koncepta, demistificirana

Dobro, sad dolazimo do dijela zbog kojeg je ovo poglavlje uopće u knjizi, a ne samo fusnota u povijesti računala. Zaboravi za trenutak imena, godine i institute. Zamisli samo jedno pitanje: gdje računalo drži stvari koje mora pamtiti?

Prije von Neumanna, odgovor je bio pomalo shizofren. Podaci su bili na jednom mjestu — na bušenim karticama, komadima kartona s izbušenim rupicama koje su predstavljale brojeve, otprilike kao Braillovo pismo za strojeve. Program, dakle upute što stroj treba raditi s tim brojevima, bio je na potpuno drugom mjestu — u ENIAC-u je, kao što smo rekli, bio fizički ožičen. Kablovi, sklopke, ploče koje su izgledale kao telefonska centrala na LSD-u. Htio si zbrajati? Jedna konfiguracija kablova. Htio si množiti? Rastavi sve, spoji drugačije. Program i podaci su živjeli u dva potpuno različita svijeta koji se nikad ne dodiruju.

Von Neumann (i, budi strpljiv još dvije rečenice, tu je i drama do koje ćemo doći, ali za sada ostajemo na ideji) predložio je nešto što danas zvuči kao 'pa, valjda', ali 1945. je bilo jednostavno do te mjere da je gotovo zvučalo heretički: stavimo program u istu memoriju gdje su i podaci. Ne pored, ne u posebnu kutiju sa zaključanim vratima — u istu memoriju. Isti niz kućica, iste adrese, isti sustav za dohvat. Program postaje samo još jedan komad podataka koji stroj čita.

Zvuči nebitno kad to tako izgovoriš. Nije. To je razlika između kalkulatora koji zna raditi samo jednu stvar, zauvijek, i računala koje može biti bilo što — ovisno samo o tome što mu učitaš u memoriju. Isti fizički stroj koji je jučer računao putanju topovske granate danas može, teoretski, igrati šah. Ne zato što si presložio žice, nego zato što si mu u istu tu memoriju učitao drugačiji niz brojeva.

Zamisli kuharicu i namirnice na istom stolu, u istim ladicama, po istom sustavu numeriranja. Ladica 14 može sadržavati recept („dodaj dvije žlice brašna”), a ladica 15 može sadržavati samo podatak — recimo broj dva, kao količinu brašna. Kuhar u ovoj priči je procesor, onaj dio računala čiji je jedini posao izvršavati upute, jednu za drugom, brzinom o kojoj se tvojoj baki ni ne bi snivalo dok je mijesila tijesto. Procesor ne pravi razliku dok otvara ladice. On samo otvara ladicu, pogleda što je unutra i po tome zna je li dobio uputu ili sirovinu. Ako je uputa, izvršava je. Ako je sirovina, koristi je kako mu je prethodna uputa rekla. Pa otvara sljedeću ladicu. I sljedeću. I sljedeću.

Ovo je, u suštini, cijela von Neumannova arhitektura svedena na jednu rečenicu koju ćeš sad vidjeti kako se ponavlja u milijardu obrazovnih materijala do kraja civilizacije: dohvati („fetch”), dekodiraj („decode”), izvrši („execute”), pa dohvati sljedeće. Fetch-decode-execute. Uvijek iznova, milijarde puta u sekundi, na strojevima koji su, iskreno, glupi kao dvije stope betona — samo to radi brzo. Nema mudrosti u procesoru. Ima samo brutalno ponavljanje: pogledaj adresu, uzmi što je tamo, ako je uputa — poslušaj je, pomakni se na sljedeću adresu, ponovi.

Sad kontrast s onim ožičenjem „po zadatku” koje je krasilo ENIAC postaje jasan kao dan. Kod ENIAC-a promjena programa znači fizičku promjenu stroja: treba satima, danima, cijeli tim ljudi sa šarafcigerima i planovima spajanja koji fizički premještaju kablove s jedne utičnice na drugu. Kod von Neumannove ideje promjena programa znači samo promjenu sadržaja memorije — traje onoliko koliko treba da upišeš nove brojeve u ladice. Sekunde. Ili, mnogo godina kasnije, koliko treba da učitaš disketu, CD, ili da preuzmeš .exe datoteku s interneta i pokreneš je.

Ovo je, ako želiš, prvi trenutak u povijesti kad je „softver” stvarno postao odvojen od „hardvera” u smislu u kojem to danas razumijemo — ne fizički odvojen (memorija je ista, rekli smo), nego konceptualno odvojen. Stroj ostaje isti; ono što stroj radi mijenja se čisto promjenom podataka koje mu daš. To je razlika između alata i platforme. Čekić je alat — radi jednu stvar, i to je to. Von Neumannov stroj je platforma — radi bilo koju stvar koju mu opišeš u njegovom jeziku, a taj jezik živi u istoj kutiji gdje živi i sve ostalo.

I da, prije nego pomisliš da je ovo previše elegantno da bi bilo problematično — jest elegantno, ali ta elegancija ima svoju cijenu, i platit ćemo je detaljno kasnije u ovom poglavlju. Za sad zapamti samo jednu stvar: stroj koji ne razlikuje „ovo je uputa” od „ovo je broj”, osim po tome gdje trenutno gleda, taj stroj je istovremeno genijalan i, da upotrijebimo tehnički termin, jedna ogromna sigurnosna rupa koja čeka da je netko otkrije. Ali to je priča za kasnije. Sad samo upamti: program i podaci, ista memorija, ista pravila, isti kuhar koji otvara ladice bez pitanja što je u njima.

Von Neumann kao lik
§ 03

Von Neumann kao lik

Dobro, zaustavimo se malo na čovjeku, jer priča bez njega postaje samo suhi dijagram. János von Neumann — mađarski Židov, rođen u Budimpešti 1903. — i ako ti sad kažem da je već sa šest godina u glavi dijelio osmeroznamenkaste brojeve i da je s petnaest čitao Cantorovu teoriju skupova za zabavu (grana matematike koja se bavi time što uopće znači „veličina” kad govorimo o skupovima brojeva — štivo od kojeg i odraslim matematičarima zna proći glava, a on ga je gutao kao strip), vjerojatno ćeš pomisliti da to preskočim, da je riječ o onom tipičnom uvodu o geniju koji imaju svi slični tekstovi. Fer primjedba. Ali ovdje mit slučajno odgovara stvarnosti — čovjek je doslovno bio toliko brz da su mu kolege u Los Alamosu (tamo gdje se za vrijeme Drugog svjetskog rata razvijala atomska bomba, ozbiljnije mjesto ne postoji) davale zadatke kao test, ne zato što im je trebalo rješenje, nego da vide koliko će mu vremena trebati. Enrico Fermi je jednom priznao da je von Neumannu davao pitanja iz čiste zlobne znatiželje.

I tu dolazimo do prve stvari koju moraš zapamtiti: 1945. von Neumann nije bio čovjek koji je „usput” izmislio arhitekturu računala dok je čekao red za kavu. Bio je, i doslovno i simbolički, u samom središtu projekta koji je upravo završio rat — Manhattanskog projekta. Von Neumann je računao geometriju eksplozivnih lećica za implozijski tip bombe, onaj koji je bačen na Nagasaki: cijeli trik implozijske bombe je da eksploziv oko jezgre mora detonirati toliko precizno i ravnomjerno da stisne plutonij u kuglu iz svih smjerova istovremeno — kao da stišćeš snježnu grudu s dvadeset strana odjednom i moraš pogoditi baš pravu jačinu, inače dobiješ skupu buku umjesto lančane reakcije. On to nije radio teoretski, s margine — bio je jedan od ljudi čiji su brojevi odlučivali je li dizajn bombe fizički moguć. I upravo to računanje, ta brutalna količina numeričkih simulacija koje su ljudske „računarke” s ručnim strojevima za računanje rješavale tjednima, bio je jedan od glavnih razloga zašto je čovjek uopće otišao tražiti brže računalo. ENIAC mu nije bio intelektualna igračka. Bio mu je alat koji mu je nedostajao dok je pokušavao izračunati hoće li implozija raznijeti plutonij ravnomjerno ili će cijela stvar biti samo skupa buka.

Ono što je manje poznato — jer bomba je, jasno, ono što ostaje u udžbenicima — jest da je te iste 1944., dok je konzultirao za Los Alamos, objavio i knjigu koja je stvorila cijelu granu ekonomije. „Theory of Games and Economic Behavior”, napisanu s Oskarom Morgensternom. Teorija igara — matematika donošenja odluka kad ishod ne ovisi samo o tebi, nego i o tome što će napraviti drugi igrač, koji isto tako pokušava predvidjeti tebe. Danas je to ono što spomeneš kad objašnjavaš zašto se dvije nuklearne sile nikad neće prve dohvatiti oružja: to je logika uzajamno zagarantiranog uništenja, ideja da napad ima smisla samo ako preživiš uzvratni udarac, a ako ne preživiš, nema ga smisla ni pokušati — i ta logika je, ironično, dijelom njegova intelektualna djeca. Isto objašnjava i zašto dražbe funkcioniraju kako funkcioniraju, ili zašto se poker igra racionalno kad ga igraš dovoljno puta. Von Neumann je to formalizirao matematički u trenutku kad većina ekonomista nije ni znala da im nešto nedostaje.

Zato kad kažem „i ovo usput, iste godine” — ne pretjerujem, iako bih trebao, po pravilima ovog posla. Von Neumann 1945. paralelno radi na dizajnu bombe, piše temelje teorije igara, sanja o kontroli vremenskih prilika (da, ozbiljno je razmišljao da bi se računalima jednog dana moglo upravljati vremenom, ne samo predviđati ga) — i pritom, u istom razdoblju, sjedi na konzultacijama za nasljednika ENIAC-a, računalo zvano EDVAC, i skicira ideju koja će postati arhitektura svakog računala koje ćeš ikad dirati. Nije bio informatičar. Nije čak ni razmišljao o sebi kao o nekome tko „radi računala” — to mu je bio jedan od dvadesetak paralelnih projekata, negdje između bombe i vremenskih prognoza. Evo, i ja dok pišem CRUD-ove uz pomoć AI modela i spremam podatke u bazu — CRUD je samo kratica za ono najosnovnije što svaka aplikacija radi s podacima: stvori, pročitaj, promijeni, obriši (create, read, update, delete) — osjećam se kao osoba koja mijenja svijet. Doista (serem)!

First Draft of a Report on the EDVAC (1945)
§ 04

First Draft of a Report on the EDVAC (1945)

Ljeto 1945. Herman Goldstine, matematičar koji je radio s von Neumannom na EDVAC-u, sjedi i tipka. EDVAC je bio nasljednik ENIAC-a, ali s jednom presudnom razlikom: dok se ENIAC morao ručno prespajati kablovima i sklopkama za svaki novi zadatak — što je znalo trajati danima — EDVAC je trebao čuvati program u memoriji, isto kao i podatke, pa ga se moglo „preprogramirati” bez da inženjer fizički vadi žice. Goldstine ne piše knjigu, ne piše patentnu prijavu, ne piše ništa što bi u njegovoj glavi bilo „ovo je sad povijesni dokument”. Piše internu bilješku. Radni materijal. Nešto što će skupina inženjera pročitati, komentirati, možda ispraviti koju rečenicu i baciti u fascikl. Zove se, sasvim neambiciozno, »Prvi nacrt izvještaja o EDVAC-u« (»First Draft of a Report on the EDVAC«). Ne tvrdi ni da je gotov.

Na naslovnici stoji samo jedno ime: John von Neumann. Ne Goldstine, koji je dokument otipkao. Ne Eckert i Mauchly — inženjeri koji su fizički sagradili ENIAC i čije su ideje o dizajnu memorije uvelike oblikovale ono što je unutra. Samo von Neumann, jer je on taj koji je sjeo, sažeo tjedne rasprava radne skupine i sve to strukturirao u dokument koji konačno ima logiku od početka do kraja. Ime je bilo njegovo jednostavno zato što je on posljednji stavio olovku na papir — administrativna sitnica, u tom trenutku nevažna kao pitanje tko je zadnji potpisao račun za pizzu.

Samo — nije bila nevažna. I upravo tu poglavlje počinje mirisati na benzin.

Zvuči kao sitnica, znam. Papir koji je trebao ostati u fascikulu umjesto toga završio je u desecima poštanskih omotnica, poslan kolegama na uvid. Ali to je upravo mehanika lančane reakcije o kojoj ovo poglavlje govori — sitni administrativni detalj, ime na naslovnici radnog dokumenta, jedna odluka o distribuciji koju danas ne bi ni zabilježio nitko od nas u mailu — i odjednom imaš pravnu bitku koja traje desetljećima, patente koji propadaju, i ime koje postaje sinonim za arhitekturu koju su graditelji tog istog EDVAC-a (nasljednika ENIAC-a, računala kojeg su fizički sagradili inženjeri Eckert i Mauchly) smatrali dobrim dijelom svojom.

Von Neumann sam, koliko znamo, nikad nije previše mario za taj spor. Imao je bombu za dovršiti i teoriju igara za formalizirati (o čemu više u prošloj sekciji) — priznanje za jedan memorandum mu je vjerojatno bilo negdje na dnu popisa briga. Eckertu i Mauchlyju, koji su strojeve gradili rukama i čekali patent koji im je trebao osigurati budućnost firme, to nikako nije bila sitnica. Za njih je to bila razlika između toga da postanu bogati vlasnici temeljnog patenta cijele računalne industrije ili da završe kao tek još dva imena u fusnoti. Kako je ta priča završila — i koliko je von Neumann uopće bio svjestan što se događa — pitanje je za posebno poglavlje, ono s naslovom koji već sluti da će netko iz njega izaći oštećen. Ovdje ostajemo samo kod jedne rečenice koju vrijedi zapamtiti: ideja koja je sve promijenila procurila je iz radne skupine kao slučajni nusprodukt birokracije, a ne kao proglašenje s postolja.

Zašto je pobijedilo
§ 05

Zašto je pobijedilo

Da stvar bude jasna — von Neumann nije bio jedini koji je razmišljao o tome kako spojiti mozak i pamćenje računala. Paralelno, na Harvardu, Howard Aiken je gradio svoj Mark I i Mark II po posve drugoj logici: program i podaci žive odvojeno, u dvije različite memorije, s dvije različite sabirnice koje ih dovode do procesora — sabirnica je, jednostavno rečeno, „cesta” kojom podaci putuju od memorije do procesora i natrag, i što ih je više, to manje gužve na raskrižju. Zove se, ne slučajno, Harvardska arhitektura. I zvuči, iskreno, kao pametnija ideja. Program ne može slučajno pisati preko sebe, podaci ne mogu slučajno postati instrukcije, sve je uredno razdvojeno kao čarape od gaćica u ladici. Zašto smo onda svi završili s onom drugom?

Odgovor nema veze s elegancijom. Ima veze s računom u dnu stranice.

Zamisli da 1945. praviš stroj koji misli. Memorija — bilo koja memorija, žive elektronske cijevi, kasnije bubnjevi, kasnije jezgre feritnih prstenova — skupa je. Ne skupa kao „jao, poskupio kruh”, nego skupa kao „ovo košta skoro kao mala vikendica”. Sad zamisli da ti netko kaže da ti treba dvije takve memorije: jednu za program, jednu za podatke. Svaku sa svojim kontrolerom, svojom sabirnicom, svojim inženjerima koji moraju paziti da se ne pregrije i da ne zaboravi što je upamtila. Odjednom ne pravimo jedan skupi stroj — pravimo dva, zalemljena u isto kućište, koji se moraju dogovarati preko treće instance koja prevodi između njih. Von Neumannova ideja — jedna memorija, i za kod i za podatke, procesor koji ne pita odakle bajt dolazi (bajt je, ako se pitaš, osnovna jedinica pamćenja — zamisli ga kao jednu kutijicu u kojoj stoji jedno slovo ili jedan mali broj) nego samo što s njim treba napraviti — nije pobijedila zato što je konceptualno čišća. Pobijedila je zato što je jeftinija. Duplo jeftinija, otprilike, ako brojiš samo memorijske module — a 1945. baš to i brojiš, jer to je stavka koja jede budžet.

I ne, nije izgubila posve — tu je i poanta koju laik rijetko čuje. Postoji, naime, i suprotan pristup, tzv. Harvardska arhitektura, nazvana po sveučilištu gdje se rodila jedna od ranih varijanti s odvojenom memorijom za program i podatke — baš onaj skupi dvostruki sustav o kojem je bila riječ. I ta ideja nije umrla, samo se preselila u drugi kvart grada. Danas, u tvom mobitelu, u čipu koji upravlja touchpadom na laptopu, u DSP-u (procesorčiću specijaliziranom isključivo za obradu signala, recimo zvuka s mikrofona ili slike s kamere), sasvim mirno radi neka varijanta te arhitekture. Kad procesor mora biti brz i predvidiv, a memorija je jeftina — mala, ugrađena, fiksna — razdvajanje se opet isplati; nema više onog troška koji je 1945. bio presudan, pa se stara logika vraća na mala vrata. Ali za opće računalo, ono koje treba pokretati bilo koji program koji mu daš, jedna memorija je pobijedila jer je ekonomija toga vremena to tražila, ne jer je fizika ili logika to nalagala.

Da malo prizemljimo priču brojkama, iako su nužno grube — memorijska jedinica na ranim strojevima tog doba, one žive elektronske cijevi organizirane u memoriju, znala je stajati koliko danas staje pristojan obiteljski automobil, po kilobajtu. Ne po gigabajtu. Po kilobajtu. Kad ti jedan bajt pamćenja vrijedi kao večera za četvero u finom restoranu, ideja „pa napravimo dvije odvojene memorije, svaku za svoj slučaj” prestaje biti inženjerska rasprava i postaje pitanje hoće li projekt uopće dobiti odobrenje financiranja. Von Neumannov pristup je, u praksi, značio: umjesto dva skupa spremišta, jedno veliko, koje procesor tretira fleksibilno — čas kao uputu, čas kao broj, ovisno što mu u tom trenu treba. Ista polica, dvije vrste knjiga, jedan bibliotekar koji zna gdje je koju stavio.

I tu se, gotovo slučajno, rodila i druga prednost o kojoj se rjeđe priča — fleksibilnost. Odvojene memorije znače fiksne veličine za svaku namjenu, unaprijed definirane, teško promjenjive nakon što je stroj jednom zalemljen. Jedna zajednička memorija znači da granicu između „ovo je program” i „ovo su podaci” možeš mijenjati u hodu, ovisno o tome što baš u tom trenu radiš. Za istraživački stroj koji se svaki tjedan koristi za drugi problem — nekad simulaciju bombe, nekad meteorološki model — to nije luksuz, nego nužnost. To je razlika između stroja koji možeš prenamijeniti telefonskim pozivom i stroja koji moraš fizički rastaviti.

Dakle: ekonomija je diktirala arhitekturu, a fleksibilnost je bila lijep bonus koji je opravdao odluku naknadno, u retrospektivi, kao da je bila plan od početka. Nije bila. Bila je najjeftinije rješenje koje je usput ispalo i najpametnije. To se u povijesti tehnologije događa čudno često — i skoro nikad ne piše u udžbeniku baš tim riječima.

Payoff — cijena odluke danas
§ 06

Payoff — cijena odluke danas

Dobro, vrijeme je za obračun. Von Neumann je 1945. na papiru riješio jedan praktičan problem — kako stroj promijeniti zadatak bez brigade s kliještima u ruci — i u tom istom potezu, bez ikakve svečane najave, stvorio je i najveći sigurnosni propust u povijesti računarstva. Ne kao grešku, nego kao nuspojavu. Onu vrstu nuspojave koja se ne vidi dok ne prođe osamdeset godina, a onda odjednom shvatiš da je posvuda.

Sjeti se jezgre: podaci i program žive u istoj memoriji, u istim kutijicama, jedni pored drugih, i memorija ne pravi razliku — za nju je sve samo niz brojeva. To je razlog zašto tvoj laptop može ovog trena biti Excel, a za tri sekunde Call of Duty — isti hardver, samo drugi brojevi upisani u iste kutijice. To je čudo. Ali čudo ima cijenu, i ta se cijena zove: memorija ne zna što čuva.

Zamisli policu u dućanu na kojoj stoji, jedno pored drugog, bez pregrade, limenka graha i detonator. Sve dok kupci uzimaju točno onu količinu koju su naručili, nema problema — grah ide u grah, detonator ostaje na miru. Ali dan kad neki kupac, greškom ili namjerno, potraži malo više graha nego što je naručeno, a police nemaju zid između sebe, odjednom mu u ruci nije grah. To je, doslovno, buffer overflow (prelijevanje spremnika), a prije nego objasnim taj izraz, evo što je buffer: to je samo kutijica fiksne veličine u memoriji, rezervirana da u nju stane točno određena količina podataka — kao čaša od dva decilitra u koju, po dogovoru, staje dva decilitra vode i ni kap više. Program očekuje da će mu u tu kutijicu stati recimo osam slova imena. Netko upiše četrdeset. Ta slova ne isparavaju u nebo, moraju otići negdje, a to negdje je sljedeća kutijica u nizu. A ta sljedeća kutijica, zahvaljujući čovjeku kojeg smo upravo portretirali, može sasvim slobodno sadržavati dio programa. Instrukcije. Naredbe što stroj sljedeće treba napraviti.

E vidiš, upravo tu je čitava industrija hakiranja pronašla svoj prvi, najstariji i najplodniji alat. Prepišeš dovoljno pametno ono što se „prelije” preko granice kutijice, i nisi samo pokvario program — upisao si mu nove naredbe. Naredbe koje si ti napisao. Stroj ih čita s istim povjerenjem kojim čita sve ostalo, jer, sjeti se, on ne pravi razliku. Za stroj je sve isto: brojevi u kutijicama, čitaj–izvrši–idi dalje. Ako si mu u tim brojevima ostavio poruku „otvori mi vrata i pusti me da radim što hoću”, stroj će to poslušno izvršiti. Nije zlonamjeran. Nema pojma. Samo radi svoj posao.

Morris Worm 1988. — prvi crv koji je prošao internetom i ugasio dobar dio tadašnje mreže — bio je klasičan buffer overflow. Crv je, ako se pitaš, samo zlonamjeran program koji se sam umnožava i sam širi s računala na računalo, bez da ga netko mora ručno kopirati — zamisli prehladu koja se sama pobrine da kihneš točno na sljedeću žrtvu. Heartbleed 2014., propust koji je razotkrio lozinke pola interneta, nije bio čak ni prelijevanje, nego čitanje preko granice — sestrinska greška iz iste obitelji. Bezbroj napada na igraće konzole, rutere, pametne kamere, medicinske uređaje s pumpom za inzulin — svi negdje pri dnu imaju istu rečenicu: „program je očekivao manje podataka nego što je dobio, a memorija nije imala zid”. Osamdeset godina kasnije. Ista arhitektura, isti dizajn, ista rupa.

I tu je onda ljepota, ili tragedija, kako hoćeš gledati — arhitektura koja je omogućila da isti stroj bude i pisaći stroj i kalkulator, i kasnije i tvoj telefon, i tvoj auto, i respirator u bolnici, ta ista arhitektura omogućila je i to da neki dosadan tinejdžer u sobi, s dovoljno strpljenja, provali u sve od navedenog. Nema univerzalnog računala bez te fleksibilnosti. A nema te fleksibilnosti bez rupe koja je, zapravo, njezina sjena. Ne možeš uzeti jedno bez drugog.

Osamdeset godina kasnije čovjek koji je taj koncept napisao za jedno ljetno popodne, u memorandumu koji je trebao biti interna skica, sjedi negdje u panteonu genija dvadesetog stoljeća — pored atomske bombe, pored teorije igara, pored vremenske prognoze. A ispod svega toga, u svakoj kutijici memorije na svakom uređaju koji trenutno negdje u tvojoj blizini bruji, tiho čeka ista, stara, nepromijenjena odluka: nema zida između podataka i naredbi, samo povjerenje da će se svi ponašati kako treba. A znaš ljude. Neće.