GitHub Copilot (2021)
Kako je jedan autocomplete tiho pretvorio pisanje koda u uređivanje tuđih pretpostavki – i zašto se cijela struka odjednom preznojila.
Sredina 2021. Zamisli programera koji tipka. Godinama je to izgledalo tako: napišeš pola imena funkcije, tipkovnica ti ponudi ostatak, prihvatiš s tipkom Tab, i to je bio vrhunac pomoći od stroja. Prije toga? Otvoren drugi monitor sa Stack Overflowom, ta časna disciplina copy-paste programiranja koju svi rade a nitko ne priznaje, i copy-paste tuđeg rješenja s promijenjenom jednom varijablom. Generacije developera su tako preživjele. Nitko se nije bunio, jer alternative nije bilo.
Onda dvije tvrtke koje bi trebale biti konkurenti, ali su obje, na neizravan način, u orbiti istog Microsofta, odluče spojiti stvari. GitHub — kupljen 2018. (K6, poglavlje 26), ono mjesto gdje cijeli svijet drži svoj kod — i OpenAI, u kojeg je Microsoft upravo uložio milijarde i s kojim je u čvrstom partnerstvu, a koji upravo sjedi na GPT-3 (poglavlje 5), modelu koji je već zapanjio svijet time što piše ljudski tekst. Netko u toj kombinaciji postavi pitanje koje je u povijesti softvera zvučalo kao znanstvena fantastika: što ako model ne dovršava riječi, nego dovršava kod? Ne sljedeći znak. Sljedeću funkciju.
Ime dobiva Copilot — »kopilot«. I to je ime, ironično, prva poštena stvar u cijeloj priči, jer piloti i dalje sjede u kokpitu, samo im sad nešto šapće rješenja s desnog sjedala. Napišeš komentar u kodu, obično rečenicu tipa „sortiraj listu po datumu”, i dok još razmišljaš kako bi to zapravo napisao, cijela funkcija se već pojavljuje ispred tebe, sivkasto, kao duh koji čeka da ga prihvatiš tipkom Tab.
To pitanje, ispostavit će se, nije bilo paranoja jednog nervoznog programera negdje u pivnici. Bilo je prvi domino u nizu koji će se sljedeće dvije godine rušiti kroz cijelu strukturu „bijelih kragni” — dakle svih onih zanimanja gdje se posao radi glavom, a ne rukama. Ali to, u lipnju 2021., još nitko nije znao. Znali su samo jedno: da nešto što je do sada bilo isključivo ljudska vještina — pisanje koda — sada, prvi put masovno i u produkciji, radi stroj.
A negdje u pozadini, dok su se developeri igrali s novom igračkom, pravnici su počeli otvarati laptope s puno manje entuzijazma. Jedno pitanje im nije dalo mira, i to pitanje će odjekivati cijelim ovim poglavljem kao domino koji se ne zaustavlja: na čemu je, zapravo, ovaj model treniran? I čiji je taj kod koji sad ispisuje — njegov, ili ipak, na kraju krajeva, tuđi?
I upravo ta funkcija dovršavanja, to sivo slovo koje čeka samo da pritisneš Tab i prihvatiš ponuđeno, postaje sljedeći mali domino u nizu koji je već krenuo.
Prije nego nastavimo, skinimo mu aureolu, jer ovdje nema magije, ima samo puno tuđeg rada. Copilot je GPT model (onaj isti soj o kojem smo pisali kad je OpenAI pustio GPT-3 u svijet), samo istreniran ne na Wikipediji i forumima, nego na kodu. Na milijunima repozitorija — zamisli ih kao mape na Googleovom disku, samo za programere, gdje developer sprema sve verzije svog projekta — javno dostupnih, s GitHuba. Sjećaš se kako smo već pisali o tome kako GitHub postaje najveće svjetsko skladište koda, mjesto gdje su developeri, iz čiste navike i pomalo iz ponosa, spremali sve — od studentskih zadaća do infrastrukture koja pokreće banke? E vidiš, upravo je to skladište, u tišini, postalo trening-set. Nitko nije tražio dopuštenje za većinu toga. Samo je bilo tamo, javno, i netko je odlučio: dobro, ovo je hrana za model.
Pa dobro, kažeš, treniraj model na kodu, u čemu je trik? Trik je u tome što model ne kopira mehanički redak po redak (barem ne uvijek, i o tom „barem ne uvijek” ćemo za par stranica), nego je iz milijardi primjera naučio uzorak. Naučio je da iza komentara „sortiraj po datumu” obično slijedi petlja, ili pozivanje neke standardne funkcije za sortiranje, s parametrom koji uspoređuje datume. Naučio je da iza „provjeri je li email valjan” slijedi regex — poseban obrazac, svojevrsni kod za pretraživanje teksta po pravilima, recimo da provjeri sadrži li niz znakova onaj obavezni '@' i točku nakon njega — koji je svaki developer na planetu kopirao sa Stack Overflowa bar jednom u životu. Nije shvatio što je email. Ne razmišlja o tome. Samo je vidio taj obrazac toliko puta da mu je statistički najvjerojatniji odgovor postao gotovo pa refleks.
I tu dolazimo do onog neugodno-ugodnog osjećaja koji je, ljeta 2021., prostrujao kroz cijelu struku. Nazovimo ga upareno programiranje s duhom. Znaš onu praksu, pair programming, gdje dvoje ljudi sjedi za istim ekranom, jedan piše, drugi gleda preko ramena i dovikuje ideje, hvata greške, predlaže bolji naziv varijable? Copilot je pokušao biti taj drugi. Samo što ovaj kolega ne ide na pauzu za kavu, ne žali se na menadžment i ne postoji. Nema tijela, nema lica, nema mišljenja o tvom kodu izvan onoga što mu istog trenutka predložiš da napiše.
Za developera koji je godinama radio ono što smo u petoj knjizi zvali copy-paste programiranje — otvori Stack Overflow, nađi tuđe rješenje, prilijepi ga, prilagodi dvije varijable — Copilot je djelovao kao prirodan sljedeći korak. Isto ponašanje, samo brže, unutar editora, bez otvaranja preglednika. Ali ta blaga, gotovo neprimjetna promjena — da AI ne čeka da ga pitaš, nego ti nudi rješenje prije nego što stigneš i formulirati problem — bila je sljedeći domino u nizu. Svi ostali, uključujući onaj koji će za dvije godine zatresti cijelu bijelu kragnu, čekaju u redu.

Prvi šok struke
Prva reakcija programerske zajednice na Copilot bila je otprilike ona koju imaš kad ti netko izbliza pokaže mađioničarski trik. Fascinacija, pa nelagoda, pa ono pitanje koje ne izgovaraš naglas: čekaj, kako je to uopće moguće? Društvene mreže su se punile snimkama zaslona — netko napiše komentar u stilu „funkcija koja parsira CSV i vraća listu rječnika” (CSV je najjednostavniji format tablice, gdje su vrijednosti odvojene zarezima, zamisli Excel bez sučelja; a rječnik je u programiranju samo popis parova „ključ – vrijednost”, slično kao pravi rječnik gdje uz riječ stoji njezino značenje) — i pojavi se cijela funkcija, ispravna, s rukovanjem greškama, kao da je alat pročitao misli. Ljudi su to zvali čarolijom, a onda su, otprilike tjedan dana kasnije, isti ljudi počeli postavljati drugo pitanje. Ono neugodno. Ovo mi radi posao?
To pitanje nije bilo hipotetsko. Developeri su generacijama gradili identitet oko toga da su jedini koji znaju čarati sintaksu iz ničega — to je bila vještina koja te dijelila od običnog svijeta, ono „ne razumijem što radiš, ali izgleda pametno” poštovanje koje dobiješ na obiteljskom ručku. I onda se pojavi alat koji istu čaroliju izvodi u razlomku sekunde, iz komentara koji bi napisao i netko tko ne znа otvoriti terminal. Egzistencijalni trzaj nije pretjerivanje. To je bio prvi put da je čitava struka, masovno, pogledala u zaslon i vidjela mašinu koja radi njihov posao — ne dio posla, ne pomoć oko posla, nego posao. Barem naizgled.
Jer stvar je, kao i uvijek kad se šokira cijela profesija, bila složenija od naslova. Copilot je zaista dobar u nekim stvarima — zapravo, u nekim stvarima je zapanjujuće dobar. Boilerplate kod, onaj dosadni dio programiranja koji svaki developer napiše tisuću puta u karijeri i svaki put ga mrzi — konfiguracija, standardni testovi, CRUD operacije (create, read, update, delete, ono osnovno kuckanje baze podataka koje radi svaka aplikacija na svijetu) — Copilot izbacuje kao stroj za palačinke. Prepoznaje obrazac, ponovi ga, i uštedi ti dvadesetak minuta tipkanja na koje tvoj mozak nikad nije trebao trošiti vrijeme jer je odgovor bio poznat unaprijed. Za to je AI savršen alat: kad je odgovor negdje već napisan tisuću puta na GitHubu, statistički model će ga se sjetiti.
I to je tek prvi kat problema. Drugi kat su suptilni bugovi — kod koji se kompajlira, koji izgleda razumno, koji možda čak i radi u devedeset posto slučajeva, ali negdje u onom preostalih deset posto krije grešku koju nitko ne primijeti dok se ne raspadne u produkciji, u tri ujutro, na tuđoj smjeni. A treći kat, onaj koji je stvarno natjerao sigurnosne timove da posegnu za kavom, jesu ranjivosti. Istraživanja su relativno brzo pokazala da Copilot, treniran na ogromnoj masi javnog koda — a javni kod uključuje i onaj napisan loše, nesigurno, s greškama koje su ljudi popravili tek nakon što su ih netko hakirao — povremeno predlaže obrasce koji otvaraju vrata baš onakvim napadima kakve je struka desetljećima učila izbjegavati. Recimo, SQL injekcija — trik gdje netko u polje za unos, ono gdje inače upišeš korisničko ime ili lozinku, ubaci lukavo sročen tekst koji prevari bazu podataka da odradi naredbu koju nikad nije trebala izvršiti, poput otključavanja svih podataka umjesto samo tvojih. Baš takvi obrasci, loše rukovanje lozinkama i slične starinske gluposti, bili su negdje u tom trening skupu, i model ne razlikuje dobar primjer od upozorenja da to nikad, ali nikad ne radiš tako.
Pa dobro, koliko onda taj alat stvarno ubrzava rad? Ovdje dolazimo do dijela gdje treba biti oprezan s brojkama, jer te brojke gotovo uvijek dolaze od nekoga kome je u interesu da priča ide u smjeru čarolije. GitHub je objavio internu studiju koja govori o developerima koji su rješavali zadatke i preko pedeset posto brže s Copilotom nego bez njega. Zvuči fenomenalno, i vjerojatno jest istina — za taj konkretan, kontroliran zadatak. Ali brzina pisanja koda nije isto što i kvaliteta softvera, a to je razlika koju je struka učila na teži način kroz cijelu svoju povijest. Napisati kod brzo ne znači ništa ako taj kod netko drugi mora čitati, održavati i debugirati sljedećih pet godina, a upravo se oko čitljivosti i namjere studije puno manje slažu. Neke naknadne analize pokazale su da se, dugoročno, količina bugova po liniji koda ne mijenja dramatično — samo se te linije pišu brže. Brzina jest stvarna. Poanta je da brzina nije cijela slika, koliko god naslovi voljeli tvrditi suprotno.
A onda tu je i onaj dio priče koji je već poznat iz drugih poglavlja ove knjige — demokratizacija, ona riječ koja se vraća svaki put kad se prag ulaska u neku vještinu srozava. Osobna računala su demokratizirala pristup programiranju u sedamdesetima, visoki programski jezici su demokratizirali sam kod tako da nisi morao znati asembler, low-code i no-code platforme su demokratizirale izradu jednostavnih aplikacija za ljude koji nikad neće naučiti sintaksu. Copilot je bio sljedeći korak u tom istom nizu — sad ne moraš čak ni znati napisati funkciju, dovoljno je da znaš opisati što ta funkcija treba raditi. Za neke je to bilo oslobođenje, novi ulazak u struku koja je desetljećima tražila diplomu ili barem godine samostalnog učenja. Za druge, one koji su te godine već potrošili, to je bilo upozorenje da vrata koja su nekad bila teško zaključana sad otvaraju nogom svi redom. Ta panika, ta nelagoda oko toga tko je zapravo programer kad stroj piše umjesto njega, nije nestala 2021. — samo se zakuhala. I to je bio predjelo, ne glavno jelo. Glavno jelo, ono koje će se zvati vibe coding i koje će cijelu ovu raspravu odvesti do apsurda, još je bilo godinama daleko.

Pravni potres: na čemu je treniran
Vratimo se na trenutak toj sitnici iz prve sekcije — Copilot je treniran na javnom kodu s GitHuba. Zvuči nevino, čak plemenito: pola interneta piše kod javno, otvoreno, za sve. Samo što „javno” i „slobodno za korištenje” nisu sinonimi, a to je razlika koju je cijela zajednica otvorenog koda desetljećima brižno čuvala u malim datotekama zvanim LICENSE. GPL, MIT, Apache, BSD — svaka licenca ima svoja pravila, svoje uvjete, svoje granice. Model koji je trenirao Copilota nije pitao za dozvolu ni jednu od njih. Progutao je sve, bez razlike, kao da su ionako isto — sitnica koja je upravo pokrenula sljedeći domino u nizu.
Prva posljedica: Copilot je počeo, ponekad, doslovno citirati. Ne u smislu „inspiracije” ili „sličnog obrasca” kakav bi napisao svaki iskusan developer koji je vidio tisuću sortiranja liste po datumu — nego redak po redak, identično, uključujući komentare, uključujući čak i tuđe ime u zaglavlju koje je netko davno ostavio u svom repozitoriju. Korisnici su to snimali, screenshotali, slali na Twitter s natpisom otprilike: „gle, ovo je iz mog projekta”. GitHubov alat, izgrađen da pomaže programerima, počeo je vraćati njihov vlastiti kod — bez atribucije, bez licence, bez ijedne riječi zahvale, kao suvenir iz vlastite kuće koji ti netko drugi prodaje na buvljaku.
Ovo nismo vidjeli prvi put. Izrabljivanje otvorenog koda (K4, H2) oduvijek je imalo istu koreografiju — netko besplatno dâ svoj rad zajednici u dobroj vjeri, a netko drugi, obično veći, obično s pravnim odjelom, upakira ga u proizvod i prodaje dalje. Razlika je što je do sada za to trebao čovjek koji svjesno kopira. Copilot je taj proces automatizirao, uljepšao ga slojem statistike i nazvao ga „generiranjem” umjesto njegovim starim imenom.
Eskalacija je bila neizbježna i stigla je u obliku koji svaka velika tehnološka drama na kraju dobije — parnice. Skupna tužba protiv GitHuba, Microsofta i OpenAI-a podnesena je 2022. godine, a temelj je jednostavan: ako je Copilot treniran na kodu pod licencama koje zahtijevaju atribuciju ili copyleft (GPL prije svega — K3, pogl. 21, sjeti se te licence, upravo se vraća na velika vrata), a Copilot to ignorira i reproducira taj kod bez ičega od toga, je li to legalno korištenje ili je to najskuplja fotokopirnica u povijesti softvera?
Pravnici s obje strane znoje se oko pojma koji zvuči dosadno, a vrijedi trilijune: „fair use”, odnosno „poštena upotreba” — pravni izraz koji kaže da tuđe djelo možeš koristiti bez dozvole ako to radiš na dovoljno drugačiji, „transformativan” način. Je li treniranje modela na tuđem kodu takva transformativna upotreba — kao što citiranje rečenice u kritici nije plagijat — ili je to samo krađa u većem, skupljem, korporativnijem izdanju? Isto pitanje, gotovo riječ za riječ, postavljalo se i za Napster (K4) — samo je tada u pitanju bila glazba, a suci su na kraju odlučili da „ali svi su to radili” nije pravna obrana. Sada je predmet kod, protivnik je bogatiji, a odluka će odrediti hoće li se cijela iduća generacija AI alata graditi na tuđem radu bez pitanja — ili će netko, konačno, morati platiti.
Ništa od toga još nije presuđeno dok ovo čitaš — parnica se vuče, kako parnice to i rade, sporo i skupo. Ali sjeme je posijano, i nicat će kroz cijelu ovu knjigu: pitanje na čemu je nešto trenirano postat će jedno od najvažnijih pitanja desetljeća (K8, pogl. 10, ratovi podataka — ovo je bila tek prva bitka, i još nismo ni blizu kraja).

Kako mijenja rad developera
Sljedeći domino, i ovaj je najveći do sad, jer ne pada na kod. Pada na tebe. Na ono što uopće znači „biti programer”. Do sad je posao izgledao ovako: gledaš prazan ekran, misliš, tipkaš, brišeš, tipkaš ponovo, psuješ, kava, tipkaš dalje. Sad izgleda ovako: gledaš prijedlog koji je stroj već napisao i odlučuješ — da ili ne. Od autora si postao urednik. Netko drugi (nešto drugo) piše prvu verziju, a ti je samo pregledavaš, kao lektor koji dobije tuđi tekst i mora presuditi je li dovoljno dobar da ide dalje. Ovo se neće zaustaviti na Copilotu — za dvije godine cijeli će alati (vidi poglavlje 5, kasnije u ovoj knjizi) biti izgrađeni oko te ideje: developer koji ne piše, nego odobrava.
I to zvuči udobno, sve dok ne dođeš do pitanja koje nitko baš ne voli glasno postaviti: ako je netko cijelu karijeru učio tako da tipka, briše, tipka ponovo — a onaj koji tek počinje karijeru odmah dobije gotov odgovor — uči li on isto? Ili samo uči kliknuti tab?
A onda dolazimo do rečenice koja će, obećavam ti, progoniti cijelu industriju sljedećih desetak godina, i koju ćeš čuti u svakoj kavani gdje sjede developeri: „Radi. Ne znam zašto radi, ali radi.” Zvuči kao vic. Nije. To je 2021. postala legitimna radna metoda — kopiraš prijedlog, pokreneš, testovi prolaze, commitaš (to je onaj trenutak kad developer trajno spremi svoju promjenu u zajedničku povijest projekta, kao da lijepi novu stranicu u dnevnik koji svi kolege mogu pročitati), ideš dalje. Kod koji funkcionira, a nijedan živi čovjek ga stvarno nije pročitao, razumio, niti mogao objasniti kolegi u dva navrata bez guglanja.
Ovo nije nova bolest — copy-paste sa Stack Overflowa (sajta gdje su developeri desetljećima kopirali tuđa rješenja umjesto da ih pišu iznova) radio je istu štetu, samo sporije i s manje entuzijazma (o tome smo već pisali, knjiga 5, poglavlje 15). Copilot samo ubrizgava tu istu naviku ravno u venu, bez potrebe da uopće otvoriš drugi tab. I to je sjeme koje će klicati kasnije, u ovoj istoj knjizi, kad dođemo do pravog pitanja: što se dogodi kad software počne pisati software kojeg nitko ne razumije, a onda taj software pokvari nešto stvarno — banku, bolnicu, avion?
Zato se rađa vještina koju devedesetih nitko nije morao učiti — jednostavno nije postojala potreba za njom — vještina prepoznavanja trenutka kad je stroj u krivu. Ne znanje pisanja koda, nego znanje čitanja tuđeg, strojnog koda i njuh za onaj trenutak kad nešto izgleda uvjerljivo, a zapravo je suptilno pogrešno. Ta vještina je, ironično, teža od same vještine pisanja koda: lakše je nešto stvoriti od nule nego uhvatiti tuđu grešku skrivenu u petnaest redaka koji na prvi pogled djeluju kao da znaju što rade.

Predigra za sve
Vratimo se na trenutak na taj domino koji smo počeli gurati na prvoj stranici ovog poglavlja. Sitnica: model treniran da nastavi rečenicu. Prva posljedica: taj model, hranjen kodom umjesto proze, nastavlja funkcije. Eskalacija: funkcije koje nastavlja dovoljno su dobre da ih milijuni developera prihvate kao kolegu iz kabine pored. I sad dolazimo do zadnjeg komada domina, onog koji padne na cijeli svijet — ne samo na programere.
Jer evo ključnog uvida koji je Copilot, tiho i bez fanfara, dokazao 2021.: AI ne treba razumjeti svijet da bi bio koristan u njemu. Treba samo dovoljno primjera. Kod je bio idealan poligon za tu ideju — strukturiran, obilan, javno dostupan u apsurdnim količinama na samom GitHubu, gdje su ležali milijuni tuđih repozitorija spremni da ih netko nahrani stroju — pa je ispao logičan prvi izbor. Ali ako recept radi za kod, zašto ne bi radio za ugovore, za marketinške tekstove, za arhitektonske nacrte, za dijagnoze na rendgenskim snimkama? Odgovor je: radi. Copilot nije bio čudo specifično za programere. Bio je dokaz koncepta za sve ostale, samo to još nitko naglas nije rekao.
Druga stvar koju je Copilot tiho pokrenuo, a koja će eksplodirati kasnije: pomak od asistenta prema agentu. 2021. je Copilot samo dovršavao — ti napišeš komentar, on ponudi funkciju, ti pritisneš Tab ili ne. Pasivan je. Čeka. Ali logika koja stoji iza njega — model koji razumije kontekst dovoljno da predloži cijeli blok koda — ista je logika koja će za koju godinu dobiti pristup terminalu (onom crnom prozoru u koji se upisuju naredbe, bez tipkanja i klikanja po sučelju), mogućnost da sam pokreće testove, sam popravlja greške, sam ih „commita”. Copilot 2021. je bio djetešce. Alati koji su ga naslijedili, oni koji sami preuzimaju cijele zadatke bez čekanja na Tab, spadaju u sasvim drugu knjigu ove enciklopedije — i tamo ćemo im posvetiti dužnu pažnju, s pravom dozom nervoze.
Ali poanta ove kronike, ako je moraš ponijeti kući u jednoj rečenici, glasi ovako: 2021. je bila godina kad je AI prvi put ušao u profesionalni tijek rada milijuna ljudi — ne kao demo na konferenciji, ne kao chatbot koji odgovara na pitanja o vremenu, nego kao alat koji stvarno, svaki dan, radi dio posla za koji te plaćaju. I ušao je tiho, ne s najavom revolucije, nego kao dodatak u programu za pisanje koda koji instaliraš u dvije minute i onda zaboraviš da je čudo. Upravo ta tihoća je normalizirala ono što je dolazilo. Dok su ekonomisti i futurolozi raspravljali hoće li AI jednog dana ugroziti bijele kragne, bijele kragne — one s tipkovnicom umjesto kravate — su već radile s njim, svaki dan, i polako se navikavale.
I baš ta navika je bila prag. Jer kad je iduće godine stigao alat koji nije samo dovršavao kod nego je pristojno, tečno i uvjerljivo dovršavao rečenice o bilo čemu — pisma, esejima, e-mailove, isprike šefu zašto kasniš — svijet je već bio djelomično pripremljen. Programeri su odradili beta-test za civilizaciju. Copilot je bio proba. ChatGPT je bio premijera, i o njoj, dragi čitatelju, upravo idemo pričati.