Java (1995): "Write once, run anywhere"
Kako je jezik za pametne kutije za kabelsku slučajno osvojio internet, a firma koja ga je izmislila usput umrla od pobjede
# da, poglavlje ima pjesmu. ne, nitko ne zna zašto.
1995. Sun Microsystems ima novca kao pljeva. Ne od softvera — od željeza. Serveri, radne stanice, ono skupo sivo pokućstvo koje sjedi u podrumima banaka i sveučilišta i tiho crpi milijune godišnje. Sun je bogat na način na koji su bogate firme koje prodaju infrastrukturu: nitko ne slavi tvoj proizvod, ali svi ga plaćaju, redovito, jer ga ne mogu izbjeći.
I baš zato Sun ima paranoju. Ne malu, kliničku. Devedesetih je strah od Microsofta opća pojava u industriji — vidjeli smo već zašto (poglavlje 4), i vidjet ćemo opet — ali u Sunu ta paranoja postaje skoro pa korporativna religija. Bill Gates je već pojeo tablične kalkulatore, uredske pakete i pola konkurencije za desert. Sljedeći na meniju, po logici Suna, jest sve što nije Windows. A to je — teoretski — cijela budućnost računalstva.
Negdje u toj paranoji sjedi mali tim inženjera pod vodstvom Jamesa Goslinga, koji već godinama radi na nečemu što se zove Oak — jeziku za pametne kućanske uređaje. Interaktivni televizori. Set-top boxovi (ona kutijica na vrhu televizora, danas bi to bio neki pametni prijamnik) koji će, obećava projekcija, kontrolirati tvoj dom iz naslonjača. Budućnost koja je, gledano unatrag, otprilike jednako blizu ostvarenju koliko i leteći automobil. Novac je utrošen, prototipovi postoje, kupci — ne postoje. Tržište set-top boxova 1994. je egzistencijalno malo, i to je eufemizam.
Onda netko u Sunu otvori preglednik. Ovaj Mosaic — jedan od prvih internetskih preglednika, tako revolucionaran da su ljudi tada prvi put shvatili da internet može imati slike, a ne samo dosadan tekst — ima promet koji iz mjeseca u mjesec raste brže nego što je tržište kućanskih uređaja ikad obećavalo. I dogodi se ono što se u korporacijama događa kad projekt gubi novac, a baš tada pored prođe vlak koji vrijedi uhvatiti: prenamjena. Oak, jezik za televizore koje nitko nije kupio, postaje Java, jezik za web koji je, sasvim slučajno, taman spreman kad treba biti.
Rat za budućnost softvera, ispada, neće se voditi u laboratorijima ni na konferencijama o arhitekturi. Vodit će se u proračunima za marketing. I počinje — prije nego što je ijedna linija koda dokazala da radi na svim tim navodno svim mjestima — reklamnom kampanjom.
Godina je 1990., Sun Microsystems, tim od desetak ljudi okupljen pod internim projektom koji se — ozbiljno — zvao Green Project. Vodi ih Gosling, taj isti, inženjer star toliko koliko treba da čovjek postane umoran od C++-a (tada vladajućeg programskog jezika, poznatog po tome što ti daje moć da radiš sve, uključujući i to da sam sebi upucaš nogu u kod ako nisi dovoljno pažljiv). Jezik se zvao Oak, po stablu ispred Goslingova ureda, jer zašto ne — valjda je i to jeftinije od agencije za nazive.
Novca je bilo, i to je bitno reći na startu jer ovo je poglavlje o novcu, ne o inspiraciji: Sun je u tom trenutku bogata firma, radne stanice (moćni računalni „konji za vuču” koje su tvrtke kupovale za teške poslove, dok su obični ljudi imali kućna računala) i serveri donose milijarde, i ta gotovina plaća godine razvoja jezika za tržište koje formalno ne postoji. Interaktivna televizija je, ispada, bila san devedesetih kao NFT-ovi 2021. (digitalni „certifikati vlasništva” nad slikama i klipovima za koje su ljudi na kratko plaćali ludi novac, uvjereni da je to budućnost) — svi su znali da će to biti veliko, nitko nije znao zašto, a novac je ionako tekao iz drugog džepa pa se nije previše provjeravalo.
Odluka je pala u ljeto 1994. i to je trenutak koji, retrospektivno, vrijedi milijarde: netko je pogledao web, koji je te godine upravo počeo izgledati kao nešto što bi mogla biti industrija, i shvatio da Oak — jezik dizajniran da bude malen, siguran i prenosiv na svaki komad hardvera — pristaje na preglednik jednako dobro kao na mikrovalnu pećnicu. Preimenovanje u Java (kava, ne stablo; priča da je ime izvučeno iz liste riječi na brainstorming sastanku, jer je Oak već bio zauzet kao trgovačka marka i jer je baš u tom trenutku netko u sobi pio kavu, zvuči i previše dobro i previše vjerojatno istovremeno) bio je kozmetički trošak. Sadržaj ispod ostao je isti kod — samo je sad imao tržište.
Demo koji je sve pokrenuo dogodio se 1995. u pregledniku HotJava, kojeg je Sun sklepao baš da pokaže što apleti umiju — a u Netscapeu, firmi čiji je jedan inženjer otprilike u istom trenutku u deset dana sklepao sasvim drugi jezik i, iz čisto marketinških razloga, dobio dopuštenje da mu u ime ubaci riječ Java, iako s njom ima veze koliko šalica kave s hrastom (ta priča, i cijela ta zbrka imena, čeka te u poglavlju 6). Applet — mala Java aplikacija koja se učitavala unutar web stranice i, gle čuda, radila — bio je prvi put da je netko obećao da će program napisan jednom raditi na Windowsima, Macu i Unixu bez ijedne izmjene. Publika u sali je pljeskala. Investitori su računali.
A onda je došao marketing, i s njim broj koji zvuči kao da je izmišljen baš za ovu enciklopediju, ali nije: Sun je javno postavio cilj od deset milijuna Java developera u pet godina. Ne deset milijuna korisnika, ne deset milijuna instalacija — deset milijuna ljudi koji uče, koriste i ovise o jednom programskom jeziku, kao ciljna metrika kampanje, baš kao što bi Coca-Cola mjerila tržišni udio. Programski jezik dobio je proračun i agresivnost proizvoda za široku potrošnju, i to je prvi znak da Java neće pobijediti (ili izgubiti) na temelju toga je li tehnički najbolja. Pobijedit će, ili izgubiti, na temelju toga koliko novca stoji iza priče da je pobjednik.

Obećanje: WORA
Dobro, prije nego nastavimo brojati novac, moramo razumjeti što se uopće prodavalo, jer bez toga sve ostalo zvuči kao obična reklama za sapun. Obećanje se zvalo WORA — »Write Once, Run Anywhere«, napiši jednom, pokreni bilo gdje. Zamisli kovčeg koji radi identično na svakom aerodromu svijeta — ne treba ga rasklapati za Frankfurt i ponovno sklapati za Tokio. Baš tu ideju Sun je prodavao developerima 1995., i valja priznati — ideja je bila genijalna.
Kako to tehnički funkcionira, demistificirano u dvije rečenice: kad napišeš kod u Javi, on se ne prevodi direktno u strojni jezik tvog konkretnog računala (što bi značilo — jedna verzija za Windows, druga za Mac, treća za Solaris, i tako dalje unedogled). Umjesto toga, prevodi se u nešto po sredini — bajtkod, univerzalni jezik koji ne razumije nijedan procesor na svijetu, ali razumije ga Java Virtual Machine (JVM), virtualna mašina koja se ubacuje između koda i stvarnog stroja. A JVM postoji za svaku platformu posebno. Dakle — tvoj kod ostaje isti, JVM se prilagođava terenu. Kovčeg se ne mijenja, mijenja se aerodromska rampa.
Elegantno? Da. Novo? Ne — i tu stižemo do prve rime ove enciklopedije koja zapravo boli. Točno ista ideja, bajtkod koji se izvršava na virtualnoj mašini, postojala je već 1978. u UCSD Pascalu, s njegovim P-code sustavom (pogledaj Knjigu 2, poglavlje 23, ako te zanima taj déjà vu). Sun nije izumio WORA. Sun je WORA-i dao marketinški proračun kakav P-code nikad nije imao. I to je bitna razlika — ne u tehnologiji, nego u novcu bačenom na priču o tehnologiji.
Zašto je to bilo tako teško postići, kad je ideja na papiru toliko čista? Zato što svaka platforma ima svoje sitne, prljave posebnosti – kako se crta prozor, kako se čita datotečni sustav, kako se mreža ponaša pod opterećenjem – a JVM je morao te posebnosti sakriti od developera bez da ih pritom razljuti do stupnja neupotrebljivosti. To se nije riješilo za godinu dana. Nije se riješilo ni za pet. Realno, tek s Javom 1.4, a kasnije i s verzijom 5.0, negdje oko 2004., „napiši jednom, pokreni bilo gdje” počelo je stvarno funkcionirati onako kako je 1995. bilo nacrtano na prospektu. Deset godina od obećanja do isporuke – što je, s obzirom na to koliko se brzo industrija tada mijenjala, gotovo geološko razdoblje.
I zato treba biti pošten prema Sunu, koliko god ostatak ovog poglavlja bio, blago rečeno, cinično nastrojen prema njihovim potezima: ideja WORA nije bila prijevara. Nije bila dimni zastor iza kojeg nema ničega. Bila je to ambicija koja je zahtijevala inženjerski rad koji tada nitko nije stigao dovršiti na vrijeme — a marketing, koji nikad ne čeka inženjere, već je obećanje prodao kao gotov proizvod. To je obrazac koji ćeš u ovoj knjizi vidjeti još mnogo puta: tehnologija koja na kraju stvarno postane ono što je obećano, samo deceniju kasnije, kad je već svima dosadilo čekati i priča o čekanju postane sramotnija od same mane.

Novac #1: rat s Microsoftom
Sad dolazimo do dijela priče gdje se skida rukavica. Do sad je Java bila priča o marketingu i idealizmu — kava, applet, revolucija. Ovo je dio gdje Sun shvaća da idealizam bez pravnog tima traje točno dok se ne pojavi Microsoft s ugovorom u ruci i namjerom da taj ugovor pretvori u oružje.
Godina 1996. Microsoft nije glup — nikad nije bio, to mu je i najveći grijeh i najveća vrlina. Vide Javu, vide da developeri i tisak o njoj pišu kao o sljedećem velikom ubojici platformi, i umjesto da je ignoriraju, licenciraju je. Skroz legalno, skroz normalno, potpisan ugovor, novac na stol. Dobivaju pravo koristiti Sunovu tehnologiju i ugrađuju je u Internet Explorer i u vlastiti alat, Visual J++.
A cijela poanta Jave, ono što je stajalo na svakom slajdu, na svakoj konferenciji, na svakoj majici developera — „write once, run anywhere”, napiši jednom, pokreni bilo gdje — upravo je to: ono anywhere. Microsoftova verzija tiho je brisala to bilo gdje i mijenjala ga u bilo gdje, dok god je to Windows. I to nije bila slučajnost, nije nuspojava entuzijazma inženjera koji su htjeli malo bolje performanse. Bila je to strategija, i to dobra — jer ako uspije, Java se pretvara u još jedan Windows-only alat, a Sun je upecan da plaća marketing za tuđi ekosustav.
Sun je tužio 1997. Ne zbog povrijeđenih osjećaja — zbog povrede ugovora o licenci koji je jasno definirao kompatibilnost kao uvjet. Parnica je trajala godinama, kroz hrpu dokaza, internih mailova koji su, kao i uvijek u ovakvim slučajevima, bili puno iskreniji nego što bi ih ikad napisao PR odjel. Rezultat: 1998. sud nalaže Microsoftu privremenu zabranu daljnjeg kršenja, a 2001. dolazi konačna nagodba — Microsoft plaća Sunu 20 milijuna dolara za taj dio spora. U sljedećim godinama, kroz niz povezanih antitrust tužbi — to su parnice zbog narušavanja tržišnog natjecanja, kad neka firma postane toliko velika i moćna da počne gušiti konkurenciju umjesto da se s njom natječe, pa državni tužitelji i konkurenti navale s tužbama — ta brojka za Sun naraste na više od 1.6 milijardi dolara ukupno. Nije loš povrat na ulaganje za jedan programski jezik s logom šalice kave.
Ali novac nikad nije bio prava poanta ovog rata, ni za jednu stranu. Poanta je bila runtime — ono spomenuto »bilo gdje«, ta virtualna mašina na kojoj se kod stvarno izvršava, nešto poput univerzalnog prevoditelja koji svaki Java program pretvara u jezik koji tvoj konkretni računalni sustav razumije. Tko kontrolira runtime, kontrolira developere. A tko kontrolira developere, kontrolira sljedeću generaciju aplikacija, i to je vrijedniji ulog od bilo koje kazne koju sudac ikad potpiše. Microsoft nije htio ukrasti Javu jer im se svidjela kava na logu. Htjeli su Javu koja curi kroz Windows API, jer onda svaki Java developer koji misli da piše prijenosni kod zapravo piše Windows kod, samo to još ne zna.
Kad im je to sudskom odlukom zabranjeno, Microsoft nije otišao kući poražen i tužan. Napravili su ono što veliki igrači rade kad izgube partiju — promijenili su ploču. Izbačeni iz Java ekosustava, jednostavno su napravili svoj. Godine 2000., dvije godine nakon presude, najavljen je C#, jezik dizajniran od nule kao Microsoftov vlastiti odgovor na sve što je Java trebala biti — samo ovaj put bez licenci, bez tuđih uvjeta, bez ikoga tko im može zabraniti da ga proširuju kako god hoće.
Pa tko je ovdje zaradio? Kratkoročno, Sun — u novcu, u sudskoj pobjedi, u moralnoj priči koju su mogli pričati na svakoj konferenciji sljedećih deset godina: mali David protiv Goliata, i David je uzeo preko 1.6 milijardi dolara štete. Ali dugoročno, Microsoft je izašao iz te bitke s vlastitom platformom, vlastitim runtime-om, vlastitim jezikom koji nije morao pitati nikoga za dozvolu — i s Andersom Hejlsbergom, legendarnim programerom koji je prije toga stvorio Turbo Pascal i Delphi, a sad je taj njihov jezik, generaciju kasnije, doveo do toga da ga developeri stvarno vole koristiti. Sudska pobjeda je knjigovodstvo. .NET platforma je bila igra za sljedeće desetljeće.

Novac #2: enterprise spas
Appleti su umrli tiho, onako kako umiru stvari koje nikad nisu bile jako žive. Ne eksplozijom, ne skandalom — ugasili su se jer su bili spori (JVM se u browseru budio kao mrmot u veljači), ružni (taj sivi okvir s trakom za učitavanje bio je vizualni potpis kompromisa) i, na kraju, opasno rupičasti (sigurnosne zakrpe za applet-plugin postale su mjesečni ritual koji nitko nije tražio). Web je otišao dalje, prema JavaScriptu i AJAX-u, i applet je postao ono što ostane od velike ideje kad joj publika okrene leđa: fusnota u povijesti pretraživača i redak u CV-u nekoga tko se sad toga stidi.
Ali evo gdje priča o novcu postane zanimljiva: Sun je izgubio bitku na frontu na kojem je najavio pobjedu, a onda pobijedio na frontu koji nitko nije reklamirao. Dok je javnost gledala applete kako umiru u browserima, Java se u tišini iselila na server — i tamo, iza vatrozida banaka i osiguravajućih kuća, počela stvarno zarađivati. J2EE — kratica za Java 2 Enterprise Edition, što u prijevodu znači samo „kostur za servere”, gotovni skup alata na kojem drugi grade da ne moraju sve raditi od nule — postao je temelj na kojem su se sagradila cijela tržišta application servera: WebLogic, WebSphere, JBoss. Nisu to bili proizvodi koje si kupovao za stotinu dolara. To su bili ugovori s nula na kraju koji su se potpisivali na ručak, i onda obnavljali svake godine, desetljećima.
Zašto baš banke? Zašto baš osiguranja? Jednostavno: te institucije ne kupuju tehnologiju zbog elegancije, kupuju je zato da im ne propadne transakcija u tri ujutro, i zato da mogu pokazati revizoru papir koji kaže da je sve certificirano, podržano i osigurano ugovorom o održavanju. Java je to nudila u paketu — statičku tipizaciju (zamisli je kao formular koji te spriječi da u rubriku „godine” upišeš „plavo”; program ti javi grešku prije nego što ga uopće pokreneš, umjesto da se sve raspadne dok klijent gleda), JVM koji je, nakon što se doradio, stvarno bio stabilan na serveru, i Sun koji je iza svega stajao s brojem telefona koji je vrijedio nešto. COBOL je tridesetak i nešto godina ranije prodavao istu priču istoj vrsti kupca — dosadno, ali pouzdano, i nikoga ne otpuštaju zato što je odabrao dosadno.
I upravo tu Java postaje COBOL svoje generacije — a to nije uvreda, iako zvuči kao uvreda, i nije kompliment, iako zvuči kao kompliment. Oboje je istovremeno istina. COBOL je desetljećima nakon što ga je svijet proglasio dinosaurom i dalje obrađivao većinu svjetskih bankovnih transakcija, jer ga se nitko nije usudio dirati. Java je krenula istim putem dok su svi još pisali nekrologe appletima: postala je jezik u kojem živi ono što se ne smije srušiti, u sustavima koje nitko sa strane ne vidi i koje nitko iznutra ne želi refaktorirati. Dosadno je najveći kompliment koji infrastruktura može dobiti.
Bilanca ove runde: appleti su groblje, ali server je zlatni rudnik koji se i danas kopa. Sun nije zaradio od hypea koji je plaćen iz marketinškog budžeta — zaradio je od licenci, podrške i alata koje su banke plaćale bez pogovora, godinama, jer je alternativa bila prepisati sustav koji obrađuje tuđu plaću. A to, po pravilima ove industrije, nitko ne radi dobrovoljno.

Bilanca: tko je zaradio
Presuda. Jer ovo je presuda, zar ne — zadnja sekcija, računi na stolu, sudac skida naočale. Pa krenimo redom, kao u svakoj dobroj presudi: prvo optuženi, pa oštećeni, pa tko je od svega toga zapravo profitirao.
Sun Microsystems je, formalno, pobijedio. Java je postala jedan od najkorištenijih jezika na planetu, njezina virtualna mašina radi na milijardama uređaja, njezin bytecode žvaču bankomati, Androidi i pola korporativnog interneta. Rat s Microsoftom su dobili, doslovno — sudski, s brojkama koje se broje u stotinama milijuna i milijardama dolara. Sve je to istina. A onda je Sun umro.
Ne metaforički. Stvarno. Godine 2010. Oracle je kupio Sun Microsystems za 7,4 milijarde dolara, i to nije bila akvizicija iz ljubavi prema elegantnim arhitekturama distribuiranih sustava — bila je to akvizicija radi patenata, baza klijenata i, prije svega, radi same Jave. Larry Ellison — da, isti onaj Larry Ellison koji se u drugoj knjizi ove enciklopedije već pojavio kao čovjek koji je Oracle sagradio na tuđoj ideji relacijskih baza dok je IBM još razmišljao je li to komercijalno isplativo (pogledaj Knjigu 2, poglavlje 7, ako te zanima kako taj čovjek uvijek stigne prvi na plijen) — taj isti Ellison je 2010. kupio jezik koji je nekad pobijedio njegovog vlastitog neprijatelja u sudnici, i od tada ga naplaćuje sve do danas.
Oracle, treba reći, nije samo naplaćivao licence po inerciji — tužio je Googlea za korištenje Java API-ja u Androidu (API je, pojednostavljeno, skup imena i pravila po kojima programi međusobno „razgovaraju”, otprilike kao popis naredbi koje jedan program smije vikati drugome da bi nešto od njega zatražio), tražeći devet milijardi dolara, i ta se parnica vukla po američkim sudovima punih deset godina, sve do Vrhovnog suda, koji je 2021. napokon presudio u korist Googlea. Deset godina, dvije od najvećih korporacija na planetu, oko toga tko ima pravo koristiti nazive metoda u programskom jeziku. Ako ti to zvuči apsurdno — jest, i upravo je to razlog zašto ćeš se s tom istom pravnom logikom sresti opet kad dođemo do Androida i patentnih ratova oko mobilnih platformi u Knjizi 5. Zapamti ovaj slučaj, vratit ćemo mu se.
Dakle: tko je zaradio? Oracle, sigurno — naplaćuje enterprise Javu poduzećima koja su se davno ušančila u J2EE arhitekture i ne mogu (ili im se ne isplati) izaći. IT konzultantske kuće, koje su tri desetljeća naplaćivale certificiranje i »arhitekturu« ljudima koji su, realno, trebali napisati petsto redaka koda. A developeri? Developeri su dobili nešto što nitko od njih nije tražio kao san, ali svi su u konačnici prihvatili kao stvarnost: jezik koji je dosadan. Predvidljiv. Statički tipiziran do bola, verbozan, pun »boilerplate« koda — onog repetitivnog, dosadnog koda koji moraš pisati iznova i iznova, bez trunke kreativnosti, samo zato što jezik to od tebe traži — koji svi mrze pisati, a koji i dvadeset godina kasnije drži pola bankarskog sustava planete, jer se ne raspada preko noći i jer ga uvijek ima tko popraviti.
I u tome je prava rima ovog poglavlja, ona koju vrijedi zapamtiti kad zatvoriš knjigu: jezici su veći od firmi koje ih stvaraju. Vidjeli smo to već jednom, s ALGOL-om — jezikom kojeg nitko nije koristio u praksi, a čije su ideje preživjele u sintaksi gotovo svega što je došlo poslije, dok su firme koje su ga podržavale davno nestale u prašini. Java je ista priča, samo obrnuta: jezik koji su svi koristili, čija je matična firma nestala, a jezik i dalje diše, naplaćuje se, sudi se oko njega i tuguje mu se pri svakoj novoj verziji Kotlina koja obećava da je »bolja Java«. Firme umiru. Bilance se zatvaraju, prodaju se, brišu s burze. Jezici — ako se dovoljno developera navikne na njih da im postanu navika, a ne izbor — jednostavno ostanu.