Mozilla, Fastly, Intel ja Red Hat reklaamivad WebAssemblyt kui universaalset platvormi

Mozilla, Fastly, Intel ja Red Hat ühinenud oma jõupingutusi tehnoloogiate väljatöötamisel, mis aitavad muuta WebAssembly universaalseks platvormiks koodi turvaliseks täitmiseks mis tahes infrastruktuuris, operatsioonisüsteemis või seadmes. Käitusaja ja kompilaatorite ühiseks arendamiseks on moodustatud kommuun, mis võimaldab WebAssembly kasutamist mitte ainult veebibrauserites Bytecode Alliance.

WebAssembly-vormingus kaasaskantavate programmide loomiseks, mida saab käivitada väljaspool brauserit, soovitame kasutada API-t WASI (WebAssembly System Interface), mis pakub tarkvaraliideseid otseseks suhtluseks operatsioonisüsteemiga (POSIX API failide, pistikupesadega jne töötamiseks). WASI-d kasutavate rakenduste täitmismudeli eripäraks on see, et need töötavad põhisüsteemist eraldamiseks liivakastikeskkonnas ja kasutavad iga ressursiga (failid, kataloogid, pistikupesad, süsteemikutsed) tehtavate toimingute jaoks võimehaldusel põhinevat turvamehhanismi. jm) rakendusele tuleb anda vastavad õigused (tagatakse ainult juurdepääs deklareeritud funktsionaalsusele).

Üks eesmärgid Loodud liit on lahendus suure hulga sõltuvustega kaasaegsete moodulrakenduste levitamise probleemile. Sellistes rakendustes võib iga sõltuvus olla potentsiaalne haavatavuste või rünnakute allikas. Sõltuvuse kontrolli alla võtmine võimaldab teil saada kontrolli kõigi sellega seotud rakenduste üle. Usaldus rakenduse vastu tähendab automaatselt usaldust kõigi sõltuvuste suhtes, kuid sageli arendavad ja hooldavad sõltuvusi kolmandate osapoolte meeskonnad, kelle tegevust ei saa kontrollida. Bytecode Alliance'i liikmed kavatsevad pakkuda terviklikku lahendust WebAssembly rakenduste turvaliseks täitmiseks, mis ei ole oma olemuselt usaldusväärsed.

Kaitsmiseks tehakse ettepanek kasutada nanoprotsesside kontseptsiooni, milles iga sõltuvusmoodul eraldatakse eraldi isoleeritud WebAssembly mooduliks, mille võimsused on seatud ainult selle mooduli suhtes (näiteks stringide töötlemise teeki ei tööta suutma avada võrgupesa või faili). Erinevalt protsesside eraldamisest on WebAssembly töötlejad kerged ega vaja peaaegu mingeid lisaressursse – töötlejate vaheline suhtlus ei ole palju aeglasem kui tavaliste funktsioonide kutsumine. Eraldamist saab teha mitte ainult üksikute moodulite tasemel, vaid ka moodulirühmade tasemel, mis näiteks peavad töötama ühiste mälualadega

Nõutavaid volitusi saab määrata nii sõltuvuste endi tasemel kui ka ahelas olevatele sõltuvustele delegeerida vanemmoodulite abil (WASI-s on ressursid seotud spetsiaalset tüüpi failideskriptoriga - võimekusega). Näiteks saab moodulile delegeerida võimaluse pääseda juurde konkreetsele kataloogile ja süsteemikõnedele ning kui mooduli arendusinfrastruktuur on ohustatud või tuvastatakse haavatavus, on rünnaku ajal juurdepääs piiratud ainult nende ressurssidega. Mooduli loojate ressursideklaratsioonid võivad näidata kahtlast tegevust, näiteks kui tekstitöötlusmoodul taotleb luba võrguühenduse avamiseks. Algselt seatud õigusi kontrollitakse ja kui need muutuvad, lükatakse sõltuvuse laadimine tagasi kuni kohaliku mooduli signatuuri värskendamiseni.

Ühiseks arendamiseks Bytecode Alliance'i tiiva all tõlgitud mitu WebAssemblyga seotud projektid, mille on varem eraldi välja töötanud liidu asutajad:

  • oli aeg — käitusaeg WASI laiendustega WebAssembly rakenduste käitamiseks tavaliste eraldiseisvate rakendustena. See toetab nii WebAssembly baitkoodi käivitamist spetsiaalse käsurea utiliidi abil kui ka valmis käivitatavate failide linkimist (wasmtime on rakendusse sisse ehitatud raamatukoguna). Wasmtime'il on paindlik moodulstruktuur, mis võimaldab skaleerida erinevate rakenduste käitusaega, näiteks saate luua piiratud ressurssidega seadmetele vähendatud versiooni;
  • Lucet — WebAssembly-vormingus programmide käivitamise kompilaator ja käitusaeg. Iseloomulik tunnusjoon Lucet on täisväärtusliku ennetava kompileerimise (AOT, enne-aeg) kasutamine JIT-i asemel masinkoodiks, mis sobib otseseks täitmiseks. Projekti töötas välja Fastly ja see on optimeeritud nii, et see kulutab minimaalselt ressursse ja käivitab väga kiiresti uusi eksemplare (Fastly kasutab Luceti pilveserva andmetöötlusmootoris, mis kasutab WebAssemblyt iga taotluse korral käivitatavate töötlejate jaoks). Ühisprojekti raames on plaanis Luceti kompilaator ümber ehitada, et kasutada baasina Wasmtime;
  • WAMR (WebAssembly Micro Runtime) on teine ​​käitusaeg WebAssembly käivitamiseks, mille Intel töötas algselt välja asjade Interneti seadmetes. WAMR on optimeeritud minimaalse ressursikulu jaoks ja seda saab kasutada väikese RAM-iga seadmetes. Projekt sisaldab interpretaatorit ja virtuaalmasinat WebAssembly baitkoodi täitmiseks, API-d (Libc alamhulk) ja tööriistu dünaamilise rakenduste haldamiseks;
  • Kranelift — koodigeneraator, mis teisendab riistvaraarhitektuuridest sõltumatu vahepealse esituse käivitatavaks masinkoodiks, mis on optimeeritud konkreetsete riistvaraplatvormide jaoks. Cranelift toetab funktsioonide koostamise paralleelstamist väga kiireks tulemuste genereerimiseks, mis võimaldab seda kasutada JIT-kompilaatorite loomiseks (Wasmtime virtuaalmasinas on kasutusel Cranelifti-põhine JIT);
  • WASI tavaline — WASI (WebAssembly System Interface) API eraldi juurutamine operatsioonisüsteemiga suhtlemise korraldamiseks;
  • lasti-wasi — Cargo paketihalduri moodul, mis rakendab käsku Rust koodi kompileerimiseks WebAssembly baitkoodiks kasutades WASI liidest WebAssembly kasutamiseks väljaspool brauserit;
  • wat и wasmparser — parserid teksti (WAT, WAST) sõelumiseks ja WebAssembly baitkoodi binaarsed esitused.

Kokkuvõtteks võib öelda, et WebAssembly sarnaneb paljuski Asm.js-iga, kuid erinev kuna see on binaarvorming, mis ei ole seotud JavaScriptiga ja võimaldab brauseris käivitada erinevatest programmeerimiskeeltest koostatud madala taseme vahepealset koodi. WebAssembly ei vaja prügikogujat, kuna see kasutab selgesõnalist mäluhaldust. Kasutades JIT-i WebAssembly jaoks, saate saavutada algkoodile lähedase jõudluse taseme. WebAssembly peamiste eesmärkide hulgas on kaasaskantavuse, prognoositava käitumise ja identse koodi täitmise tagamine erinevatel platvormidel.

Allikas: opennet.ru

Lisa kommentaar