GitHub (2008)

Dugme koje je ukinulo mailing listu i slučajno stvorilo najveći kolaborativni mozak u povijesti softvera.

poglavlje 13/2417 min čitanja2001 – 2010

Godina je 2008. Ako želiš doprinijeti tuđem projektu, evo procedure: skineš kod, napraviš izmjenu, generiraš patch datoteku — da, doslovno datoteku, s ekstenzijom .patch — i onda tu datoteku zalijepiš u mail. Ne kao link. Kao prilog. Pa čekaš da vlasnik projekta otvori inbox, skine prilog, ručno ga primijeni u terminalu i, ako se smiluje, ubaci u kod. Ako je projekt aktivan, sve se to odvija na mailing listi na koju su pretplaćeni svi koji ikad namjeravaju sudjelovati — što znači da tvoja mala izmjena od tri linije putuje kroz inboxe petnaestero ljudi prije nego što je ikad taknula glavni kod.

A gdje bi taj projekt uopće pronašao? Na SourceForgeu, najvjerojatnije — nekoć glavnom skladištu open source projekata na internetu. Stranica koja 2008. već izgleda kao da je fosilizirana negdje oko 2001.: reklame za registry cleanere s desne strane, ikonica za preuzimanje koja te vodi kroz tri međustranice prije nego što stvarno dobiješ zip datoteku, i dizajn koji vrišti da ga nitko nije dirao otkad je Windows XP bio novost. Nije da alternative nema. Postoji Git — pogledali smo ga (poglavlje 12) — genijalan, distribuiran, moćan. Ali „pošalji mi pull request”, odnosno zahtjev da netko pregleda i uvrsti tvoju izmjenu u glavni kod, u 2008. ne znači klik na dugme. Znači: pošalji mi mail, s prilogom, i moli se da ga otvorim ovaj tjedan.

U toj čorbi mailing lista i patch priloga, u San Franciscu, trojica ljudi vikendima kucaju nešto što na papiru zvuči skromno: sučelje za Git. Chris Wanstrath, PJ Hyett i Tom Preston-Werner svi dolaze iz Ruby scene, one iste zajednice okupljene oko Ruby on Railsa koju smo već sreli (poglavlje 10) kao mrežu ljudi koji se međusobno poznaju, hakiraju zajedno i vjeruju jedni drugima na riječ. Nema investitora. Nema pitch deck prezentacije kojom se uvjerava investitore da ubace novac. Sve je bootstrapped, kao što se to zvalo prije nego što je „bootstrapped” postalo marketinška kategorija — plaćaju sami, rade nakon posla, i grade to što u šali zovu „Facebook za kod”.

Ime koje odaberu nije pametno, nije skraćenica koja krije neko dublje značenje, nije igra riječi koju moraš objasniti prijatelju. Git plus hub. Mjesto gdje se Git okuplja. Toliko doslovno da zvuči skoro lijeno — dok ne shvatiš da je upravo ta doslovnost poanta. Ne prodaju ti viziju. Prodaju ti mjesto.

Nitko od njih trojice, dok kuca to sučelje u stanu, ne razmišlja o tome da grade infrastrukturu na kojoj će jednog dana počivati skoro cijeli otvoreni kod planete. Razmišljaju o jednoj sitnici: kako da ljudima bude lakše da rade zajedno na kodu. Sitnica ima naviku da ne ostane sitnica.

Reci nekom programeru iz devedesetih da postoji dugme koje se zove „Fork”, i pogledat će te kao da si mu rekao da postoji dugme koje se zove „Zapali kuću”. Jer fork, u rječniku otvorenog koda prije 2008., nije bio gest ljubavi. Bio je razvod. Bio je onaj trenutak kad se zajednica oko nekog projekta toliko posvađa — oko licence, oko vizije, oko toga tko je glavni — da jedna strana uzme kompletan izvorni kod, ode na drugu adresu i kaže: „Ovo je sad naš projekt, a vi ste mrtvi za nas.” Sjeti se poglavlja o kulturi otvorenog koda — svaki veći fork bio je mali građanski rat, s manifestima, uvredama na mailing-listama i po dvije verzije istog alata koje od tog dana nikad više ne razgovaraju.

E sad zamisli da 2008. dođu Wanstrath, Hyett i Preston-Werner i tu istu riječ, taj isti simbol razdora, pretvore u dugme. Jedno, veliko, plavo dugme. I stisneš ga da bi nekome pomogao, ne da bi ga se riješio.

Jer to je bio čitav trik GitHuba, koji se u startu čini premalen da bi nosio bilo kakvu težinu: fork je prestao biti uvreda i postao kompliment. Vidiš tuđi projekt — točnije, njegov repozitorij, što je samo fensi riječ za mapu u kojoj se čuva sav kod nekog projekta i cijela povijest promjena na njemu — sviđa ti se, klikneš „Fork”, i u sekundi imaš svoju, potpuno legalnu, potpuno vidljivu kopiju te mape, na svom profilu, s tvojim imenom na njoj. Ne moraš pisati mail. Ne moraš tražiti dopuštenje. Ne moraš objašnjavati zašto. Samo se igraš. A ako se, dok se igraš, dogodi da nešto popraviš ili dodaš, imaš način da to i vratiš originalnom autoru, isto tako jednim klikom — i to je taj drugi genijalan detalj, pull request.

I tu vrijedi zastati, jer pull request nije samo tehnička funkcija, nekakav pristojniji „patch u prilogu” iz doba mailing lista. Pull request je forma razgovora. Na jednom ekranu vidiš točno koje su linije koda promijenjene, vidiš komentare ispod svake pojedine linije, vidiš cijelu povijest te rasprave od prvog javljanja do finalnog „Merge” dugmeta — koje ne znači ništa mudrije nego „prihvaćam tvoju promjenu, ubaci je u glavni kod” — i sve to ostaje zapisano, trajno, pretraživo, za sljedećeg čovjeka koji naleti na isti problem za pet godina. Prije toga si to imao raspareno po desetak mailova s naslovima tipa „Re: Re: Re: patch v3 (ignoriraj prošli)”, i sretan ti Bog ako pokušaš rekonstruirati zašto je neka odluka donesena.

Suradnja koja je do tada tražila poznanstvo, dopuštenje, ponekad i osobnu preporuku da te netko uopće primi u zajednicu, svela se na dva klika i jedno polje za komentar. Trenje koje je desetljećima bilo normalna cijena ulaska u otvoreni kod jednostavno je nestalo.

I baš zato što je ta sitnica bila toliko sitna — jedno dugme, jedan format razgovora — nitko u tom trenutku nije mogao znati koliko će se toga na njoj sagraditi. Ali kad trenje padne na nulu, nešto se uvijek počne gomilati na drugoj strani. Pitanje je samo koliko brzo.

Prva posljedica: kod dobiva društveni sloj
§ 02

Prva posljedica: kod dobiva društveni sloj

OK, dugme za fork riješilo je tehnički problem — kako uzeti tuđi kod i napraviti svoju kopiju, bez drame i bez traženja dopuštenja. Ali sad imaš novi problem, sasvim drugačije vrste: imaš tisuće ljudi koji rade na tisućama projekata, i nitko ne zna gdje da gleda. Fork bez konteksta je samo hrpa kopija razbacanih po serveru. Trebao ti je razlog da ostaneš na stranici i nakon što povučeš kod, razlog da se vratiš sutra i preksutra. GitHub je taj razlog izmislio, i nije ga izmislio iz zabave — izmislio ga je jer je to bila jedina logična sljedeća stanica u lancu koji je već pokrenulo dugme Fork.

Rješenje se zove profil. Zvuči trivijalno, zvuči kao Facebook s manje slika mačaka, i zapravo — jest to, samo za kod. Svaki korisnik dobiva stranicu: što je radio, koje je projekte forkao (dakle kopirao da na njima radi svoju verziju), kome je slao pull requestove — to je, pojednostavljeno, poruka drugom developeru koja kaže »evo, popravio sam ti nešto u kodu, pogledaj hoćeš li to prihvatiti« — koga prati i tko prati njega. Zvjezdice (stars) postaju valuta — staviš zvjezdicu na projekt kad ti se sviđa, otprilike kao lajk, samo što ovdje zvjezdica realno znači »ovo je korisno, vratit ću se ovome«. Broj zvjezdica na repozitoriju iznenada postaje javni, brojiv dokaz vrijednosti nečega što do jučer nije imalo nikakav vidljiv indikator osim toga koliko je ljudi na mailing listi spominjalo taj alat.

I tu dolazi ono što je zapravo bit ove sekcije, ono što razdvaja GitHub od »samo još jedne stranice za hosting koda«: social coding (druženje kroz kod, ako hoćeš doslovni prijevod) nije marketinška fraza koju je smislio neki menadžer da opravda proračun za PR. Social coding je mehanika. Konkretno — ideš na profil developera kojeg poštuješ, vidiš njegovih zadnjih dvadesetak commitova (sitnih zapisa promjena u kodu), otvoriš repozitorij koji ti je nepoznat, pratiš kako je riješio problem koji je i tebi mučio mjesec dana, i onda — bez da si otišao na tečaj, bez da si čitao knjigu, bez ičega formalnog — naučio si nešto. Pa onda ti pošalješ pull request s popravkom tipfelera u README-u (datoteci koja objašnjava o čemu se projekt radi), i eto te, sudioniče u projektu čijeg autora ni ne znaš. Ovo prije GitHuba jednostavno nije postojalo u ovom obliku. Kod je postojao, negdje, na serveru, ali nije postojao društveni sloj oko koda koji te navede da klikneš dalje.

Ali ovdje se lanac reakcije ne zaustavlja na simpatičnom. Nekoliko godina kasnije GitHub uvodi contribution graph — onu mrežu zelenih kvadratića na tvom profilu, jedan kvadratić po danu, tamniji što si više commitao, odnosno što si više puta tog dana snimio neku promjenu u kodu (commit je, jednostavno rečeno, »snimka« jedne promjene — kao spremanje verzije dokumenta, uz bilješku što je i zašto promijenjeno). Genijalno kao dizajn: jedan pogled i vidiš cijelu godinu tuđeg (i svog) rada. Problem je što je to isto toliko genijalno kao psihološki trik koliko i kao vizualizacija podataka. Ljudi počinju commitati praznim commitovima samo da kvadratić ne ostane bijel. Streak od 400 dana postaje osobni identitet. Prazan tjedan na grafu postaje razlog za tjeskobu koja nema nikakve veze sa stvarnom kvalitetom koda koji si napisao — samo s tim je li kvadratić zelen.

To je tanka granica na kojoj GitHub balansira od tog trenutka nadalje: društveni sloj koji je omogućio učenje i suradnju istovremeno je alat koji pretvara rad u performans, gledan od strane cijelog svijeta, mjeren bojom pikselā. O toj drugoj strani, o tome što se dogodi kad se ljudski rad svede na zeleni kvadratić koji svi vide, pričat ćemo detaljnije kasnije — ovo je samo sjeme koje je posađeno 2008., a klica će izrasti u sasvim ozbiljan problem.

Eskalacija: open source eksplodira
§ 03

Eskalacija: open source eksplodira

Dobro, sad brojke, jer bez njih ovo zvuči kao još jedna priča o startupu koji je bio kul. 2008. na GitHubu je nekoliko tisuća repozitorija, uglavnom Rubyja, uglavnom ljudi koji se međusobno poznaju s konferencija. 2010. već je to šest znamenki. 2012. milijun korisnika. Danas broj repozitorija ide u stotine milijuna, a broj korisnika u stotinjak milijuna, i ta je krivulja klasična „hokejaška palica” — dugo ravna linija po podu, pa u jednom trenutku poleti prema stropu i ne prestaje. Ono što je 2008. bilo dućan za Ruby entuzijaste, 2015. je postalo de facto glavni grad interneta za kod. Ne jedan od gradova. Glavni grad.

A onda se dogodi ono što se uvijek dogodi kad jedno mjesto postane dovoljno veliko — ekosustavi se presele u njega i sagrade kuću. Da razjasnimo o čemu govorimo: paket-menadžer je alat koji developeru automatski dovuci i instalira tuđe komadiće koda (»pakete«) koje netko drugi već napisao, umjesto da svaki put iznova izmišlja kotač — pomalo kao trgovina mješovitom robom za programere. npm za JavaScript, RubyGems za Ruby, PyPI za Python — tehnički gledano, to su zasebni servisi, vlastite baze, vlastita infrastruktura za preuzimanje tih paketa. Ali sam kod, ona stvar koju ti paket-menadžer na kraju povuče i instalira, u ogromnoj većini slučajeva živi na GitHubu. Repozitorij je izvor, npm je samo poštar. To znači da kad je 2016. jedan developer u napadu bijesa povukao s npm-a paket od jedanaest redaka koda zvan left-pad — dovoljno malen da bi ga svaki programer napisao u kavi dok čeka narudžbu — pola interneta se ugasilo na nekoliko sati, jer je pola svjetske web infrastrukture na jednom mjestu vuklo taj paket, a to jedno mjesto je bio npm. Ta priča ima svoje puno poglavlje negdje drugdje u ovoj knjizi, i zaslužuje ga — ali korijen te drame posađen je upravo ovdje, u trenutku kad je GitHub prestao biti mjesto gdje spremaš kod i postao mjesto odakle cijeli svijet vuče kod bez da ikad razmisli odakle.

Pitanje koje su si developeri postavljali 2005. bilo je: gdje je kod za taj projekt? Odgovor je mogao biti bilo gdje — na privatnom serveru firme, na SourceForgeu, na tarball datoteci koju ti je netko poslao mailom jer je server bio dolje. 2012. to se pitanje jednostavno pretvorilo u: koji je GitHub? Ne gdje. Koji. Kao da pitaš koji je broj telefona, a ne kojim se kanalom komunikacije ta osoba služi. Kratka domena plus korisničko ime, i ti već znaš da tamo, na tom URL-u, postoji README, postoji povijest commitova, i postoje issue-i — stranice na kojima ljudi prijavljuju bugove ili predlažu nove ideje, i onda se svađaju je li nešto zapravo bug ili je to tako i trebalo biti. Cijela jedna kognitivna kategorija — »gdje tražim kod« — smanjila se s beskonačnog na jedno mjesto. To je ono što se dogodi kad network effect stvarno upali: prestaneš pitati je li nešto tamo, i počneš pitati samo kako se to točno zove.

I tu se dogodi nešto lijepo i nešto zajebano, u istoj rečenici, jer je stvarnost pošten čovjek koji ne bira strane. Lijepo: prvi put u povijesti ove struke, netko bez diplome, bez imena fakulteta na papiru, bez veza, može otvoriti profil, dokazati kroz stvarni kod da znade slagati stvari koje rade, i dobiti posao na temelju toga. To je demokratizacija u punom smislu riječi, ne marketinška fraza — vrata koja su prije bila zaključana kredencijalima, otključana su commit historyjem, tim istim nizom „snimki” svake promjene koda o kojem smo već govorili. Zajebano: to isto postane novi oblik nadzora. GitHub, vidiš, svakom profilu crta mrežicu zelenih kockica — jednu za svaki dan kad si nešto commitao, kao neki digitalni kalendar dobrog vladanja — i ta mrežica postane novi predmet suđenja. Praznina u zelenim kockicama za vrijeme dok si bio na bolovanju postaje pitanje na intervjuu. Broj commitova postaje metrika koju menadžeri gledaju kao KPI (mjerni pokazatelj učinka, omiljena skraćenica onih koji vole brojke više od stvarnog posla), iako svatko tko je pisao kod zna da jedan dobar commit koji rješava problem od tri tjedna vrijedi više od pedeset sitnih ispravki razmaka. Profil koji je trebao biti tvoj digitalni portfelj, tvoja slobodna izjava, postane tvoja sjena koja te prati na svaki razgovor za posao, htio ti to ili ne.

Dakle, to je eskalacija ako je gledaš iz zraka: jedno dugme za forkanje projekta preraslo je u infrastrukturu na kojoj sjede najveći jezični ekosustavi planete, u novu definiciju gdje se kod nalazi, i u novi oblik profesionalnog identiteta koji je pola dokaz vještine, a pola razlog za anksioznost. Nitko od te trojice Ruby developera 2008. nije sjedio i planirao da će jednog dana biti razlog zašto regruteri gledaju zelene kvadratiće umjesto motivacijskih pisama. Ali eto — kad ukloniš trenje iz suradnje, ljudi se saberu na jednom mjestu u brojkama koje ti mijenjaju cijelu strukturu industrije ispod nogu, dok ti nisi ni primijetio da se to događa.

Domino: jedan centar decentraliziranog svijeta
§ 04

Domino: jedan centar decentraliziranog svijeta

Sjećaš se prošlog poglavlja? Onog cliffhangera gdje smo objasnili da je Git — sam alat, ne stranica, alat — distribuiran do srži. Svaki kloniran repozitorij nosi cijelu povijest projekta. Ne postoji jedan server koji mora živjeti da bi kod nastavio postojati. Linus je to napravio namjerno, gotovo ideološki: nikad više jedna točka kvara, nikad više jedan čovjek ili firma koja ti može ugasiti pristup vlastitom radu. Distribucija kao filozofija otpora centralizaciji.

I onda su trojica developera 2008. sjeli i na taj isti alat nalijepili — centar. Jedan. GitHub nije distribuiran ni po čemu osim po nazivu susjedne riječi u imenu. Svi tvoji forkovi, svi pull requestovi, sva ta divna decentralizirana Gitova arhitektura — sjede na serverima jedne kompanije, u San Franciscu, s jednim admin panelom i jednom tvrtkom koja odlučuje što je dozvoljeno a što nije. Ironija je toliko debela da bi je mogao rezati nožem: alat rođen da nikome ne treba gospodar, dobio je gospodara u prvoj godini ozbiljne primjene.

To se zove network effect (efekt mreže) — i nije nova ideja, ista logika drži Facebook, Uber, burzu papirnatog novca. Nisi na GitHubu zato što je GitHub tehnički superioran nekom drugom hostingu koda (SourceForge je, iskreno, radio istu stvar deceniju prije, samo ljepše ružno). Na GitHubu si zato što su svi ostali na GitHubu. Poslodavac traži link na profil, ne na neku alternativu koju mora prvo objašnjavati IT-u. Open source projekt koji nije na GitHubu djeluje sumnjivo, kao restoran bez adrese na Googleu — postoji, ali zašto bi riskirao.

I tu dolazi pitanje koje 2008. nitko ozbiljno nije postavljao, jer je zvučalo paranoično: što znači kad infrastruktura koja nosi cijeli open source svijet — dobrovoljni, besplatni, ničiji rad tisuća ljudi — ima jednog vlasnika? Ne metaforičkog, nego stvarnog, s bankovnim računom i upravnim odborom. Odgovor 2008. bio je: ništa, valjda, oni su dobri tipovi, vole open source. Odgovor 2018., kad Microsoft — da, taj Microsoft, čiji je šef 2001. javno nazvao Linux »rakom« — kupi GitHub za 7,5 milijardi dolara, bit će nešto kompliciraniji. Ali to je priča koja čeka svoje poglavlje dalje u ovoj knjizi, s ironijom koja se sama piše.

Za sada je bitno samo ovo: ono dugme Fork s početka poglavlja nije samo olakšalo suradnju. Ono je stvorilo gravitaciju. A gravitacija, kad je jednom dovoljno jaka, povuče sve prema jednoj točki — pa i alat rođen da takvu točku izbjegne.

Svijet kakav poznaješ
§ 05

Svijet kakav poznaješ

Evo gdje smo stigli. Riječ „pull request” pobjegla je iz koda kao što je „googlati” pobjegla iz naziva firme. Zakonodavci u nekim zemljama danas objavljuju nacrte zakona na GitHubu i pozivaju građane da šalju pull requestove — ne metaforički, stvarno, s diffom (prikazom crveno-zelenih redaka koji jasno pokazuju što je dodano a što obrisano) koji pokazuje što je dodano a što obrisano. Pisci objavljuju rukopise na GitHubu i puštaju čitatelje da predlažu izmjene rečenica. Dizajneri verzioniraju fontove. Kuhari — ne šalim se — verzioniraju recepte. Sve to jer je netko 2008. htio riješiti trenje oko slanja patcheva, i u tom rješavanju slučajno izmislio univerzalni protokol za „predlažem promjenu, ti odluči”.

To je već dovoljno veliko za jedno dugme. Ali nije ni najveće.

Najveće je ovo: GitHub je, bez plana i bez ičije namjere, postao najveće skladište ljudskog koda u povijesti vrste. Ne najveće po veličini diska — najveće po tome koliko je toga na jednom mjestu, javno, čitljivo, s povijesti promjena uključenom u paket. Milijarde redaka. Milijuni projekata. Svaka pogreška koju je programer ikad napravio i popravio, zapisana, s objašnjenjem zašto, u commit poruci ispod.

I onda se, godinama kasnije, postavilo pitanje koje 2008. nitko nije ni mogao postaviti, jer riječ za to još nije postojala u ovom kontekstu: što ako nekoga — ili nešto — naučiš čitati sve to?

Ali nemoj sad zamišljati zlog genija koji je 2008. u garaži oprao ruke i rekao „savršeno, ovo će jednog dana hraniti umjetnu inteligenciju”. Nije bilo plana. Bilo je samo dugme koje je riješilo dosadan problem — kako da ti kolega vidi tvoj kod bez slanja e-mailova s prilogom. Sve ostalo je domino koji se sam gurao, godinu za godinom, commit za commitom, dok se sitnica nije pretvorila u infrastrukturu, infrastruktura u ekonomiju, a ekonomija u — ovo. U svijet u kojem je glagol „forkati” riječ koju bi tvoja baka mogla koristiti kad govori o receptu, a najveća tehnološka priča desetljeća počinje s riječju koja je 2008. značila samo „daj da si kopiram tvoj kod i vidim što se dogodi”.