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

Mozilla, Fastly, Intel i Red Hat ujedinjen svoje napore u razvoju tehnologija koje pomažu učiniti WebAssembly univerzalnom platformom za sigurno izvršavanje koda u bilo kojoj infrastrukturi, operativnom sustavu ili uređaju. Formirana je zajednica za zajednički razvoj runtimea i kompilatora koji omogućuju korištenje WebAssemblyja ne samo u web preglednicima Bytecode Alliance.

Za izradu prijenosnih programa isporučenih u formatu WebAssembly koji se mogu izvršiti izvan preglednika, predlažemo korištenje API-ja WASI (WebAssembly System Interface), koji pruža softverska sučelja za izravnu interakciju s operativnim sustavom (POSIX API za rad s datotekama, utičnicama itd.). Osobitost izvedbenog modela aplikacija koje koriste WASI je da se izvode u sandbox okruženju za izolaciju od glavnog sustava i koriste sigurnosni mehanizam temeljen na upravljanju mogućnostima za radnje sa svakim od resursa (datoteke, direktoriji, utičnice, sistemski pozivi). , itd.) aplikacija mora dobiti odgovarajuća dopuštenja (omogućen je samo pristup deklariranoj funkcionalnosti).

Jedan od ciljevi Stvoreni savez rješenje je problema distribucije modernih modularnih aplikacija s velikim brojem ovisnosti. U takvim aplikacijama svaka ovisnost može biti potencijalni izvor ranjivosti ili napada. Preuzimanje kontrole nad ovisnošću omogućuje vam preuzimanje kontrole nad svim aplikacijama povezanim s njom. Povjerenje u aplikaciju automatski podrazumijeva povjerenje u sve ovisnosti, no ovisnosti često razvijaju i održavaju timovi trećih strana čije se aktivnosti ne mogu kontrolirati. Članovi Bytecode Alliancea namjeravaju pružiti holističko rješenje za sigurno izvođenje WebAssembly aplikacija koje same po sebi nisu pouzdane.

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

Zatražene ovlasti mogu se odrediti i na razini samih ovisnosti i delegirati ovisnostima duž lanca pomoću nadređenih modula (resursi u WASI-ju povezani su s posebnom vrstom deskriptora datoteke - mogućnosti). Na primjer, modulu se može delegirati mogućnost pristupa određenom imeniku i pozivima sustava, a ako je razvojna infrastruktura modula ugrožena ili se identificira ranjivost, tijekom napada pristup će biti ograničen samo na te resurse. Deklaracije resursa kreatora modula mogu biti pokazatelj sumnjive aktivnosti, primjerice kada modul za obradu teksta zatraži dopuštenje za otvaranje mrežne veze. Prvotno postavljena dopuštenja 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 povezanih s WebAssemblyjem projekti, koje su prethodno zasebno razvile tvrtke osnivači saveza:

  • wasmtime — runtime za pokretanje WebAssembly aplikacija s WASI ekstenzijama kao običnih samostalnih aplikacija. Podržava i pokretanje WebAssembly bajt koda pomoću posebnog uslužnog programa naredbenog retka i povezivanje gotovih izvršnih datoteka (wasmtime je ugrađen u aplikaciju kao biblioteka). Wasmtime ima fleksibilnu modularnu strukturu koja vam omogućuje skaliranje vremena izvođenja za različite aplikacije, na primjer, možete stvoriti skraćenu verziju za uređaje s ograničenim resursima;
  • Lucet — kompajler i runtime za izvršavanje programa u formatu WebAssembly. Prepoznatljiva značajka Lucet je upotreba pune anticipacijske kompilacije (AOT, unaprijed) umjesto JIT-a u strojni kod prikladan za izravno izvršenje. Projekt je razvio Fastly i optimiziran je za potrošnju minimalnih resursa i vrlo brzo pokretanje novih instanci (Fastly koristi Lucet u stroju za rubno računalstvo u oblaku koji koristi WebAssembly za rukovatelje pokrenute na svaki zahtjev). Kao dio zajedničkog projekta, Lucet kompilator se planira pretvoriti u Wasmtime kao bazu;
  • WAMR (WebAssembly Micro Runtime) još je jedan runtime za izvršavanje WebAssembly, koji je izvorno razvio Intel za upotrebu u 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. Projekt uključuje tumač i virtualni stroj za izvršavanje bajt koda WebAssembly, API (podskup Libc) i alate za dinamičko upravljanje aplikacijama;
  • Dizalica — generator koda koji prevodi posredni prikaz neovisno o hardverskim arhitekturama u izvršni strojni kod optimiziran za specifične hardverske platforme. Cranelift podržava paralelizaciju kompilacije funkcija za vrlo brzo generiranje rezultata, što mu omogućuje da se koristi za izradu JIT prevodilaca (JIT temeljen na Craneliftu koristi se u Wasmtime virtualnom stroju);
  • WASI zajednički — zasebna implementacija API-ja WASI (WebAssembly System Interface) za organiziranje interakcije s operativnim sustavom;
  • teret-wasi — modul za upravitelj paketa Cargo koji implementira naredbu za kompajliranje Rust koda u bajt kod WebAssembly pomoću WASI sučelja za korištenje WebAssemblyja izvan preglednika;
  • wat и wasmparser — parseri za raščlanjivanje teksta (WAT, WAST) i binarne reprezentacije bajt koda WebAssembly.

Da rezimiramo, WebAssembly je dosta sličan Asm.js, ali drugačiji utoliko što je to binarni format koji nije vezan za JavaScript i omogućuje izvođenje srednjeg koda niske razine kompajliranog iz različitih programskih jezika u pregledniku. WebAssembly ne zahtijeva skupljač smeća jer koristi eksplicitno upravljanje memorijom. Korištenjem JIT-a za WebAssembly možete postići razine performansi bliske izvornom kodu. Među glavnim ciljevima WebAssemblyja je osiguravanje prenosivosti, predvidljivog ponašanja i identičnog izvršavanja koda na različitim platformama.

Izvor: opennet.ru

Dodajte komentar