SQL, Ingres i rat prototipova

Dva tima, jedna Coddova ideja, i jezik koji je pobijedio ne zato što je bio bolji, nego zato što je imao IBM iza sebe.

poglavlje 6/2718 min čitanja1970 – 1980

Osamdesetak kilometara ceste i jedan zaljev dijele dvije zgrade u kojima se, iste godine, radi ista stvar. Zovi to koincidencijom, zovi to duhom vremena — Edgar Codd je 1970. bacio ideju u zrak (onu o relacijskim bazama podataka, o tome da se podaci mogu slagati u uredne tablice umjesto u kaotične hrpe), i ta ideja je pala na dva mjesta odjednom. Prvo mjesto: IBM-ov istraživački centar u San Joseu, zgrada s hodnicima tihim kao knjižnica, gdje inženjeri nose kravate i pišu izvještaje koje čita menadžment koji ne razumije baze podataka, ali razumije budžete.

Tamo, u sobi punoj terminala i cigaretnog dima, tim ljudi radi na nečemu što se zove System R. Nitko izvana to ne zove revolucijom — zove se interni, oprezan istraživački projekt, s pravnim odjelom koji već sad razmišlja tko će jednog dana patentirati riječi koje se u toj sobi izmišljaju. Jedan od tih ljudi, Don Chamberlin, zajedno s kolegom Raymondom Boyceom, upravo skicira jezik kojim bi se s bazom moglo razgovarati kao s prodavačem u dućanu — reci mi što hoćeš, ne moraš mi reći kako da dođeš do toga. Zovu ga SEQUEL. Bit će problema s tim imenom — netko ga je već zaštitio — ali to je briga za kasnije.

Drugih osamdesetak kilometara sjevernije, u Berkeleyu, atmosfera je posve druga vrsta kemije. Nema kravata. Ima brade, ima trave na travnjaku pred fakultetom, ima profesora po imenu Michael Stonebraker koji se ponaša kao da mu je cijeli projekt igra — samo što je igra financirana državnim novcem, National Science Foundation stoji iza njega, i to mijenja pravila. Ovdje se ne piše interni izvještaj. Ovdje se piše kod koji, ako mu pošalješ magnetsku vrpcu i poštansku marku, netko na fakultetu prekopira i vrati ti — besplatno, bez ugovora, bez pravnog odjela koji vreba iza vrata.

Zovu svoj jezik QUEL. Nema patentne prijave, nema odjela za marketing, ima samo hrpu studenata koji tipkaju kod noću jer ih to iskreno zanima — i od kojih će pola njih za desetak godina osnovati firme koje ćeš prepoznati. Ali to je priča za kasnije u poglavlju.

Za sada, sredina sedamdesetih: dva zaljeva, dvije kulture, ista ambicija — dokazati da se relacijski model, koji je do tog trenutka bio samo elegantan rad na papiru, može stvarno pretvoriti u stroj koji radi. Nitko od njih još ne zna da igra meč. Ali meč je već počeo, a suci — programeri koji će za deset godina morati odabrati jedan od ta dva jezika — još nisu ni rođeni.

U redu, prva runda. Zvono zvoni, u kutu broj jedan stoji IBM — tip u skupom sakou koji je već jednom platio kauciju čitavoj industriji baza podataka time što je zaposlio Codda i pustio ga da 1970. napiše onaj rad o relacijskom modelu. Ali papir ne trpa podatke u disk i ne odgovara na upit za 0,3 sekunde — a IBM je imao nešto što Codd sam nije imao: budžet, zgradu u San Joseu i tim ljudi kojima je plaćeno da dokažu da ta matematika i radi, ne samo da je lijepa.

Njihov zadatak je bio, u suštini, dosadan — a dosadni zadaci su često upravo oni koji promijene svijet. Trebalo je uzeti Coddovu teoriju i napraviti od nje nešto što se pokreće na stroju, podnosi stotine upita i ne padne u komad kad dvoje ljudi istovremeno mijenjaju isti red. Nitko izvana to ne vidi kao dramu — izvana to izgleda kao gomila inženjera koja piše dokumentaciju. Iznutra je to prva provjera je li relacijska ideja stvarno upotrebljiva ili je samo lijepa fora za doktorske radove.

I tu se rađa nešto što će nadživjeti i IBM i System R i sve u toj zgradi — jezik. Zvao se SEQUEL, Structured English Query Language, i ideja mu je bila skoro pa naivna u svojoj drskosti: što ako upit bazi pišeš kao rečenicu na engleskom? SELECT ime FROM ljudi WHERE grad = 'Zagreb'. Odaberi, iz, gdje. Ne matematička notacija s obrnutim slovima grčkog alfabeta koju je Codd koristio u svom radu, nego obična rečenica koju bi razumio i menadžer koji ne zna programirati — a takvih je u IBM-u bilo more, i baš to je bila poanta.

Pravno je SEQUEL kasnije morao promijeniti ime u SQL — netko je već imao zaštićen taj naziv u zrakoplovnoj industriji, sitnica koja se danas spominje kao anegdota, ali koja je sasvim slučajno ostavila iza sebe skraćenicu koju danas svaki junior programer izgovara kao „sikvel” umjesto „es-kju-el”, i oko toga se svađaju po forumima već gotovo pedesetak godina bez ikakvog rezultata.

Ali stvarna vrijednost System R-a nije bila u tri slova imena. Bila je u tome što su dokazali stvar koju nitko izvan akademije nije bio spreman vjerovati: da relacijska baza — ta spora, teoretska, previše elegantna da bi bila brza — može raditi na razini koja je usporediva s postojećim hijerarhijskim i mrežnim bazama koje su tada vladale tržištem. Te starije baze su funkcionirale kao mapa s fiksnim stazama: programer je unaprijed morao znati točan put do podatka, korak po korak, polje po polje, jer je struktura bila zakucana čvrsto poput organizacijske sheme tvrtke — da dođeš od šefa do referenta, moraš proći kroz sve u sredini, nema prečice. Do tog trenutka relacijski model je bio nešto što se citira na konferencijama, ne nešto na čemu radi tvoja platna lista.

To je bio prvi udarac u ovom meču, i dolazi iz kuta koji je imao novac, ljude i, iskreno, vrijeme — jer IBM se u tim godinama nije žurio komercijalizirati System R. Nisu ga odmah bacili na tržište kao proizvod; pustili su ga da bude interni dokaz koncepta, publikacija, referenca na koju se pozivaš kad želiš zvučati ozbiljno. Dok su oni imali taj luksuz čekanja, preko zaljeva, na drugoj strani ringa, ljudi s mnogo manje novca i mnogo više inata trčali su istu utrku — samo bez kravata i bez ikakvog razloga da čekaju.

Kut drugi: Ingres
§ 02

Kut drugi: Ingres

Stonebraker sad radi s kolegom Eugeneom Wongom, u podrumu odjela za računarstvo na Berkeleyu, na istoj ideji koju su Coddovi radovi bacili u zrak, samo bez IBM-ova budžeta i bez IBM-ove opreznosti.

Njihov projekt se zvao Ingres — INteractive Graphics REtrieval System, akronim koji je, kao i pola akronima iz te ere, malo nategnut samo da bi se dobila zgodna riječ. Financiran je novcem američke vlade, preko National Science Foundation i ARPA-e, što znači jedno: ovo nije bio proizvod koji je trebao donijeti profit dioničarima. Trebao je donijeti znanje. I upravo ta razlika u DNA-u — profit protiv znanja — je razlika koja će kroz desetljeća postati važnija nego sam tehnički sadržaj rata.

Dok je IBM iznjedrio SEQUEL, u Berkeleyu je nastao QUEL — Query Language, jednostavnije ime za jednostavniji, matematički čišći jezik. QUEL je bio bliži samoj relacijskoj algebri iz Coddovih radova, manje nagađanja, manje engleskog narativnog šećera. Mnogi lingvisti baza podataka će godinama poslije tvrditi da je QUEL bio, iskreno, bolji dizajn. Ali dobar dizajn i pobjeda su, kao što ćeš vidjeti kroz cijelu ovu knjigu, dvije različite stvari koje se katastrofalno rijetko poklapaju.

Ali prava razlika nije bila u sintaksi jezika, nego u tome kako se s Ingresom radilo. IBM je System R čuvao iza zidova patenata i korporativne tajnovitosti — što je, uostalom, i logično kad ulažeš milijune u nešto. Berkeley je radio suprotno: poslao bi ti vrpcu s izvornim kodom ako bi im pisao i tražio. Doslovno — napišeš pismo, čekaš, i stigne ti paket s magnetnom vrpcom punom koda koji je radio na Unixu — sustavu koji je doduše nastao u Bell Labsu, ali ga je Berkeley dobio, razvijao dalje i pretvorio u vlastitu inačicu (BSD), pa su Ingres i Unix na tom kampusu doista bili ista kultura, isti ljudi koji su se međusobno poznavali s hodnika.

To je bio, iako tada nitko nije koristio taj termin, jedan od prvih velikih trenutaka filozofije otvorenog koda u praksi — desetljećima prije nego što je Linus Torvalds uopće napisao prvi red Linuxa. Javni novac gradi javni kod, a taj kod onda putuje na fakultete, u firme, u glave studenata koji ga rastavljaju i sastavljaju iznova samo da vide kako radi.

A upravo su ti studenti bili tajno oružje Berkeleyja — oružje koje IBM sa svojim plaćenim istraživačima jednostavno nije imao. Kroz Ingres laboratorij prošla je generacija ljudi koja će za deset, petnaest godina osnovati ili pokrenuti pola industrije baza podataka koju danas uzimaš zdravo za gotovo — od Sybasea do Informixa, s idejama i kodom koji su nosili miris tog istog podruma. Ne zato što je Berkeley imao bolji marketing. Zato što je pustio ljude da uzmu kod i odu s njim u svijet, umjesto da ga zaključa u sef.

Dakle, runda dva ovog dvoboja završava neriješeno, u smislu tko je napisao pametniji jezik — SQL ili QUEL. Ali gledaš unaprijed i vidiš da je Berkeley upravo posijao sjeme koje će niknuti u čudnim, nepredvidivim mjestima. IBM je imao novac i institucionalnu težinu. Berkeley je imao nešto opasnije — generaciju ljudi koja je znala kako sve to zapravo radi, iznutra, jer im je netko dao ključeve umjesto da im pokaže zatvorena vrata.

Runde: optimizator, transakcije, oporavak
§ 03

Runde: optimizator, transakcije, oporavak

Ovdje meč prestaje biti stvar filozofije i postaje stvar inženjeringa. Lijepo je reći »podaci su tablice, pitaš ih upitom« — ali netko treba i osmisliti kako će stroj taj upit stvarno izvršiti, a da ne pretraži pola diska tražeći jedan redak. To je runda prva, i zove se optimizator upita.

Zamisli GPS. Kažeš mu kamo želiš stići — Zagreb do Splita — i on ti smisli put. Ne pitaš ga kojom cestom, to je njegov posao; on gleda promet, dužinu, cestarine, i bira. Query optimizer radi identično: ti mu kažeš ŠTO želiš (»daj mi sve kupce iz Zagreba koji su naručili u zadnjih mjesec dana«), a on smišlja KAKO — koju tablicu čitati prvu, u kojem redoslijedu spajati podatke, i koji indeks koristiti. A indeks je, u suštini, kao kazalo na kraju knjige: umjesto da čitaš svih petsto stranica tražeći gdje se spominje »Zagreb«, baciš pogled na kazalo i ono ti odmah kaže — stranica 214. Prije toga, u svijetu datotečnih sustava, ti si bio taj GPS. Ti si programeru rekao točno kojom cestom ide, redak po redak. Optimizator je prvi put maknuo vozača s upravljača i rekao mu: samo reci kamo ideš.

System R je ovo riješio prvi, i to temeljito — njihov optimizator je procjenjivao cijenu svake moguće putanje izvršavanja (koliko će diskovnih čitanja koštati ovaj plan, a koliko onaj) i birao najjeftiniju. Zvuči trivijalno danas; 1979. je to bilo čisto istraživanje, objavljeno u radovima koje danas svaki student baza podataka mora pročitati barem jednom, obično uz psovku, jer su gusti kao beton. Ingres je imao svoju verziju — jednostavniju, agresivniju, manje elegantnu — ali radila je. Stonebraker i ekipa nisu imali IBM-ov budžet ni IBM-ovo strpljenje za teoriju; oni su htjeli da stvar RADI do idućeg semestra, jer su imali studente koje su trebali diplomirati.

Runda druga: transakcije. Ovo je koncept koji zvuči kompliciranije nego što jest, pa ga ljudi vole umotati u kratice poput ACID (Atomicity, Consistency, Isolation, Durability — atomarnost, konzistentnost, izolacija, trajnost) i onda se praviti pametni na sastancima. Objasnimo ga bez kratice. Zamisli da prebacuješ novac s jednog računa na drugi. To su, tehnički, DVIJE operacije: skini sto kuna s računa A, dodaj sto kuna na račun B. Sad zamisli da struja nestane TOČNO između te dvije operacije. Skinuto je s A, ali nije stiglo na B. Stotinu kuna je isparilo u eter. Baš fer, zar ne.

Transakcija je obećanje da se to neće dogoditi — sve ili ništa. Ili se obje operacije izvrše, ili se nijedna ne izvrši, kao da se ništa nije ni pokušalo. Nema pola posla, nema novca koji nestane u limbu. Zvuči jednostavno kad to izgovoriš u jednoj rečenici; implementirati to na stroju koji u istom trenu opslužuje pedeset drugih korisnika, od kojih neki isto vuku novac s istog računa A, prava je noćna mora zaključavanja, redova čekanja i pravih pravcatih zastoja (»deadlockova«) gdje se dva procesa čekaju u krug i nijedan se ne miče.

System R je ovdje ponovno bio dublji — Jim Gray, jedan od ljudi na projektu, kasnije je za teoriju transakcija dobio Turingovu nagradu, a to je, da budemo jasni, računalni ekvivalent Nobela — najveće moguće priznanje u struci, ne neka plaketa za trud. Oni su htjeli sustav koji banka može staviti ispod svojih milijardi bez da netko izgubi posao zbog izgubljenog decimalnog zareza. Ingres je transakcije rješavao kasnije i sporije — prva verzija ih uopće nije imala kako spada, što je Stonebraker kasnije priznavao gotovo bez zazora, jer akademski projekt s hrpom studenata na krajnjem roku i banka koja ne smije izgubiti tuđi novac imaju drugačiju definiciju pojma »dovoljno dobro«.

Treća runda: oporavak od pada sustava. Ovo je manje glamurozno od prve dvije, pa se rijetko spominje u pričama o ovom ratu, ali bez toga sve gore navedeno gubi smisao. Sustav mora imati dnevnik — »log« — svega što se dogodilo, tako da ako struja nestane usred noći, stroj se pri ponovnom paljenju može zaviriti u taj dnevnik i reći: dobro, ovo je bilo dovršeno, ovo nije, ovo poništavam, ovo dovršavam. System R je taj dnevnik strukturirao gotovo obredno precizno; kod Ingresa je oporavak dugo bio, blago rečeno, improviziran — nešto što se krpalo iz verzije u verziju, dok su korisnici u međuvremenu psovali.

Nakon tri runde bilanca je čudna za tako naglašen rat: System R je bio precizniji, teorijski dublji, akademski uzoran u sve tri discipline. Ingres je bio brži za isporučiti, otvoreniji, praktičniji za studenta koji ga je htio odnijeti kući na traci i pokrenuti do sutra. Nijedan nije nokautirao drugoga u laboratoriju. Nokaut je, kao i uvijek u ovoj priči, došao izvana — od nekoga tko nije bacio nijednu rukavicu, samo je s velikim zanimanjem čitao njihove novinske članke.

Presuda tržišta
§ 04

Presuda tržišta

Runde su gotove, oba borca su na nogama, a onda u ring uđe sudac koji se zove tržište — i taj sudac, kao i svaki sudac s novcem u rukama, ne gleda baš uvijek elegantnost udarca. Gleda tko ima veći promotivni budžet. I tu, prijatelji moji, QUEL nije imao šanse, koliko god su profesori u Berkeleyu tvrdili, s pravom, da je njihov jezik čišći, konzistentniji i logičniji od te IBM-ove hibridne tvorevine nazvane SEQUEL.

Jer SQL nije pobijedio zato što je bio bolji. SQL je pobijedio zato što je iza njega stajao IBM, a iza IBM-a je stajala gravitacija — ona vrsta koja tjera svakog direktora nabave u osamdesetima da kupi ono što kupuje i konkurencija, jer nitko ne dobije otkaz zbog kupovine IBM-a. Kad je IBM 1981. napravio SQL/DS, poruka tržištu nije bila „ovo je tehnički superiorno”. Poruka je bila „ovo je sigurno”. A onda se u priču ubacio treći igrač, o kojem će biti riječi malo kasnije u ovom poglavlju — čovjek koji je pročitao iste akademske radove kao i svi ostali, ali umjesto da čeka IBM-ov blagoslov, jednostavno je prodavao SQL bazu prije nego što je IBM uopće imao proizvod na tržištu. Oracle. Da, taj Oracle.

QUEL je umro polako, onako kako umiru jezici koji nemaju korporaciju iza sebe — ne eksplozijom, nego postupnim nestajanjem iz novih projekata dok ga stari sustavi guraju kao balast. Do sredine osamdesetih SQL je postao de facto standard, a 1986. dobio je i formalni blagoslov od ANSI-ja — američkog tijela za standardizaciju koje je time proglasilo SQL službenim, univerzalnim jezikom kojeg se svi moraju držati, otprilike kao kad neko krojačko udruženje odluči da od sad svi šavovi moraju biti isti, pa nema više improvizacije. Time je rat praktički gotov. Ne zato što je porota presudila da je SQL bolji jezik. Nego zato što je porota presudila da joj je svejedno koji je bolji jezik — bitno je koji ima podršku, dokumentaciju, i konzultante koje možeš pozvati kad nešto pregori.

Ali evo gdje priča postaje zanimljiva, i gdje Michael Stonebraker, taj profesor iz Berkeleya koji je upravo izgubio jezičnu bitku, odluči da neće samo šutke otići u mirovinu razočaran. Umjesto toga, kreće ispočetka. 1986. pokreće novi projekt na Berkeleyu — nasljednika Ingresa, nazvanog, s onom vrstom akademske duhovitosti koja je pola šala i pola osveta, Postgres. Post-Ingres. Baza koja dolazi nakon.

I evo obrata koji dvoboj pretvara u nešto puno slasnije od pukog rezultata: Postgres je, kroz devedesete, dobio SQL sloj i postao PostgreSQL. Onaj isti jezik zbog kojeg je izgubio prvu rundu, sad nosi njegovu bazu na leđima. Stonebraker nije pobijedio tako što je dokazao da je QUEL bio u pravu. Pobijedio je tako što je pustio QUEL da umre, uzeo SQL neprijatelja, i na njega zalijepio arhitekturu koja je bila deceniju ispred svog vremena — proširivi tipovi podataka, indeksi koje sam definiraš, sve ono što danas zovemo „objektno-relacijsko”.

Danas, dok ovo čitaš, vjerojatno negdje u pozadini neke aplikacije koju koristiš radi baš taj Stonebrakerov potomak. PostgreSQL je jedna od najkorištenijih baza na planetu, izbor svakog startupa koji se pravi pametan i svake korporacije koja se predomislila oko vlasničkih licenci — onih skupih baza gdje plaćaš i za zrak, a kod ne vidiš ni izbliza. Berkeley je ipak pobijedio. Samo mu je trebalo trideset godina, i morao je posuditi oružje protivnika da to učini.

Obje strane izgubile od trećeg?
§ 05

Obje strane izgubile od trećeg?

E sad, zamisli finale ovog meča. Cijelo poglavlje je bilo IBM protiv Berkeleyja, kravata protiv trapera, SQL protiv QUEL-a, i logično bi bilo da sad proglasimo pobjednika. Ali evo cake — pogledaj tko je stvarno stajao u ringu dok su se ta dvojica mlatila, i vidjet ćeš da je pored njih, sa strane, treći čovjek tiho vodio bilješke.

System R tim je objavljivao radove — znanstvene, pedantne, pretrpane tablicama i dokazima da relacijski model zaista radi. Ingres tim je radio isto, samo je uz radove slao i vrpce sa stvarnim kodom, jer to je bila poanta: javni novac, javni kod, uzmi i probaj sam. I obje strane su, svaka na svoj način, mislile da igraju istu igru — dokazati da je Coddova ideja dobra, i da je baš njihova implementacija bolja verzija te ideje.

Nijedna od te dvije skupine nije razmišljala o prodaji. IBM-ovci u San Joseu bili su istraživači, plaćeni fiksno, s zadatkom da riješe problem — a ne da ga upakiraju u kutiju i prodaju firmama koje čuvaju popise zaposlenika. Berkeley je bio još dalje od tržišta — sveučilište koje po definiciji ne prodaje, ono deli znanje. Elegancija optimizatora, brzina transakcija, čistoća jezika — to su bile mjere pobjede za obje strane. Novac nikad nije bio na semaforu.

Taj čovjek nije bio ni na jednoj od dvije strane zaljeva u ovom poglavlju. Nije napisao ni redak optimizatora, nije branio QUEL na konferenciji, nije se svađao oko toga je li SQL izraz čitljiviji od relacijske algebre — one čudne, ali moćne, sintakse kojom se izvorno htjelo raditi s Coddovim tablicama prije nego što je SQL preuzeo tron. On je samo pročitao IBM-ov rad o System R iz 1977., shvatio da IBM neće imati komercijalni proizvod još godinama zbog interne birokracije, i rekao sebi — ako oni ne žele prodati ovo, ja ću.

To je poanta ovog dvoboja, i priznajem da zvuči gorko kad se izgovori naglas: dok se dvojica svađaju oko toga čiji je jezik elegantniji, čija arhitektura čišća, tko je prvi riješio problem uskrsnuća prekinute transakcije — treći tip u sobi ne sluša raspravu. On čita zapisnik sa sastanka, vadi olovku i računa koliko će to koštati kupca.

System R je dao SQL svijetu, ali ne i profit svojim autorima. Ingres je dao Berkeleyju generaciju doktoranata koji su osnovali pola industrije baza podataka, ali ne i njemu samom novčanu žetvu. Obojica su, na neki način, izgubili — ne jedno od drugog, nego od treće strane koja nije ni sudjelovala u raspravi o eleganciji.