Mozilla, Fastly, Intel și Red Hat promovează WebAssembly ca o platformă pentru utilizare universală

Mozilla, Fastly, Intel și Red Hat Unit eforturile sale în dezvoltarea tehnologiilor care ajută la transformarea WebAssembly într-o platformă universală pentru execuția securizată a codului în orice infrastructură, sistem de operare sau dispozitiv. S-a format o comunitate pentru dezvoltarea în comun a runtime și a compilatoarelor care permit utilizarea WebAssembly nu numai în browserele web Alianța de coduri de octeți.

Pentru a crea programe portabile livrate în format WebAssembly care pot fi executate în afara browserului, vă sugerăm să utilizați API-ul AM FOST (WebAssembly System Interface), care oferă interfețe software pentru interacțiunea directă cu sistemul de operare (API POSIX pentru lucrul cu fișiere, socket-uri etc.). O caracteristică distinctivă a modelului de execuție a aplicațiilor care utilizează WASI este că acestea rulează într-un mediu sandbox pentru izolarea de sistemul principal și utilizează un mecanism de securitate bazat pe managementul capacităților pentru acțiuni cu fiecare dintre resurse (fișiere, directoare, socketuri, apeluri de sistem). , etc.) aplicației trebuie să i se acorde permisiunile corespunzătoare (se asigură doar accesul la funcționalitatea declarată).

Una dintre goluri Alianța creată este o soluție la problema distribuirii aplicațiilor modulare moderne cu un număr mare de dependențe. În astfel de aplicații, fiecare dependență poate fi o sursă potențială de vulnerabilități sau atacuri. Preluarea controlului asupra unei dependențe vă permite să obțineți controlul asupra tuturor aplicațiilor asociate acesteia. Încrederea în aplicație implică automat încredere în toate dependențele, dar dependențele sunt adesea dezvoltate și menținute de echipe terțe ale căror activități nu pot fi controlate. Membrii Bytecode Alliance intenționează să ofere o soluție holistică pentru execuția sigură a aplicațiilor WebAssembly care nu sunt în mod inerent de încredere.

Pentru protecție, se propune utilizarea conceptului de nanoprocese, în care fiecare modul de dependență este separat într-un modul WebAssembly izolat separat, ale cărui puteri sunt stabilite doar în raport cu acest modul (de exemplu, o bibliotecă pentru procesarea șirurilor nu va să poată deschide un socket sau un fișier de rețea). Spre deosebire de separarea proceselor, manevrele WebAssembly sunt ușoare și nu necesită aproape resurse suplimentare - interacțiunea dintre handlere nu este mult mai lentă decât apelarea funcțiilor obișnuite. Separarea se poate face nu numai la nivelul modulelor individuale, ci și la nivelul grupurilor de module care, de exemplu, trebuie să lucreze cu zone de memorie comune

Puterile solicitate pot fi determinate atât la nivelul dependențelor în sine, cât și delegate dependențelor de-a lungul lanțului de modulele părinte (resursele din WASI sunt asociate cu un tip special de descriptor de fișier - capabilitate). De exemplu, unui modul i se poate delega capacitatea de a accesa un anume director și apeluri de sistem, iar dacă infrastructura de dezvoltare a modulului este compromisă sau este identificată o vulnerabilitate, în timpul unui atac, accesul va fi limitat doar la aceste resurse. Declarațiile de resurse ale creatorilor de module pot fi un indicator al activității suspecte, cum ar fi atunci când un modul de procesare a textului solicită permisiunea de a deschide o conexiune la rețea. Permisiunile setate inițial sunt verificate și dacă se modifică, încărcarea dependenței este respinsă până când semnătura modulului local este actualizată.

Pentru dezvoltare comună sub aripa Alianței Bytecode tradus mai multe legate de WebAssembly proiecte, dezvoltat anterior separat de companiile fondatoare ale alianței:

  • Timpul de spălare — runtime pentru rularea aplicațiilor WebAssembly cu extensii WASI ca aplicații autonome obișnuite. Acceptă atât lansarea codului de octeți WebAssembly folosind un utilitar special de linie de comandă, cât și legarea fișierelor executabile gata făcute (wasmtime este încorporat în aplicație ca bibliotecă). Wasmtime are o structură modulară flexibilă care vă permite să scalați timpul de execuție pentru diverse aplicații, de exemplu, puteți crea o versiune redusă pentru dispozitive cu resurse limitate;
  • Lucet — compilator și runtime pentru executarea programelor în format WebAssembly. Distinctiv caracteristică Lucet este utilizarea completă a compilației anticipative (AOT, înainte de timp) în loc de JIT în codul mașinii potrivit pentru execuția directă. Proiectul a fost dezvoltat de Fastly și este optimizat pentru a consuma resurse minime și pentru a lansa noi instanțe foarte rapid (Fastly folosește Lucet într-un motor de cloud edge computing care utilizează WebAssembly pentru handlere lansate la fiecare solicitare). Ca parte a proiectului comun, compilatorul Lucet este planificat să fie convertit pentru a utiliza Wasmtime ca bază;
  • WAMR (WebAssembly Micro Runtime) este un alt timp de execuție pentru executarea WebAssembly, dezvoltat inițial de Intel pentru a fi utilizat în dispozitivele Internet of Things. WAMR este optimizat pentru un consum minim de resurse și poate fi utilizat pe dispozitive cu o cantitate mică de RAM. Proiectul include un interpret și o mașină virtuală pentru executarea codului de octeți WebAssembly, un API (un subset de Libc) și instrumente pentru managementul dinamic al aplicațiilor;
  • ridicare cu macara — un generator de cod care traduce o reprezentare intermediară independentă de arhitecturile hardware în cod de mașină executabil optimizat pentru platforme hardware specifice. Cranelift acceptă paralelizarea compilării funcțiilor pentru generarea de rezultate foarte rapidă, ceea ce îi permite să fie utilizat pentru a crea compilatoare JIT (JIT bazat pe Cranelift este utilizat în mașina virtuală Wasmtime);
  • WASI comun — o implementare separată a API-ului WASI (WebAssembly System Interface) pentru organizarea interacțiunii cu sistemul de operare;
  • cargo-wasi — un modul pentru managerul de pachete Cargo care implementează o comandă pentru compilarea codului Rust în codul de octeți WebAssembly folosind interfața WASI pentru utilizarea WebAssembly în afara browserului;
  • wat и wasmparser — analizoare pentru analizarea textului (WAT, WAST) și reprezentări binare ale codului de octeți WebAssembly.

Pentru a recapitula, WebAssembly seamănă mult cu Asm.js, dar diferit prin aceea că este un format binar care nu este legat de JavaScript și permite executarea în browser a unui cod intermediar de nivel scăzut compilat din diferite limbaje de programare. WebAssembly nu necesită un colector de gunoi deoarece utilizează gestionarea explicită a memoriei. Folosind JIT pentru WebAssembly, puteți atinge niveluri de performanță apropiate de codul nativ. Printre obiectivele principale ale WebAssembly se numără asigurarea portabilității, a comportamentului previzibil și a execuției identice a codului pe diferite platforme.

Sursa: opennet.ru

Adauga un comentariu