Mozilla, Fastly, Intel in Red Hat promovirajo WebAssembly kot platformo za univerzalno uporabo

Mozilla, Fastly, Intel in Red Hat združeni svoja prizadevanja za razvoj tehnologij, ki pomagajo narediti WebAssembly univerzalno platformo za varno izvajanje kode v kateri koli infrastrukturi, operacijskem sistemu ali napravi. Oblikovana je bila skupnost za skupen razvoj izvajalnega okolja in prevajalnikov, ki omogočajo uporabo WebAssembly ne samo v spletnih brskalnikih Bytecode Alliance.

Za ustvarjanje prenosnih programov, dostavljenih v formatu WebAssembly, ki jih je mogoče izvajati zunaj brskalnika, predlagamo uporabo API-ja SEM BIL JAZ (WebAssembly System Interface), ki omogoča programske vmesnike za neposredno interakcijo z operacijskim sistemom (POSIX API za delo z datotekami, vtičnicami itd.). Posebnost izvedbenega modela aplikacij, ki uporabljajo WASI, je, da se izvajajo v okolju peskovnika za izolacijo od glavnega sistema in uporabljajo varnostni mehanizem, ki temelji na upravljanju zmogljivosti za dejanja z vsakim virom (datoteke, imeniki, vtičnice, sistemski klici). , itd.) mora aplikacija imeti ustrezna dovoljenja (omogočen je samo dostop do deklarirane funkcionalnosti).

Eden od cilje Ustvarjeno zavezništvo je rešitev problema distribucije sodobnih modularnih aplikacij z velikim številom odvisnosti. V takih aplikacijah je lahko vsaka odvisnost potencialni vir ranljivosti ali napadov. Prevzem nadzora nad odvisnostjo vam omogoča, da pridobite nadzor nad vsemi z njo povezanimi aplikacijami. Zaupanje v aplikacijo samodejno pomeni zaupanje v vse odvisnosti, vendar odvisnosti pogosto razvijajo in vzdržujejo skupine tretjih oseb, katerih dejavnosti ni mogoče nadzorovati. Člani združenja Bytecode Alliance nameravajo zagotoviti celovito rešitev za varno izvajanje aplikacij WebAssembly, ki same po sebi niso vredne zaupanja.

Za zaščito je predlagana uporaba koncepta nanoprocesov, pri katerem je vsak modul odvisnosti ločen v ločeno izoliran modul WebAssembly, katerega moči so nastavljene samo glede na ta modul (npr. knjižnica za obdelavo nizov ne bo lahko odprete omrežno vtičnico ali datoteko). Za razliko od ločevanja procesov so obdelovalci WebAssembly lahki in ne potrebujejo skoraj nobenih dodatnih virov – interakcija med obdelovalci ni dosti počasnejša od klicanja običajnih funkcij. Ločevanje je mogoče izvesti ne le na ravni posameznih modulov, temveč tudi na ravni skupin modulov, ki morajo na primer delati s skupnimi pomnilniškimi območji

Zahtevana pooblastila je mogoče določiti tako na ravni samih odvisnosti kot tudi delegirati odvisnostim vzdolž verige s strani nadrejenih modulov (viri v WASI so povezani s posebnim tipom deskriptorja datoteke - zmožnostjo). Na primer, modulu je mogoče dodeliti možnost dostopa do določenega imenika in sistemskih klicev, in če je med napadom ogrožena razvojna infrastruktura modula ali je prepoznana ranljivost, bo dostop omejen samo na te vire. Izjave virov ustvarjalcev modula so lahko pokazatelj sumljive dejavnosti, na primer ko modul za obdelavo besedila zahteva dovoljenje za odpiranje omrežne povezave. Prvotno nastavljena dovoljenja se preverijo in če se spremenijo, se nalaganje odvisnosti zavrne, dokler se lokalni podpis modula ne posodobi.

Za skupni razvoj pod okriljem Bytecode Alliance prevedeno več povezanih z WebAssembly projekti, ki so ga predhodno ločeno razvile družbe ustanoviteljice zavezništva:

  • wasmtime — čas izvajanja za izvajanje aplikacij WebAssembly z razširitvami WASI kot običajnih samostojnih aplikacij. Podpira tako zagon bajtne kode WebAssembly s pomočjo posebnega pripomočka ukazne vrstice kot povezovanje že pripravljenih izvedljivih datotek (wasmtime je vgrajen v aplikacijo kot knjižnica). Wasmtime ima prilagodljivo modularno strukturo, ki vam omogoča prilagajanje izvajalnega časa za različne aplikacije, na primer lahko ustvarite skrajšano različico za naprave z omejenimi viri;
  • Lucet — prevajalnik in izvajalno okolje za izvajanje programov v formatu WebAssembly. Izrazit funkcija Lucet je uporaba polnega predvidenega prevajanja (AOT, vnaprej) namesto JIT v strojno kodo, primerno za neposredno izvajanje. Projekt je razvil Fastly in je optimiziran za porabo minimalnih virov in zelo hitro zagon novih primerkov (Fastly uporablja Lucet v mehanizmu za računalništvo na robu oblaka, ki uporablja WebAssembly za obdelovalce, ki se zaženejo ob vsaki zahtevi). V okviru skupnega projekta je načrtovana pretvorba prevajalnika Lucet za uporabo Wasmtime kot osnove;
  • WAM (WebAssembly Micro Runtime) je drugo izvajalno okolje za izvajanje WebAssembly, ki ga je prvotno razvil Intel za uporabo v napravah interneta stvari. WAMR je optimiziran za minimalno porabo virov in se lahko uporablja v napravah z majhno količino RAM-a. Projekt vključuje tolmač in virtualni stroj za izvajanje bajtne kode WebAssembly, API (podnabor Libc) in orodja za dinamično upravljanje aplikacij;
  • Dvigalo z žerjavom — generator kode, ki prevede vmesno predstavitev, neodvisno od arhitektur strojne opreme, v izvedljivo strojno kodo, optimizirano za specifične platforme strojne opreme. Cranelift podpira paralelizacijo prevajanja funkcij za zelo hitro generiranje rezultatov, kar omogoča uporabo za ustvarjanje prevajalnikov JIT (JIT, ki temelji na Craneliftu, se uporablja v virtualnem stroju Wasmtime);
  • WASI skupno — ločena izvedba API-ja WASI (WebAssembly System Interface) za organizacijo interakcije z operacijskim sistemom;
  • tovor-wasi — modul za upravitelja paketov Cargo, ki izvaja ukaz za prevajanje kode Rust v bajtno kodo WebAssembly z uporabo vmesnika WASI za uporabo WebAssembly zunaj brskalnika;
  • wat и wasmparser — razčlenjevalniki za razčlenjevanje besedila (WAT, WAST) in binarne predstavitve bajtne kode WebAssembly.

Če povzamem, WebAssembly je zelo podoben Asm.js, vendar drugačna v tem, da gre za binarni format, ki ni vezan na JavaScript in omogoča, da se nizkonivojska vmesna koda, sestavljena iz različnih programskih jezikov, izvede v brskalniku. WebAssembly ne potrebuje zbiralnika smeti, ker uporablja eksplicitno upravljanje pomnilnika. Z uporabo JIT za WebAssembly lahko dosežete ravni zmogljivosti, ki so blizu izvorni kodi. Med glavnimi cilji WebAssemblyja je zagotavljanje prenosljivosti, predvidljivega obnašanja in identičnega izvajanja kode na različnih platformah.

Vir: opennet.ru

Dodaj komentar