Mozilla, Fastly, Intel en Red Hat befoarderje WebAssembly as platfoarm foar universeel gebrûk

Mozilla, Fastly, Intel en Red Hat feriene har ynspanningen yn it ûntwikkeljen fan technologyen dy't helpe om WebAssembly in universele platfoarm te meitsjen foar feilige koade-útfiering oer elke ynfrastruktuer, bestjoeringssysteem of apparaat. In mienskip is foarme foar de mienskiplike ûntwikkeling fan runtime en gearstallers dy't it gebrûk fan WebAssembly net allinich yn webbrowsers tastean Bytecode Alliance.

Om draachbere programma's te meitsjen levere yn WebAssembly-formaat dy't bûten de browser kinne wurde útfierd, stelle wy foar om de API te brûken WASI (WebAssembly System Interface), dy't software-ynterfaces leveret foar direkte ynteraksje mei it bestjoeringssysteem (POSIX API foar wurkjen mei bestannen, sockets, ensfh.). In ûnderskiedend skaaimerk fan it útfieringsmodel fan applikaasjes dy't WASI brûke is dat se rinne yn in sânbakomjouwing foar isolaasje fan it haadsysteem en in befeiligingsmeganisme brûke basearre op kapasiteitsbehear foar aksjes mei elk fan 'e boarnen (bestannen, mappen, sockets, systeemoproppen , ensfh.) De applikaasje moat de passende tagongsrjochten krije (allinich tagong ta de ferklearre funksjonaliteit wurdt levere).

Ien fan doelen De makke alliânsje is in oplossing foar it probleem fan it fersprieden fan moderne modulêre applikaasjes mei in grut oantal ôfhinklikens. Yn sokke applikaasjes kin elke ôfhinklikens in potinsjele boarne fan kwetsberens of oanfallen wêze. Troch kontrôle oer in ôfhinklikens te nimmen kinne jo kontrôle krije oer alle applikaasjes dy't dêrmei ferbûn binne. Fertrouwen yn 'e applikaasje ymplisearret automatysk fertrouwen yn alle ôfhinklikens, mar ôfhinklikens wurde faak ûntwikkele en ûnderhâlden troch teams fan tredden waans aktiviteiten net kinne wurde kontroleare. Bytecode Alliance-leden binne fan doel in holistyske oplossing te leverjen foar feilige útfiering fan WebAssembly-applikaasjes dy't net ynherint betrouber binne.

Foar beskerming wurdt foarsteld it konsept fan nanoprosessen te brûken, wêryn elke ôfhinklikensmodule is skieden yn in apart isolearre WebAssembly-module, wêrfan de foegen allinich ynsteld binne yn relaasje ta dizze module (bygelyks in bibleteek foar it ferwurkjen fan snaren sil net in netwurksocket of bestân kinne iepenje). Oars as proses skieding, WebAssembly handlers binne lichtgewicht en fereaskje hast gjin ekstra middels - ynteraksje tusken handlers is net folle stadiger as neame gewoane funksjes. Skieding kin dien wurde net allinnich op it nivo fan yndividuele modules, mar ek op it nivo fan groepen fan modules dy't, bygelyks, moatte wurkje mei mienskiplike ûnthâld gebieten

De frege foegen kinne wurde bepaald sawol op it nivo fan 'e ôfhinklikens sels en delegearre oan ôfhinklikens lâns de keatling troch âlder modules (boarnen yn WASI wurde assosjearre mei in spesjale soarte fan triem descriptor - kapasiteit). Bygelyks, in module kin wurde delegearre de mooglikheid om tagong ta in spesifike triemtafel en systeem oproppen, en as de module ûntwikkeling ynfrastruktuer wurdt kompromittearre of in kwetsberens wurdt identifisearre, tidens in oanfal, tagong wurdt beheind allinnich ta dizze middels. Boarneferklearrings troch module-skeppers kinne in yndikator wêze fan fertochte aktiviteit, lykas wannear't in tekstferwurkingsmodule tastimming freget om in netwurkferbining te iepenjen. De yn it earstoan ynstelde tagongsrjochten wurde kontrolearre en as se feroarje, wurdt it laden fan ôfhinklikens ôfwiisd oant de lokale module-hântekening wurdt bywurke.

Foar mienskiplike ûntwikkeling ûnder de wjuk fan 'e Bytecode Alliance oerset ferskate relatearre oan WebAssembly projekten, earder apart ûntwikkele troch de oprjochtingsbedriuwen fan 'e alliânsje:

  • tiid - Runtime foar it útfieren fan WebAssembly-applikaasjes mei WASI-útwreidingen as gewoane standalone applikaasjes. It stipet sawol it starten fan WebAssembly-bytekoade mei in spesjale kommandorigel-hulpprogramma en it keppeljen fan klearmakke útfierbere bestannen (wasmtime is ynboud yn 'e applikaasje as in bibleteek). Wasmtime hat in fleksibele modulêre struktuer wêrmei jo de runtime foar ferskate applikaasjes skaalje kinne, bygelyks kinne jo in stripped-down ferzje meitsje foar apparaten mei beheinde boarnen;
  • Lucet - kompilator en runtime foar it útfieren fan programma's yn WebAssembly-formaat. Distinctive eigenskip Lucet is it gebrûk fan folweardige antisipearjende kompilaasje (AOT, foarút-tiid) ynstee fan JIT yn masinekoade geskikt foar direkte útfiering. It projekt waard ûntwikkele troch Fastly en is optimalisearre om minimale boarnen te konsumearjen en nije eksimplaren heul fluch te lansearjen (Fastly brûkt Lucet yn in wolkrâne-komputermotor dy't WebAssembly brûkt foar handlers dy't op elke oanfraach lansearre binne). As ûnderdiel fan it mienskiplike projekt is de Lucet-kompiler pland om te konvertearjen om Wasmtime as basis te brûken;
  • WAMR (WebAssembly Micro Runtime) is in oare runtime foar it útfieren fan WebAssembly, oarspronklik ûntwikkele troch Intel foar gebrûk yn Internet of Things-apparaten. WAMR is optimalisearre foar minimaal boarneferbrûk en kin brûkt wurde op apparaten mei in lyts bedrach fan RAM. It projekt omfettet in tolk en firtuele masine foar it útfieren fan WebAssembly bytecode, in API (in subset fan Libc) en ark foar dynamysk applikaasjebehear;
  • Kraanlift - in koadegenerator dy't in tuskenlizzende fertsjintwurdiging ûnôfhinklik fan hardware-arsjitektuer oerset yn útfierbere masinekoade optimalisearre foar spesifike hardwareplatfoarms. Cranelift stipet parallelisaasje fan funksje-kompilaasje foar heul rappe resultaatgeneraasje, wêrtroch it kin wurde brûkt om JIT-kompilers te meitsjen (Cranelift-basearre JIT wurdt brûkt yn 'e Wasmtime firtuele masine);
  • WASI mienskiplik - in aparte ymplemintaasje fan 'e WASI (WebAssembly System Interface) API foar it organisearjen fan ynteraksje mei it bestjoeringssysteem;
  • lading-wasi - in module foar de Cargo-pakketbehearder dy't in kommando ymplemintearret foar it kompilearjen fan Rust-koade yn WebAssembly-bytekoade mei de WASI-ynterface foar it brûken fan WebAssembly bûten de browser;
  • wat и wasmparser - parsers foar it parsearjen fan tekst (WAT, WAST) en binêre foarstellings fan WebAssembly bytecode.

Om opnij te meitsjen, is WebAssembly in protte as Asm.js, mar ferskille yn dat it in binêr formaat is dat net bûn is oan JavaSkript en lit tuskenlizzende koade op leech nivo gearstald út ferskate programmeartalen yn 'e browser útfiere. WebAssembly hat gjin garbage collector nedich, om't it eksplisyt ûnthâldbehear brûkt. Troch JIT te brûken foar WebAssembly kinne jo prestaasjesnivo's berikke tichtby native koade. Under de haaddoelen fan WebAssembly is it garandearjen fan portabiliteit, foarsisber gedrach en identike koade-útfiering op ferskate platfoarms.

Boarne: opennet.ru

Add a comment