Programska oprema, ki deli: Nov nacin gradnje
V moji soseski je ulica, kjer so tri razlicna komunalna podjetja v istem mesecu izkopala isti kos plocnika. Najprej vodovodno podjetje. Nato plinsko. Nato ponudnik interneta. Vsako je zarezalo v tla, polozilo svoje cevi in zasulo nazaj. Nobeno se ni pogovarjalo z drugim. Nobeno ni delilo jarka.
Tako gradimo programsko opremo.
Mesto, kjer se nic ne povezuje
Zamislite si mesto, kjer ima vsaka zgradba svoj elektricni standard. Vsak blok proizvaja svojo energijo. Vsaka hisa govori drug jezik. Pekarna na vogalu ima svoj koledar. Sola cez cesto uporablja drugega. Bolnisnica na koncu ulice je izumila tretjega.
Taksnemu mestu bi rekli nefunkcionalno. Rekli bi mu absurdno.
In vendar je to natancno svet, ki smo ga zgradili s programsko opremo.
Vas e-postni sistem ne ve, da vas koledarski sistem obstaja. Vasa banka ne more govoriti z vasim zdravstvenim zavarovalnicem, tudi ko morata koordinirati isti dogodek v vasem zivljenju. Prostovoljska skupina v vasem mestu uporablja eno aplikacijo za organizacijo, banka hrane drugo, obcinski urad za storitve tretjo. Vsi sledijo istim druzhinam, istim potrebam, istim virom, in nobeden ne vidi, kar vidijo drugi.
Vsaka aplikacija je svoj silos. Svoj jezik. Svoja razlicica resnicnosti.
Desetletja smo gradili programsko opremo, ki je mocna v izolaciji in neuporabna v kombinaciji. In to smo sprejeli kot normalno, tako kot bi mesto morda sprejelo, da bodo njegove ulice vedno razkopane.
Kaj, ce bi programska oprema lahko delila?
Vprasanje ni, ali potrebujemo boljse aplikacije. Dobrih aplikacij imamo dovolj. Vprasanje je, ali lahko aplikacije soobstajajo, ali si lahko delijo skupno razumevanje sveta, ne da bi jih zgradilo isto podjetje, ne da bi tekle na isti platformi, ne da bi bile zaklenjene v isti ekosistem.
V resnici morajo sistemi za skupno delovanje deliti le tri stvari.
Dejstva, kaj je res. Kdo zivi v tej soseski. Kateri viri so na voljo. Koliko postelj ima zavetisce. Katere vescine prinasajo prostovoljci. Ne mnenja. Ne napovedi. Samo trenutno stanje stvari, dogovorjeno in dostopno.
Pomislite na to kot na skupen telefonski imenik za mesto. Ne telefonski imenik enega podjetja, temvec skupen register, ki ga lahko vsak sistem bere in prispeva vanj. Ko banka hrane posodobi svojo zalogo, jo koordinator prostovoljcev lahko vidi. Ko obcinski urad registrira novo druzino, je sistem vpisa v solo obvescen. Ne zato, ker je nekdo rocno prekopiral podatke, temvec zato, ker dejstvo obstaja v skupnem prostoru.
Pravila, kako se sprejemajo odlocitve. Kdo je upravicen do pomoci. Kako se dolocajo prioritete, ko povprasevanje preseze ponudbo. Kaj se zgodi, ko prostovoljec odpove. To niso tehnicne specifikacije. To so dogovori skupnosti, izrazeni dovolj jasno, da jim lahko sledijo tako ljudje kot programska oprema.
Danes so ta pravila pokopana v kodi. Zivijo znotraj aplikacij, nevidna za ljudi, na katere vplivajo. Druzina dobi zavrnjeno prosno za pomoc in nima nacina razumeti zakaj, ker je pravilo, ki jih je zavrnilo, skrito v funkciji, ki jo je napisal razvijalec, ki je podjetje zapustil pred dvema letoma.
Pravila bi morala biti berljiva. Ne samo za programerje, za skupnosti, ki zivijo pod njimi.
Dogodki, kaj se je zgodilo, kar bi morali vedeti drugi. Nastala je nova prostovoljska skupina. Ravni virov so padle pod varni prag. Zacel se je koordinacijski napor. Odprla se je nova skupnostna storitev. To so utripi zivega sistema, signali, ki razlicnim delom omogocajo odziv, ne da bi bili ukazani iz centralne oblasti.
Skupnostna oglasna deska deluje na ta nacin. Nihce vam ne rece, da jo preberete. Ampak ce se zgodi kaj pomembnega, je objavljeno tam, in vsakdo, ki ga zanima, se lahko odzove. Programska oprema bi morala delovati enako, objavlja, kar je pomembno, in pusti drugim, da se odlocijo, kaj bodo naredili.
Skupnost, ki koordinira
Naj to naredim konkretno.
Zamislite si majhno mesto z mrezo skupnostne podpore. Ne eno samo aplikacijo, temvec ekosistem sistemov, ki so se naucili deliti.
Druzina se preseli v obmocje in se registrira na obcinskem uradu. Ta registracija je dejstvo, vstopi v skupni prostor. Sistem vpisa v solo ga vidi in ve, da so otroci, ki potrebujejo mesto. Prostovoljna pozdravna komisija ga vidi in poslje nekoga, da predstavi sosesko. Program prehranske pomoci ga vidi in preveri upravicenost na podlagi skupnih pravil.
Nihce ni zgradil glavne aplikacije, ki bi vse to pocela. Noben posamicen ponudnik ne nadzoruje procesa. Vsak sistem je bil zgrajen neodvisno, morda od razlicnih organizacij, morda z vec let razlike. Toda delijo skupen jezik za dejstva, pravila in dogodke.
Zdaj si zamislite, da se zaloge banke hrane zmanjsajo. Oddano je sporocilo, ne dolocenemu sistemu, temvec v skupni prostor. Sistem za koordinacijo prostovoljcev ga pobere in poslje opozorilo voznikom, ki lahko opravijo nujna prevajanja. Obcinski proracunski sistem ga pobere in oznaci primanjkljaj za naslednje sreczanje o dodeljevanju sredstev. Skupnostna nadzorna plosca ga pobere in posodobi javni prikaz.
Vsak sistem se odzove na svoj nacin, v skladu s svojimi pravili. Toda vsi se odzivajo na isto resnicnost.
To ni integracija v smislu, kot jo obicajno razume industrija programske opreme. To niso API-ji, zlepljeni z vmesno opremo, ne podatkovni cevovodi, ki se stekajo v centralno jezero, ne igra platforme, kjer eno podjetje lastni sredisce. To je soobstoj. Sistemi, ki lahko obstajajo drug ob drugem, vsak opravlja svoje delo, vsak razume druge.
Zakaj to se ne obstaja
Posten odgovor je, da gradnja na ta nacin ni bila dobickonosna. Poslovni model moderne programske opreme nagrajuje silose. Ce so vasi podatki zaklenjeni v moji platformi, ne morete oditi. Ce so vasa pravila skrita v moji kodi, me potrebujete, da jih spremenimo. Ce vasi dogodki tecejo samo skozi mojo infrastrukturo, sem jaz vratar.
Obstaja tudi pristna tehnicna tezava. Deljenje pomena med sistemi je tezje kot deljenje podatkov. Dve podatkovni bazi si lahko izmenjata vrstice in stolpce. Toda ali se lahko dogovorita, kaj pomeni "upravicen"? Ali si lahko delita pravilo, kot je "daj prednost druzinam z otroki pod petimi leti" na nacin, ki ga lahko izvede tako sistem banke hrane kot sistem stanovanjske oblasti?
To je problem, ki ni bil resen. Ne instalaterske cevi, teh imamo dovolj. Temvec jezik. Skupno razumevanje, ki sistemom omogoca, da ne samo izmenjujejo informacije, temvec se dejansko strinjajo o tem, kaj pomenijo.
Protokol za soobstoj
To gradi Almadar. Temu recemo Orbitalni protokol, ceprav je ime manj pomembno od ideje.
Ideja je taka: programska oprema bi se morala roditi pripravljena na deljenje. Ne naknadno opremljena z API-ji, ne integrirana skozi drago vmesno opremo, ne zaklenjena v platformo. Zasnovana od prve vrstice tako, da razkrije svoja dejstva, objavi svoja pravila in oddaja svoje dogodke v jeziku, ki ga drugi sistemi lahko razumejo.
Orbital je kos programske opreme, zgrajen na ta nacin. Nosi svoje lastno vedenje, svoja stanja, svoje prehode, svoja pravila za to, kdaj se stvari lahko in ne morejo zgoditi. Toda nosi tudi pogodbo z zunanjim svetom: to je, kar vem, tako se odlocam, to objavljam.
Ko gradite programsko opremo kot Orbitale, se nekaj premakne. Sistemi postanejo zamenljivi, ne da bi izgubili pomen. Zamenjate lahko sistem sledenja banke hrane z boljsim, in sistem za koordinacijo prostovoljcev se ne pokvari, ker nikoli ni bil povezan z notranjostjo starega sistema. Bil je povezan s skupnim jezikom.
Skupnosti ohranijo lastnistvo svojega znanja. Dejstva, pravila in dogodki niso zaklenjeni v nobenem ponudnikovem izdelku. Obstajajo v skupnem prostoru, opisani v formatu, ki ga lahko prebere vsak sistem. Ko ponudnik izgine, znanje ostane.
In morda najpomembneje, umetna inteligenca postane infrastruktura namesto avtoriteta. V tem modelu je umetna inteligenca orodje, ki pomaga prevesti clovesko znanje v skupno sistemsko logiko. Pomaga vam izraziti, kar ze veste, kako deluje vasa skupnost, kako bi morali tecti viri, kako bi se morale sprejemati odlocitve. Ne nadomesti vase presoje. Okrepi vaso sposobnost, da jo zakodirate.
To ni znanstvena fantastika
Zelim biti jasen glede tega, kar trdimo, in tega, cesar ne trdimo.
Ne trdimo, da smo resili interoperabilnost, tistega starega zmaja industrije programske opreme. Ne trdimo, da bo vsak sistem na svetu nenadoma zaczel govoriti isti jezik jutri.
Kar trdimo, je bolj skromno in bolj specificno: obstaja nacin gradnje programske opreme, ki je strukturno pripravljena na deljenje. Programska oprema, kjer dejstva, pravila in dogodki niso naknadne misli, temvec primarna arhitektura. Programska oprema, kjer se nov sistem lahko pridruzi obstojecemu ekosistemu brez sestmesecnega integracijskega projekta.
To smo zgradili. Uporabili smo to za ustvarjanje aplikacij v popolnoma razlicnih domenah, strateske igre, vladni inspekcijski sistemi, sledilniki fitnesa, platforme za ucenje z umetno inteligenco. Isti jezik, ista struktura, isti protokol. Ne zato, ker so si te domene podobne, temvec zato, ker je osnovni vzorec vedenja univerzalen: nekaj je res, nekaj je dovoljeno, nekaj se je zgodilo.
Orbitalni protokol je nacin, kako ta vzorec naredimo deljiv.
Gradnja za to, kar pride
Industrija programske opreme je na prelomni tocki. Val umetne inteligence je resnicen in bo spremenil, kako gradimo stvari. Toda globlje vprasanje ni, ali lahko umetna inteligenca pise kodo hitreje. Globlje vprasanje je, ali sistemi, ki jih gradimo, lahko soobstajajo, ali bo naslednja generacija programske opreme ponovila vzorec silosov ali ga razbila.
Ce bomo nadaljevali z gradnjo izoliranih sistemov, se znanje koncentrira. Skupnosti izgubijo nadzor nad orodji, od katerih so odvisne. Lokalna stroka izgine v centralizirane modele, ki svet sploScijo v povprecja.
Ce namesto tega gradimo skupno digitalno resnicnost, postane mozno nekaj drugega. Skupnosti ohranijo lastnistvo svojega znanja. Sistemi postanejo zamenljivi, ne da bi izgubili pomen. Ljudje ostanejo del sistemov, ki oblikujejo njihova zivljenja.
Tri komunalna podjetja bodo se naprej loceno kopala mojo ulico. To je svet, ki ga imamo. Toda to ni svet, ki ga moramo se naprej graditi.
Programska oprema, ki deli. To je delo.
