Mozilla, Fastly, Intel i Red Hat promoviraju WebAssembly kao platformu za univerzalnu upotrebu

Mozilla, Fastly, Intel i Red Hat ujedinjeni svoje napore u razvoju tehnologija koje pomažu da WebAssembly postane univerzalna platforma za sigurno izvršavanje koda na bilo kojoj infrastrukturi, operativnom sistemu ili uređaju. Formirana je zajednica za zajednički razvoj runtime-a i kompajlera koji omogućavaju upotrebu WebAssembly-a ne samo u web pretraživačima Bytecode Alliance.

Za kreiranje prenosivih programa koji se isporučuju u WebAssembly formatu koji se mogu izvršavati izvan preglednika, predlažemo korištenje API-ja WASI (WebAssembly System Interface), koji obezbeđuje softverske interfejse za direktnu interakciju sa operativnim sistemom (POSIX API za rad sa fajlovima, soketima, itd.). Karakteristična karakteristika modela izvršavanja aplikacija koje koriste WASI je da se pokreću u sandbox okruženju radi izolacije od glavnog sistema i koriste sigurnosni mehanizam zasnovan na upravljanju mogućnostima za radnje sa svakim od resursa (datoteke, direktoriji, utičnice, sistemski pozivi , itd.) aplikaciji se moraju dati odgovarajuće dozvole (omogućen je samo pristup deklariranoj funkcionalnosti).

Jedan od ciljevi Stvoreni savez je rješenje za problem distribucije modernih modularnih aplikacija s velikim brojem ovisnosti. U takvim aplikacijama svaka zavisnost može biti potencijalni izvor ranjivosti ili napada. Preuzimanje kontrole nad ovisnošću omogućava vam da dobijete kontrolu nad svim aplikacijama koje su s njom povezane. Povjerenje u aplikaciju automatski podrazumijeva povjerenje u sve ovisnosti, ali ovisnosti često razvijaju i održavaju timovi trećih strana čije se aktivnosti ne mogu kontrolirati. Članovi Bytecode Alliance namjeravaju pružiti holističko rješenje za sigurno izvršavanje WebAssembly aplikacija koje nisu inherentno pouzdane.

Za zaštitu se predlaže korištenje koncepta nanoprocesa, u kojem je svaki modul ovisnosti odvojen u zasebno izolirani WebAssembly modul, čije se moći postavljaju samo u odnosu na ovaj modul (na primjer, biblioteka za obradu stringova neće biti u mogućnosti da otvori mrežnu utičnicu ili datoteku). Za razliku od odvajanja procesa, WebAssembly rukovaoci su lagani i ne zahtijevaju gotovo nikakve dodatne resurse - interakcija između rukovatelja nije mnogo sporija od pozivanja običnih funkcija. Razdvajanje se može izvršiti ne samo na nivou pojedinačnih modula, već i na nivou grupa modula koji, na primjer, trebaju raditi sa zajedničkim memorijskim područjima

Tražena ovlaštenja mogu se odrediti i na nivou samih ovisnosti i delegirati ovisnostima duž lanca od strane roditeljskih modula (resursi u WASI-ju su povezani sa posebnom vrstom deskriptora datoteke - sposobnošću). Na primjer, modulu se može delegirati mogućnost pristupa određenom direktoriju i sistemskim pozivima, a ako je razvojna infrastruktura modula ugrožena ili se identificira ranjivost, tokom napada pristup će biti ograničen samo na ove resurse. Deklaracije resursa od strane kreatora modula mogu biti pokazatelj sumnjive aktivnosti, kao što je kada modul za obradu teksta traži dozvolu za otvaranje mrežne veze. Prvobitno postavljene dozvole se provjeravaju i ako se promijene, učitavanje ovisnosti se odbija dok se lokalni potpis modula ne ažurira.

Za zajednički razvoj pod okriljem Bytecode Alliance prevedeno nekoliko vezano za WebAssembly projekti, koje su prethodno posebno razvile kompanije osnivači saveza:

  • wasmtime — vrijeme izvođenja za pokretanje WebAssembly aplikacija s WASI ekstenzijama kao redovnih samostalnih aplikacija. Podržava i pokretanje WebAssembly bajtkoda pomoću posebnog uslužnog programa komandne linije i povezivanje gotovih izvršnih datoteka (wasmtime je ugrađen u aplikaciju kao biblioteka). Wasmtime ima fleksibilnu modularnu strukturu koja vam omogućava da skalirate vrijeme izvođenja za različite aplikacije, na primjer, možete kreirati smanjenu verziju za uređaje sa ograničenim resursima;
  • Lucet — kompajler i vrijeme izvođenja za izvršavanje programa u WebAssembly formatu. Distinctive karakteristika Lucet je upotreba punopravne anticipativne kompilacije (AOT, unaprijed) umjesto JIT-a u mašinski kod pogodan za direktno izvršenje. Projekat je razvio Fastly i optimizovan je da troši minimalne resurse i vrlo brzo pokreće nove instance (Fastly koristi Lucet u mašini za računanje na rubu oblaka koja koristi WebAssembly za rukovaoce pokrenute na svaki zahtev). Kao dio zajedničkog projekta, Lucet kompajler planira se konvertirati da koristi Wasmtime kao bazu;
  • WAMR (WebAssembly Micro Runtime) je još jedno vrijeme izvođenja za izvršavanje WebAssembly-a, koje je prvobitno razvio Intel za upotrebu na uređajima Interneta stvari. WAMR je optimiziran za minimalnu potrošnju resursa i može se koristiti na uređajima s malom količinom RAM-a. Projekat uključuje tumač i virtuelnu mašinu za izvršavanje bajtkoda WebAssembly, API (podskup Libc) i alate za dinamičko upravljanje aplikacijama;
  • Dizalica — generator koda koji prevodi međureprezentaciju nezavisno od hardverske arhitekture u izvršni mašinski kod optimizovan za specifične hardverske platforme. Cranelift podržava paralelizaciju kompilacije funkcija za veoma brzo generisanje rezultata, što omogućava da se koristi za kreiranje JIT kompajlera (JIT zasnovan na Cranelift-u se koristi u Wasmtime virtuelnoj mašini);
  • WASI zajednički — zasebna implementacija WASI (WebAssembly System Interface) API-ja za organizovanje interakcije sa operativnim sistemom;
  • cargo-wasi — modul za menadžer paketa Cargo koji implementira komandu za kompajliranje Rust koda u WebAssembly bajt kod koristeći WASI interfejs za korišćenje WebAssembly van pretraživača;
  • wat и wasmparser — parseri za raščlanjivanje teksta (WAT, WAST) i binarne reprezentacije WebAssembly bajtkoda.

Da rezimiramo, WebAssembly je dosta sličan Asm.js, ali drugačiji u tome što je to binarni format koji nije vezan za JavaScript i omogućava izvršavanje srednjeg koda niskog nivoa sastavljenog iz različitih programskih jezika u pretraživaču. WebAssembly ne zahtijeva sakupljač smeća jer koristi eksplicitno upravljanje memorijom. Koristeći JIT za WebAssembly, možete postići nivoe performansi bliske izvornom kodu. Među glavnim ciljevima WebAssembly-a je osiguranje prenosivosti, predvidljivog ponašanja i identičnog izvršavanja koda na različitim platformama.

izvor: opennet.ru

Dodajte komentar