Det trengs et helt nytt språk og kjøremiljø til innebygde enheter som benyttes i konseptet om tingenes internett (IoT).
Det mener Lars Bak og Kasper Lund, som helt på egen hånd har gått i gang med å jobbe med denne idéen.
Lars Bak har mange års erfaring med språk og virtuelle maskiner. Det går tilbake til Self, som var en variant av det objektorienterte språket Smalltalk. Self var ikke noen kassasuksess, men firmaet Sun kom med et nytt språk kalt Java, hvis virtuelle maskiner hadde forferdelig ytelse og bruk for en oppstramming.
Derfor ble Self-VM-en til Javas Hotspot-miljø i Java 3.1, og så var grunnsteinen på plass for hva som skulle bli ett av verdens mest populære språk.
Lars Bak er ingen stor Java-fan, men det er heller ikke påkrevd når han kaster seg ut i nye prosjekter. Det neste store prosjektet, målt i betydning for verdens IT-brukere var Javascript-motoren i Googles Chrome-nettleser.
Her ble ytelsen banket ned til halvparten av Javas VM, og det mente Lars Bak var hva som er mulig å oppnå i et «prototype»-objektspråk som Javascript.
Javascript ga muligheter for web-apper av en helt annen kaliber enn før, men språket er verken han eller Kasper Lund stor fan av. Sistnevnte kom med på laget i forbindelse med at Lars Bak var veileder for studenter ved Aarhus Universitet. Nå har de to jobbet sammen i 18 år.
IoT krever et nytt språk og VM
Da de to så seg om etter språk som ville passe godt til å kjøre i en virtuell maskin på IoT-enheter, hadde de Python i kikkerten. Men da det gikk opp for de to at Pythons typesystem var likt det i Javascript, hvor nye metoder og felter kan hektes på eksisterende objekter under kjøring, ble det litt for innfløkt. Dermed oppsto idéen om et splitter nytt språk som har fått navnet «Toit».
– Vi vil gjøre det mer tilgjengelig å lage programmer på innebygde enheter, svarer Lars Bak på spørsmålet om hvilket problem det nye språket prøver å løse.
– På samme måte som Javascript og Java har gjort det for klienter og tjenester. Vår filosofi er at hvis du lager en rask feedback-løkke, fra du programmerer til du får feedback fra systemet som kjører, på under ett sekund, så inspirerer det programmereren til å eksperimentere og finne på nye ting.
Det andre problemet de to vil løse handler om sikkerheten når små enheter kobles på nett.
– Vi vet at nye sårbarheter kommer til hele tiden. Vi vil ha det slik at man kan legge inn ny programvare på enhetene, slik at man har et system kjørende hele tiden. For det tredje vil vi ha et distribuert system hvor man kan stenge ned én enkelt enhet, og resten av enhetene vil overta funksjonaliteten. Det gjør systemene mer robuste.
Det minner om arkitekturen i skyløsninger, hvor man kan tåle at en enkelt enhet går ned, mens det samlede system kjører videre uten problemer.
(Artikkelen fortsetter under kodeeksempelet)
Her er et eksempel på det ennå uferdige språket Toit. Hatten (^) stammer fra språket Self, som var Lars Baks første suksess, og betyr det samme som «return» i C-syntaks. Semikoloner, parenteser og krøllparenteser er droppet til fordel for innrykk, som kjent fra Python. Utover dette er det utstrakt bruk av rekursjon i eksemplet. Her skapes et tre rekursivt ved å kalle constructoren TreeNode med to rekursive parametre, med verdiene build_tree depth - 1. Språket har ikke typer og byr på nedarving, som kjent fra andre objektorienterte språk.
class TreeNode
left := null
right := null
TreeNode
TreeNode left right
size
result := 1
if left: result += left.size
if right: result += right.size
^result
build_tree depth
if depth == 0: ^TreeNode
^TreeNode
build_tree depth - 1
build_tree depth - 1
main
tree := build_tree 5
assert tree.size == 63
Virtuelle maskiner og garbage collection er bra for små enheter
Lars Bak mener ikke at virtuelle maskiner, garbage collection, og det dette betyr for «latency» (forsinkelse) strider mot levevilkårene til innebygde enheter.
Forsinkelse er slettes ikke det store problemet. Hvis man ønsker å garantere svartider, deler man bare applikasjonen opp i en sanntids- (realtime) og en ikke-sanntids-del.
– IoT betyr at du snakker med internett, og dermed ikke kan garantere at et svar fra nettet kommer tilbake innenfor en gitt tid. Den delen av applikasjonen kan aldri bli realtime, sier Bak.
Utover dette synes Bak at virtuelle maskiner er det rette for små enheter:
– Når programmene skrives i C og det ikke er noen beskyttelse mellom systemminnet i enhetens forskjellige deler, så medfører en feil ett sted at hele systemet går ned.
Den slags skjer ikke hvis man avvikler programmet på en Unix-lignende arkitektur, der det er virtuell hukommelse, slik at det er kun den enkelte prosess som går ned og som kan startes på nytt hvis uhellet er ute. Så C er en dårlig løsning, mener Bak.
Her er et annet eksempel på Toit, med bruk av closures, som :predicate i eksempelet:
class Set _HashedCollection
-
select :predicate
result := Set
do: if predicate.invoke it: result.include it
| collection
^Set
..include_all this
..include:all collection
-
main
{1, 2, 3, 5, 8, 13, 21}.select: it.odd?
Sikkerhet som på Chromebooks
Sikkerheten blir av seg selv mye bedre med en virtuell maskin, for man kan ikke leke med bits og bytes under systemet. Garbage collection har den kjempefordelen at det blir enklere å skrive robuste programmer.
Og sikkerheten er et sentralt punkt i IoT-verdenen, hvor den mulige angrepsflaten ofte er stor og kompleks. Her mener Lars Bak at Googles Chromebook har en god sikkerhetsmodell.
– Det er sikker boot, man er tvunget til å oppdatere, og man kan kun kjøre programmer som er designet til plattformen ved å bruke kryptering. Den løsningen vil vi ha til innebygde systemer.
I tillegg kommer styring av krypteringsnøkler, slik at det er sikkerhet for at det er kun utvikleren som kan sende ny programvare til enheten.
Lars Bak og Kasper Lund forteller at språk, kjernebiblioteker og den virtuelle maskinen vil bli åpen kildekode på lenger sikt. Og de håper å gi ut den første versjonen i løpet av ett år.
Og hvorfor navnet Toit?
– Du blir nødt til å dra hjem og se filmen «Austin Powers in Goldmember», sier Bak.
Tipset er herved gitt videre.
Artikkelen er levert av Version2.dk