
Predstavljajte si svet, v katerem je vedenje vsake aplikacije ali sistema izrecno določeno in na voljo njenim uporabnikom. Klepetalni robot vaših zasebnih podatkov ne more poslati na zunanji strežnik, razen če to dovolite. Aplikacija družbenega omrežja vašemu sinu ali hčeri ne more prikazovati škodljivih vsebin. Kako lahko naredimo kaj takega? Je to sploh mogoče? Trdim, da je.
Danes je to zapisano v pogojih uporabe ali v tistih nadležnih pojavnih oknih, s katerimi vsaka spletna stran zbira vaše piškotke. Tam piše nekaj takega: te podatke pošiljamo nekaterim našim »partnerjem«. Kdo so ti partnerji, prijatelj?
Kaj če bi bilo vse, kar programska oprema ali sistem počne, razglašeno kot javna pogodba, ki jo lahko prebere vsak? Kdo bi rekel: aha, tako deluje odprta koda! Žal to ne drži. Zelo razširjen nesporazum je, da odprta koda pomeni, da lahko kdorkoli prebere kodo in razume njeno vedenje, ko teče. Pomislite takole: odprta koda je kot avto v avtosalonu. Nihče ne more napovedati, kaj bo voznik z njim počel. Lahko je nevtralen upravljavec, lahko pa škodljiv.
Potrebujemo izrecen način, da uporabnikom svoje programske opreme natančno povemo, kako se ta vede, ko teče. To bi morala biti zavezujoča pogodba. To pomeni, da lahko natančno razumem, kako bo ta kos programske opreme vplival name in na mojo družino. Vem, na kaj pristajam. Morda lahko uporabim svoja orodja (morda svojega agenta umetne inteligence), da ta kos programske opreme preberem in o njem kaj vprašam, na primer: ali je ta programska oprema primerna za mojega otroka ali ne.
Danes to uveljavljajo centralizirani revizijski organi. A podjetja jih znajo spretno obiti in preglasiti, z javnostjo pa bodo igrala pravno igro. Posledice zdaj prihajajo prek skupinskih tožb in podobnega. To je za družbe dolgotrajno in izčrpavajoče ter ni mogoče v vseh. Vsaka država ima svoje zakone in težko je uveljavljati pravo in etiko vsake družbe posebej.
To sem poskusil ustvariti v svojem programskem jeziku Orb. Opazujete lahko, kdo lahko bere vaše podatke in ali ti zapustijo meje sistema.
Vzemimo ta kos kode:
orbital SocialOrbital {
entity Person [persistent: people, identity] {
id : string! @key
name : string!
external : "allowed" | "blocked" = blocked
}
entity Post [persistent: posts] {
@read ["=", (object/get @entity authorId) @user.id]
@update ["=", (object/get @entity authorId) @user.id]
id : string! @key
authorId : Person
text : string!
}
entity Share [persistent: shares] {
@read (or ["=", (object/get @entity recipientId) @user.id]
["=", (object/get @entity sharerId) @user.id])
id : string! @key
postId : Post
sharerId : Person
recipientId : Person
}
trait PostSharing -> Share [lifecycle] {
initial: idle
state idle {
INIT -> idle
SHARE_WITH_FRIEND -> idle
(persist create Share { postId: ?postId, sharerId: @user.id, recipientId: ?friendId })
SEND_OUTSIDE -> idle when (= @user.external "allowed")
(call-service "webhook" "send" { url: "https://example.com/hook", event: "post.shared" }
{ emit: { success: TRACKED, failure: FAILED } })
TRACKED -> idle
FAILED -> idle
(render-ui toast { type: "alert", variant: "error", message: "Could not send" })
}
listens {
SHARE_WITH_FRIEND { postId: string, friendId: string }
}
emits {
TRACKED -> external { postId: string }
FAILED -> internal { postId: string }
}
}
page "/shares" -> PostSharing
}
To je samostojen blok kode (pravim mu vedenje), ki skrbi za objave. V sistemu ni nobenega drugega kosa kode, ki bi obravnaval »objave«. Mislite si lahko, da gre za objavo na blogu ali na družbenem omrežju, vseeno je. Ko to preberem, se lahko odločim, ali to »vedenje« sistema, ki ga uporabljam, sprejmem.
Če pogledamo te vrstice:
entity Person [persistent: people, identity] {
id : string! @key
name : string!
external : "allowed" | "blocked" = blocked
}
entity Post [persistent: posts] {
@read ["=", (object/get @entity authorId) @user.id]
@update ["=", (object/get @entity authorId) @user.id]
id : string! @key
authorId : Person
text : string!
}
entity Share [persistent: shares] {
@read (or ["=", (object/get @entity recipientId) @user.id]
["=", (object/get @entity sharerId) @user.id])
id : string! @key
postId : Post
sharerId : Person
recipientId : Person
}
Te povedo, kje podatki živijo in kako se do njih dostopa. Imate tri tabele v podatkovni zbirki: Person, Post in Share. Natančno določajo, kako se vsaka objava, ki jo delim, bere in spreminja. Na primer, to objavo lahko vidijo samo moji prijatelji:
@read (or [”=”, (object/get @entity recipientId) @user.id]
[”=”, (object/get @entity sharerId) @user.id])
Zdaj poglejte ta del:
SHARE_WITH_FRIEND -> idle
(persist create Share { postId: ?postId, sharerId: @user.id, recipientId: ?friendId })
SEND_OUTSIDE -> idle when (= @user.external "allowed")
(call-service "webhook" "send" { url: "https://example.com/hook", event: "post.shared" }
{ emit: { success: TRACKED, failure: FAILED } })
Sistem vam natančno pove, kam in kdaj pošilja podatke zunanjim sistemom. Ne želim se spuščati v podrobnosti kode, a SEND_OUTSIDE tu določa, kaj se zgodi, ko namerava sistem vaše podatke poslati zunanjemu sistemu (samo takrat, ko ste v to privolili). To je v kodi izrecno. Ta koda se deli s stranko.
Izrecnost o tem, katero programsko opremo uporabljamo in kaj ta počne z našimi podatki in informacijami, bi morala postati nekaj običajnega. To po mojem mnenju koristi tako velikim kot malim podjetjem. Mala podjetja lahko služijo potrebam svojih lokalnih skupnosti in z izrecnostjo uspevajo. To jih lahko tudi loči od velikih. Velika podjetja pa je mogoče prisiliti, da so odgovornejša in izrecnejša glede tega, kako ravnajo z našimi podatki.
Eno opozorilo: rekli bodo, da to ni varno in da tega ne moremo narediti za vse sisteme. Strinjam se. A družbena omrežja, klepetalni roboti in številni drugi zagotovo niso med temi »občutljivimi« sistemi. Določitev vedenja njihove programske opreme zanje ne pomeni nobenega tveganja.
Če pomislimo malo naprej: v prihajajoči dobi tehnologije bo programska oprema postala vsakdanja dobrina, ki jo lahko zgradi vsak. Veliki igralci umetne inteligence bodo imeli dostop do ogromnih količin podatkov, in če ne bomo izrecni o tem, kako se ti podatki delijo in kako se z njimi ravna, bomo imeli težave. Biti moramo razsodni, izbirati to, kar je za nas dobro, in se izogibati škodljivi kodi in sistemom.
Če želite o Orbu izvedeti več, obiščite orb.almadar.io. Je odprtokoden.