Trygghet uten tillit: kapabiliteter mot resten
Det viktigste Norscode gjør annerledes handler ikke om syntaks, men om hvem programmet får stole på.
Det viktigste Norscode gjør annerledes, handler ikke om syntaks, men om tillit. La oss sammenlikne hvordan ulike kjøretider håndterer hva et program får lov til.
Den vanlige modellen: full tillit
I de fleste språk — Python, Ruby, Go, og tradisjonelt JavaScript på Node — arver et program tilgangen til brukeren som starter det. Skal det lese én fil, kan det i praksis lese alle. Skal det på nett, kan det ringe hvor som helst. Det betyr at en avhengighet dypt nede i treet, som du aldri har lest, har samme tilgang som koden din selv. De aller fleste sikkerhetshendelser i moderne programvare handler nettopp om at noe fikk gjøre mer enn det trengte.
En voksende bevegelse
Norscode er ikke alene om å ta dette på alvor. Deno, laget av samme person som startet Node, kom med et tillatelsessystem der du eksplisitt gir --allow-read, --allow-net og lignende. Nyere Node-versjoner har begynt å tilby noe liknende. Retningen er tydelig: tilgang bør gis, ikke antas.
Der Norscode går lenger
I Norscode er kapabiliteter ikke et flagg du kan huske å skru på, men kjernen i kjøretiden. Et program starter uten noe, og du oppgir presist hva det får: hvilket område av disken, hvilken vert på nettet, om det får lese miljøvariabler. Programmet kan ikke be om mer underveis — grensen settes av den som starter det, og kan ikke forhandles bort av koden.
Hva betyr det for deg?
Hvis sikkerhetsmodellen betyr mye for deg, er både Deno og Norscode verdt å se på. Norscode legger til norsk syntaks og et bredt standardbibliotek oppå den samme grunntanken: at trygghet skal være utgangspunktet, ikke en ettertanke.
Les også
- Nytt nettsted for språketnorscode.no handler nå om programmeringsspråket, med dokumentasjon, eksempler og nedlastinger.
- Hvorfor kjøretiden sier neiEn kort forklaring av kapabilitetsmodellen, og hvorfor den er slått på fra første stund.
- Kompilatoren bygger seg selvNorscode er selvhostende: verktøykjeden er skrevet i språket den kompilerer.