WebAssembly (WASM) er en relativt ny teknologi for å gi webapplikasjoner høyere ytelse enn med JavaScript alene. Det dreier seg om et binært format som kan kjøres på tvers av ulike maskinvarearkitekturer. WASM-kode kan skapes ved å kompilere kode skrevet i programmeringsspråk som C/C++, Go og Rust.
Hovedmålet med WebAssembly er økt ytelse, både under selve kjøringen, men også ved at det tar kortere tid å laste programmet. Samtidig beholdes de fleste av webens fordeler, inkludert sikkerheten og muligheten for andre til å lese koden.
Bakgrunn: WebAssembly skal få virkelig fart på weben
Ikke bare i nettlesere
Dette er egenskaper som også kan være attraktive på utsiden av weben. Ifølge Mozilla er det allerede utviklere som forsøker å ta i bruk WebAssembly på utsiden av nettlesere, fordi det tilbyr en rask, skalerbar og sikker måte å kjøre den samme kode på tvers av alle datamaskiner.
Dersom dette hørtes kjent ut, så skyldes det nok at dette også var sentralt i budskapet da Java-plattformen ble lansert.
For å få til dette, må det finnes et grensesnitt mellom operativsystemet og WebAssembly-plattformen, slik at WebAssembly-koden kan snakke med operativsystemet og få tilgang til ressurser som dette tilbyr. Dette inkluderer filsystemet, klokker, slumptall og sockets.
WASI
Mozilla har derfor tatt initiativ til å standardisere et slikt systemgrensesnitt, WASI (WebAssembly System Interface).
WebAssembly kan kjøres på tvers av ulike maskinvarearkitekturer fordi det er lagd for å kjøres på en konseptuell maskin framfor en fysisk. Tilsvarende vil det trenge et systemgrensesnitt til konseptuelt operativsystem, ikke til hvert enkelt operativsystem. Når dette er på plass, skal WASM-koden kunne kjøres på tvers av ethvert operativsystem.
Mozilla har i større detalj beskrevet tankegangen bak WASI i dette blogginnlegget, og da med spesiell vekt på portabilitet og sikkerhet. En rask gjennomgang finnes i videoen nedenfor.
Implementeringer
Allerede finnes det tre implementeringer av WASI. Dette inkluderer wasmtime, Mozillas egen WebAssembly-runtime, som WASI har sprunget ut av. I forrige uke kom Fastly med Lucet, en WebAssembly-kompilator og -runtime. Også den støtter WASI.
Dessuten er WASI implementert i en polyfill for nettlesere.
De nevnte parallellene mellom WASI og Java bekreftes av Till Schneidereit, som leder Mozillas team for WebAssembly-verktøy. Han hevder dog at WebAssembly er mer språkagnostisk enn Java-plattformen, og at fotavtrykket til runtimen er mye mindre. Det sistnevnte skal gjøre den mer egnet til å kjøre også på svært små enheter.
Fortsatt er WASI et godt stykke unna å bli tatt i bruk. En god del er fortsatt uklart, men nyheten har i stor grad blitt ønsket velkommen. For eksempel mener Solomon Hykes, en av grunnleggerne av Docker, at WASI er en svært viktig nyhet.
Hykes tror ikke WASI vil erstatte Docker, men ser for seg at det i framtiden vil bli mulig å kjøre Windows-, Linux og WASM-konteinere side om side, og at WASM-konteinerne vil være den mest populære typen.
Les også: WebAssembly vil ikke gi samme ytelse som native code