Chrome i V8 (2008)

Google je jednog dana rekao 'JavaScript treba biti brz' i deset godina kasnije cijeli internet radi u njegovom motoru.

poglavlje 24/2420 min čitanja2001 – 2010

Godina je 2008., a tvoj preglednik – onaj program kroz koji gledaš internet, bio to Chrome, Firefox ili nešto treće – ako radiš u nekoj tipičnoj firmi, zove se Internet Explorer 6. Star je sedam godina. Sedam! U internetskim godinama to je kao da voziš konjsku zapregu i tvrdiš da je to vrhunac automobilske industrije. Developeri po forumima pišu tugaljive ode njegovoj smrti koja, nažalost, kasni — hakiraju CSS (kod koji određuje kako stranica izgleda, boje, razmake, fontove) posebnim trikovima koji imaju svoja imena samo da prevare IE6 da prikaže stranicu kako treba, crtaju dijagrame kompatibilnosti kao da su kartografi nepoznatih kontinenata, i svi znaju istu jednostavnu istinu: IE6 se neće maknuti dok mu ga netko ne otme iz mrtvih, hladnih ruku enterprise IT odjela.

S druge strane barikade stoji Firefox, mali lisac s velikim srcem, koji polako grize tržišni udio zub po zub, poduprt idealizmom otvorenog koda (softvera čiji je kod svima dostupan za gledanje, korištenje i doradu, bez plaćanja i bez skrivenih katanaca) i mrežom ljudi koji stvarno vjeruju da web treba biti bolji. Grickanje je pošteno, ali sporo. Monopol ne pada od grickanja — pada od udarca.

A onda imaš JavaScript. Jezik koji je, prisjetimo se, sklepan u deset dana (K4, poglavlje 6 — ta priča nikad ne prestaje boljeti) i koji je u ovom trenutku, 2008., dobio reputaciju koju je itekako zaslužio: spor je, trom, radi za male animacijice, potvrde formulara, ono malo kad ti nešto zatreperi na stranici. Formica web programiranja — koristan da nosi mrvicu, katastrofalan da nosi kuću. Nitko normalan ne bi u njega ulagao ozbiljan inženjerski novac. Nitko normalan.

Samo — Google nije normalan u ovom smislu, jer Google nema izbora. Cijeli njegov biznis, Gmail koji ti tiho učitava mailove u pozadini, Maps koji pomiče kartu bez da se stranica ponovno učita (ono AJAX čudo iz petog poglavlja, sjećaš se onog tereta koji je nosilo), sve to živi unutar preglednika, i to najviše upravo u tom prezrenom, sporom JavaScriptu. Ako ti je cijela tvrtka parkirana na jednoj cesti, a ta cesta je puna rupa, ne čekaš da je popravi gradska uprava. Kupiš buldožer.

I tako, negdje u tišini Mountain Viewa — googleovog kampusa u Kaliforniji, gdje se rađa pola stvari o kojima ova enciklopedija priča — tim inženjera ne pravi još jedan preglednik. Jedan od njih, Lars Bak, dolazi s rodoslovljem koje seže do Smalltalka i Dartova pretka virtualnih mašina, o čemu više na sljedećih par stranica. Ono što tim zapravo pravi je motor: onaj dio ispod haube koji nitko ne vidi, a koji određuje koliko brzo cijela stvar juri.

Kad je vrijeme da se to najavi svijetu, Google ne priprema priopćenje za medije s tri paragrafa marketinškog blebetanja. Naručuje strip. Doslovno — Scott McCloud, čovjek koji je pisao teoriju stripa kao ozbiljnu umjetničku formu, crta 38 stranica u kojima inženjeri kroz sličice i oblačiće objašnjavaju procese, izolaciju tabova (svaka kartica u pregledniku radi u svom zasebnom, ograđenom dvorištu, tako da kad jedna pukne, ne povuče sve ostale sa sobom) i garbage collection — automatsko čišćenje memorije, gdje motor sam prepoznaje podatke koje program više ne koristi i briše ih, umjesto da programer to mora raditi ručno i, neizbježno, negdje zabrljati.

Nitko od njih te 2008. ne zna da će formica, ako joj dovoljno ubrzaš noge, prestati biti formica.

Krajem 2006. Bak, Danac koji je prije optimizirao Smalltalk i pomagao rađati Java virtualnu mašinu — dva jezika koja su u akademskim krugovima važila za ozbiljne — sjedio je u Googleu i radio na nečemu što je zvučalo kao kazna. Sad je trebao ubrzati JavaScript. Isti onaj jezik koji je Brendan Eich sklepao u deset dana da bi animirao dropdown menije (K4, poglavlje 6), jezik o kojem su svi u industriji imali isto mišljenje: frizbi za mrave, ne za ljude koji se bave pravim poslom.

Problem je bio jednostavan, a pritom civilizacijski. Google je 2008. već imao Gmail i Maps, aplikacije koje su živjele od JavaScripta učitanog u tvom pregledniku, a taj JavaScript je bio spor kao da vozi po pijesku. Ne zato što je jezik loše osmišljen, nego zato što ga nitko nikad nije ozbiljno tretirao. Postojeći interpreteri su radili ono što interpreteri rade: čitali kod red po red, prevodili ga u sitne komadiće, izvršavali ga, zaboravili ga, i onda sve to ponovno izveli kad se ista petlja pokrene po tisući puta u sekundi. Svaki put ispočetka. Kao da netko svaki put kad ide na posao mora ponovno učiti voziti auto.

Bak i njegov tim (motor su nazvali V8, baš kao autoklipmotor — ne osobito suptilno, ali funkcionira) napravili su nešto što do tada nitko nije ozbiljno pokušao za JavaScript: pravi JIT kompajler. „Just-in-time” znači da se kod ne interpretira iznova svaki put, nego se prevodi direktno u mašinski kod, u hodu, dok se izvršava. Zvuči komplicirano, i jest, ali suština je prizemna: umjesto da svaki put objašnjavaš istu stvar strancu na ulici, jednom je zapišeš na papirić i onda samo pokažeš papirić. V8 je otišao i korak dalje — pratio je koje se funkcije pozivaju najčešće i te je posebno agresivno optimizirao, dok je rjeđe korištene ostavljao sporijima. Nema smisla trošiti energiju na kod koji se pozove jednom.

Kad je V8 izašao u javnost zajedno s Chromeom u rujnu 2008., rezultati testova brzine bili su brutalni u onom najboljem smislu te riječi. SunSpider, standardni „poligon” na kojem se mjerila brzina JavaScripta, pokazivao je da V8 obrađuje isti kod deset, ponekad i dvadeset puta brže od tadašnjeg standarda u Internet Exploreru. Ne dvadeset posto — dvadeset puta. Red veličine razlike, ne kozmetička nadogradnja.

I tu je počeo rat koji do danas traje pod površinom svakog browsera koji otvoriš. Mozilla je ubrzano radila na TraceMonkeyu, Apple je gurao Nitro u Safari, a Microsoft je, kao i uvijek u tom razdoblju, kasnio korak iza svih (K4, poglavlje 4, opet kuca na vrata — IE6, star sedam godina, i dalje de facto standard iz čiste inercije, ne zasluge). Ali bitka nije bila samo marketinška. Svaka desetinka sekunde ubrzanja značila je da developeri mogu zamisliti aplikacije koje prije nisu mogli ni sanjati u browseru. Sitnica — jedan tim koji odluči da spori jezik zaslužuje ozbiljan motor — upravo je bacila prvi kamenčić. Ono što slijedi je domino koji se, ispada, do danas nije zaustavio.

Prva posljedica: browser kao OS
§ 02

Prva posljedica: browser kao OS

Dobro, V8 je brz. Ali brzina JavaScripta je samo pola priče — jer dok su inženjeri crtali dijagrame ubrzanja, netko je u istoj zgradi postavio pitanje koje nije imalo veze s brzinom: što se dogodi kad ti jedan tab pojede cijeli browser? U Internet Exploreru i starom Firefoxu odgovor je bio jednostavan i ružan — sve umre. Otvoriš dvadeset tabova, jedan Flash element (ono malo animirano ili video sučelje koje se prije desetljeće i pol lijepilo na pola interneta, a bilo je notorno nestabilno) na nekoj stranici pukne, i cijeli prozor se zamrzne kao da si mu isključio struju. Cijela sesija, sve što si radio, u kanticu. To nije bio bug koji se povremeno dogodi — to je bila arhitektura. Jedan proces, sve u njemu, sve zajedno tone.

Chrome je došao s idejom koja danas zvuči kao da se sama nameće, a 2008. je bila skoro pa hereza za nešto što se do jučer zvalo »samo program za čitanje stranica«: svaki tab je zaseban proces. Da razjasnimo o čemu je riječ — proces je, u očima operativnog sustava, samostalna cjelina s vlastitom memorijom i vlastitim resursima, potpuno odvojena od svih ostalih; to je ona kutijica koju vidiš u Task Manageru kad tražiš što ti jede računalo. Chrome nije napravio zaseban prozor, ni zasebnu traku unutar istog programa — napravio je zaseban proces za svaki tab, kojeg operativni sustav gleda kao potpuno nezavisnu jedinicu, baš kao što gleda Word ili Spotify. Padne li stranica koja pokušava izvesti nešto kreativno s tvojom RAM memorijom, umre taj jedan proces. Ugasi se taj jedan tab, dobiješ tužnu ikonicu, i dalje ti rade svi ostali devetnaest. Zvuči trivijalno kad to izgovoriš u jednoj rečenici. Nije bilo trivijalno napraviti — bila je to ista stvar koju operativni sustavi rade desetljećima s aplikacijama, sad prevedena na svijet unutar jednog programa. Browser je, u tom trenutku, prestao biti program. Postao je platforma koja pokreće druge programe. Postao je, iskreno, mali operativni sustav koji se pretvara da je samo prozorčić za internet.

Druga stvar koju je Chrome donio bila je gotovo provokativno skromno sučelje. Dok su konkurenti tog doba imali trake preko traka — traku za pretragu, traku za adresu, traku s dugmićima koje nitko ne koristi, traku nekog toolbara koji si nesvjesno instalirao zajedno s besplatnim screensaverom — Chrome je stavio jednu jedinu traku na vrh i rekao: ovo je i adresa i pretraga, snađi se. Zvali su je »omnibox«, i to je bila poanta cijelog dizajna — ne dodavati, nego oduzimati. Manje ukrasa oko sadržaja, više prostora za samu stranicu. Ime browsera je, uzgred, ironija koju netko u marketingu sigurno nije planirao: Chrome na engleskom znači krom, onaj sjajni metalni rub oko ekrana ili kućišta uređaja — a proizvod se tako zove baš zato što je taj rub svjesno smanjio na minimum.

Treća posljedica je ona koja je najviše promijenila kako doživljavaš softver, a najmanje se o njoj pričalo. Chrome se ažurirao sam. Tiho. U pozadini, bez pitanja, bez dijaloga koji te pita jesi li siguran, bez restarta koji ti blokira jutro. Jednog dana imaš verziju s brojem, drugog dana imaš drugu verziju s drugim brojem, i nikad nisi kliknuo ništa da se to dogodi. Usporedi to s Windows XP-om iz istog desetljeća (poglavlje 4) — gdje je izlazak service packa bio događaj, s press konferencijom i danima preuzimanja i administratorima sustava koji su se molili da im ništa ne pokvari mrežu. Verzija je bila stvar, artefakt, nešto što kupiš u kutiji ili čekaš mjesecima. Chrome je tu ideju tiho ugasio. Softver je prestao biti kip koji stoji na istom mjestu godinama — postao je tekućina koja se mijenja dok ti nisi gledao. Danas to smatramo toliko normalnim da ti pitanje „koju verziju preglednika koristiš” zvuči skoro pa čudno, kao pitanje kojom si vodom oprao ruke. Nitko ne zna broj verzije. Nitko ne treba znati. I baš to je bila poanta — cijela stvar je trebala postati nevidljiva infrastruktura, kao struja iz zidne utičnice.

Nijedna od te tri stvari — odvojeni procesi za svaki tab, minimalističko sučelje, tihi update — nema izravne veze s tim koliko brzo V8 množi brojeve. Ali sve tri su rođene iz iste filozofije koja je stajala iza cijelog projekta: preglednik nije više dodatak uz operativni sustav, preglednik je taj operativni sustav, samo ga svi još zovu drugim imenom iz navike. A kad jednom prihvatiš tu premisu, sve odluke koje slijede postaju logične, skoro same po sebi razumljive. Pitanje koje je preostalo bilo je samo koliko će dugo ostatku industrije trebati da to prizna.

Eskalacija: rat motora
§ 03

Eskalacija: rat motora

E, sad dolazi zanimljivi dio lančane reakcije — onaj gdje domino koji je pao na jednom kraju stola počinje rušiti sve redom kroz cijelu prostoriju, a nitko ga više ne može zaustaviti. Google je pokazao da JavaScript može biti brz. Ne malo brz — deset, dvadeset, na nekim testovima i pedeset puta brži nego prije. I odjednom su svi ostali proizvođači preglednika imali isti problem: kako objasniti korisnicima da je njihov motor, u usporedbi s V8, otprilike brzine mrtvog puža na asfaltu u srpnju.

Mozilla je imala SpiderMonkey, motor koji je pokretao JavaScript još od 1995. — Brendan Eichov izvorni motor. SpiderMonkey je do 2008. bio pošten, radan, prosječan interpreter — što znači da je kod čitao i izvršavao red po red, kao da svaki put iznova prevodi istu rečenicu umjesto da je jednom nauči napamet. Poslije Chromea, Mozilla ga je gurnula u teretanu — TraceMonkey, pa JägerMonkey, pa cijela serija majmunskih nadimaka koji su, svaki put, značili isto: još jedan sloj JIT kompilacije nabačen na motor koji to nikad nije trebao raditi ovako brzo.

Apple je imao slično buđenje. Njihov JavaScriptCore, motor koji tjera Safari, prošao je kroz vlastitu preobrazbu koja se — bez ikakve suptilnosti u marketingu — zvala SquirrelFish, a onda SquirrelFish Extreme. Da, ekstremna vjeverica. Nemoj me pitati tko je smislio te nazive, valjda netko kome je bilo zabavno gledati kako inženjeri iz konkurentskih firmi objavljuju blogove pod naslovima poput »naš motor je sad brži od vašeg majmuna«.

Rezultat te utrke — benchmarkovi (testovi brzine kojima se motori uspoređuju jedan s drugim, kao atletsko natjecanje, samo umjesto sprintera trče algoritmi) koji su iz mjeseca u mjesec mijenjali pobjednika, timovi koji su objavljivali brojke kao rezultate pravih sportskih natjecanja — jest da je JavaScript za dvije-tri godine prešao put koji jezici obično prelaze u dvadeset. Ono što je 2007. bio sporedni jezik za validaciju formi na webu, do 2011. je bio dovoljno brz da na njemu ozbiljni ljudi razmišljaju o ozbiljnim stvarima. Plima je digla sve brodove. Baš svaki. Samo jedan brod nije imao motor koji je uopće vrijedilo dizati.

Internet Explorer je 2008. imao IE8 u pripremi, s JavaScript motorom koji se, da budemo fini, jedva vukao. Microsoft je taj motor nazvao Chakra tek 2011. — do tada je IE trčao na nasljeđu koda koje je vrijeme davno trebalo zamijeniti. A tu leži ironija koju ovoj priči ne treba dodatno soliti: isti IE koji je devedesetih zgazio Netscape brzinom, agresijom i besplatnošću (K4, poglavlje 4 — sjećaš se browserskog rata i AOL-ovog kupovanja leša?) sad je umirao od potpuno drugog uzroka. Ne od konkurencije. Od vlastite mišićne atrofije.

To je ono što monopol radi tijelu — bilo tijelu firme, bilo tijelu carstva, bilo, ako želiš ići još dalje, tijelu bilo koje institucije koja godinama nema razloga da se trudi. IE je sedam godina (K4, poglavlje 4, opet — sjećaš se onog citata o IE6 kao standardu koji su developeri proklinjali u himnama?) bio »dovoljno dobar« jer nije morao biti bolji. Nitko ga nije gonio. A kad je konkurencija napokon došla, nije došla u obliku boljeg sučelja ili agresivnije marketinške kampanje — došla je u obliku motora koji je bio red veličine brži, i IE je otkrio da mišić koji se ne koristi sedam godina ne oživiš preko noći, koliko god inženjera bacio na problem.

Brojke govore same za sebe, i govore brutalno. Chrome je lansiran u rujnu 2008. s udjelom koji je, zaokruženo, iznosio nula. Statistička greška. Do kraja 2009. bio je na oko 4 posto globalnog tržišta — dovoljno da ga primijetiš, ne dovoljno da ga se bojiš. 2011. prelazi 20 posto, i tu postaje jasno da se dogodilo nešto ozbiljnije od trendovskog hypea. 2012. Chrome prestiže Internet Explorer po globalnom udjelu — prvi put u povijesti da monopolist s preko 90 posto tržišta (koliko je IE imao u svom zenitu ranih 2000-ih) padne ispod novog igrača za manje od pet godina. Netscapeu je za propast trebalo pet, šest godina, i ni antitrust presuda protiv Microsofta — sudska odluka iz 2000. koja je utvrdila da je Microsoft monopolistički gušio konkurenciju baš gurajući IE na štetu Netscapea — nije stigla na vrijeme da ga spasi. Chrome nije imao suđenje, nije imao antitrust presudu, nije imao ništa osim brzine i tihe distribucije preko Googleovih vlastitih proizvoda.

Petogodišnji obrat od nule do dominacije nema premca u povijesti internetskih preglednika — Netscapeu je trebalo gotovo isto toliko vremena da izgradi svoje tržište, a onda ga je izgubio brže nego što ga je izgradio; IE-u je trebalo gotovo desetljeće da izgradi dominaciju koju je izgubio za manje od pet godina. Chrome je oba ta procesa, izgradnju i pad konkurencije, stisnuo u jedan jedini ciklus — i to bez ičije pomoći iz sudnice, samo motorom koji je bio brži i inercijom koja se, kad je jednom krenula, pokazala nezaustavljivom.

Domino: JavaScript izlazi iz browsera
§ 04

Domino: JavaScript izlazi iz browsera

E sad dolazi domino koji je Google, iskreno, jedva planirao — ili je bar tvrdio da nije. Negdje 2009., dok se svijet još čudio kako to da mu Chrome ne pojede laptop, jedan tip po imenu Ryan Dahl sjedi i gleda V8 motor kako mljavi JavaScript brzinom koja je do jučer bila nezamisliva, i pita se nešto naizgled bezazleno: zašto ovo pustiti samo unutar preglednika? Zašto formica smije trčati jedino u kavezu tabova, kad joj je netko upravo ugradio motor od tristo konja?

Dahl uzima V8, čupa ga iz Chromea kao motor iz automobila i ugrađuje ga u posve drugo vozilo — server. Rezultat se zove Node.js, i to je taj trenutak kad se cijela ova priča, koja je do sad bila o brzini u pretraživaču, pretvara u nešto puno veće. Jer jezik koji je desetljeće i pol nosio etiketu „igračka za validaciju formulara” — sjećaš se, poglavlje 6, jezik za formice napisan u deset dana — sad odjednom radi na serveru. Ozbiljno. Poslužuje baze podataka. Šalje mailove. Drži infrastrukturu tvrtki vrijednih milijarde. Formica je prerasla u nešto što nosi teret.

Ali ovdje domino ne staje, on se tek zagrijava. Kad imaš JavaScript na serveru, dobiješ nešto što se prije smatralo fantazijom: jedan jezik za cijeli stack — žargonski izraz za sve slojeve jedne web aplikacije, od onog što vidiš u pregledniku (frontend), preko servera koji sve to pogura (backend), do baze podataka na samom dnu. I ta baza sad govori JSON, format zapisa podataka kojeg razumiju i baza i JavaScript, tako da nitko ne mora prevoditi s jednog jezika na drugi — sve isti dijalekt. Nema više prebacivanja mozga iz PHP-a u JavaScript i natrag u SQL, sve odjednom, cijeli dan. Firmama je to zvučalo kao san — jedan tim, jedan jezik, jedno tržište developera. I taj san je, htjeli-ne htjeli, povukao za sobom cijeli svemir — npm, taj beskrajni ekosustav paketića koji ćemo detaljnije obraditi u poglavlju 6 knjige 6, gdje ćemo i vidjeti kako se ta ideja „olakšajmo si posao” pretvorila u zavisnosti dubine tristo slojeva za projekt koji lijevo-desno miče jednu boju.

A dok se to događalo na serveru, u pregledniku se odvijala paralelna priča — tiha, ali isto tektonska. AJAX aplikacije, one koje smo spomenuli kod Gmaila i Mapsa, više nisu bile trik ni izuzetak. S motorom koji ih je konačno tjerao pravom brzinom, one postaju norma. Nema više ograde koja kaže 'ovo je web stranica, a ovo je program' — granica se jednostavno topi. Google Docs uređuje dokument brže nego što bi ti otvorio Word. Cijele aplikacije, kompleksne, koje pamte što radiš i gdje si stao (u žargonu: stateful, za razliku od stare web stranice koja bi zaboravila sve čim je refreshaš), žive isključivo unutar jednog taba, bez ijednog instalacijskog čarobnjaka koji te vodi klik po klik kroz postavljanje programa na disk.

I onda dolazi logičan, pomalo apsurdan sljedeći korak: Chromebook. Računalo čiji je operativni sustav, u suštini, sam preglednik. Ne 'preglednik koji radi na računalu', nego računalo koje JE preglednik, i ništa više. Zvuči kao šala inženjera koji su otišli predaleko sa svojom idejom, ali prodalo se u desetinama milijuna komada, uglavnom školama koje su konačno dobile uređaj kojem ne treba antivirus, jer nema što ni zaraziti osim jedne aplikacije koja se zove 'internet'.

Zaustavi se sekundu i pogledaj što se upravo dogodilo. Netko je 2008. htio da mu se JavaScript brže vrti u pretraživaču. Rezultat, nekoliko domina kasnije: jezik koji su svi prezirali postao je jezik servera, jezik cijelih firmi, jezik na kojem rade startupovi vrijedni milijarde, i naposljetku razlog postojanja cijele kategorije računala. Lančana reakcija rijetko izgleda dramatično kad krene. Krene tako da neki tip u Googleu kaže: „ma dajte da ovo malo ubrzamo”.

Svijet kakav poznaješ (s računom)
§ 05

Svijet kakav poznaješ (s računom)

I evo nas, krug zatvoren. 2025. Chrome drži negdje oko dvije trećine tržišta preglednika — ovisno koji brojač gledaš, malo više, malo manje, ali dovoljno da svaka rasprava o novom web standardu praktički počinje s pitanjem: hoće li to Google ugraditi u Chrome? Ako hoće, standard postoji. Ako neće, standard je akademska vježba koju piše troje ljudi u sobi za sastanke W3C-a — organizacije koja bi trebala propisivati pravila igre za sve preglednike, otprilike kao pravilnik nogometne igre, samo što je pitanje ima li smisla pisati pravilnik kad jedan igrač sam kontrolira i loptu i teren. Zvuči poznato? Trebalo bi. To je bio točno opis Internet Explorera 2003., iste rečenice, samo drugo ime u njoj.

Ne, Chrome nije zao na način na koji je IE bio zao — nema »ActiveX« kontrola (starih, sumnjivih dodataka koji su imali pristup cijelom tvom Windowsu i znali ga lijepo sludiscu srušiti) koje ti pucaju po registryju, nema preglednika koji se zabije jer si otvorio treći tab. Google je odradio posao koji je obećao: brz, stabilan, ažuriran bez pitanja. Ali monopol ne mora biti zao da bude monopol. On samo mora biti taj koji donosi odluke dok svi ostali gledaju.

Dakle, da — pitanje monopola iz ere Internet Explorera nije riješeno pojavom V8-a i Chromea. Ono je samo premješteno. Umjesto jedne loše tvrtke koja je stala jer nije imala razloga trčati, sada imamo jednu dobru tvrtku koja trči tako brzo da je nitko drugi ne može pratiti — a to je, na duge staze, isti problem, samo u boljem odijelu. Standard koji piše samo jedna tvrtka nije standard. To je diktat s ljubaznim marketingom.

Ali dobro, vratimo se na početak lanca, jer to je ono što ova priča stvarno nosi. Godina je 2008., grupa inženjera sjedne i kaže: JavaScript mora biti brži, jer se naša web aplikacija guši. Bila je to inženjerska odluka, sitna, tehnička, gotovo dosadna. Rezultat te odluke bio je brži V8 motor u novom browseru. Prva posljedica: browser koji se ponaša kao operativni sustav, s procesima, memorijom i svime što ozbiljan softver ima. Eskalacija: svi ostali morali su ubrzati ili umrijeti, i jedan div stoljeća umro je upravo od te utrke.

Onda dolazi domino koji nitko u toj sobi 2008. nije naslutio: netko uzme taj isti V8 motor, izvadi ga iz browsera i pusti da JavaScript trči na serveru. Node.js. Jezik koji je 1995. sklepan u deset dana za animirane gumbiće na stranicama — onaj isti jezik — sada pokreće backend, frontend, mobilne aplikacije, desktop programe, čak i skripte koje ti čitaju termometar u frižideru. Nema više „jezika za browser” i „jezika za server”. Ima JavaScript, svugdje, jer je jednom davno netko odlučio da mora biti brz da bi Gmail radio bez zamuckivanja.

To je poanta lančane reakcije, i poanta cijele ove enciklopedije ako smo iskreni: nitko u tim sobama nije gradio civilizaciju. Bak nije mislio na Node.js kad je sjedio i optimizirao petlje. Google nije mislio na to da će 2025. pola interneta ovisiti o njegovim odlukama o ekstenzijama kad je 2008. crtao strip o novom browseru. Svatko je samo rješavao problem koji mu je gorio pod prstima tog tjedna. Civilizacijske posljedice su nuspojava, ne plan. I upravo zato ih nitko ne vidi dok se ne dogode — pa onda pišeš poglavlje o tome dvadesetak godina kasnije, s pivom u ruci, i pitaš se kako je jedna sitnica narasla u sve ovo.