Mozilla, Fastly, Intel dhe Red Hat promovojnë WebAssembly si një platformë për përdorim universal

Mozilla, Fastly, Intel dhe Red Hat të bashkuar përpjekjet e saj në zhvillimin e teknologjive që ndihmojnë ta bëjnë WebAssembly një platformë universale për ekzekutimin e sigurt të kodit në çdo infrastrukturë, sistem operativ ose pajisje. Është formuar një komunitet për zhvillimin e përbashkët të kohës së funksionimit dhe përpiluesve që lejojnë përdorimin e WebAssembly jo vetëm në shfletuesit e internetit Aleanca Bytecode.

Për të krijuar programe portative të dorëzuara në formatin WebAssembly që mund të ekzekutohen jashtë shfletuesit, ne sugjerojmë përdorimin e API-së WASI (WebAssembly System Interface), i cili ofron ndërfaqe softuerike për ndërveprim të drejtpërdrejtë me sistemin operativ (POSIX API për të punuar me skedarë, priza, etj.). Një tipar dallues i modelit të ekzekutimit të aplikacioneve që përdorin WASI është se ato funksionojnë në një mjedis sandbox për izolim nga sistemi kryesor dhe përdorin një mekanizëm sigurie të bazuar në menaxhimin e aftësive për veprimet me secilin prej burimeve (skedarët, drejtoritë, bazat, thirrjet e sistemit , etj.) aplikacionit duhet t'i jepen lejet e duhura (sigurohet vetëm aksesi në funksionalitetin e deklaruar).

Nje nga qëllimet Aleanca e krijuar është një zgjidhje për problemin e shpërndarjes së aplikacioneve modulare moderne me një numër të madh varësish. Në aplikacione të tilla, çdo varësi mund të jetë një burim i mundshëm dobësish ose sulmesh. Marrja e kontrollit të një varësie ju lejon të fitoni kontrollin e të gjitha aplikacioneve të lidhura me të. Besimi në aplikacion nënkupton automatikisht besim në të gjitha varësitë, por varësitë shpesh zhvillohen dhe mirëmbahen nga ekipe të palëve të treta, aktivitetet e të cilave nuk mund të kontrollohen. Anëtarët e Bytecode Alliance synojnë të ofrojnë një zgjidhje holistike për ekzekutimin e sigurt të aplikacioneve WebAssembly që nuk janë në thelb të besueshme.

Për mbrojtje, propozohet të përdoret koncepti i nanoproceseve, në të cilin çdo modul i varësisë ndahet në një modul WebAssembly të izoluar veçmas, fuqitë e të cilit vendosen vetëm në lidhje me këtë modul (për shembull, një bibliotekë për përpunimin e vargjeve nuk do të të jetë në gjendje të hapë një prizë ose skedar rrjeti). Ndryshe nga ndarja e proceseve, mbajtësit e WebAssembly janë të lehtë dhe nuk kërkojnë pothuajse asnjë burim shtesë - ndërveprimi midis mbajtësve nuk është shumë më i ngadaltë sesa thirrja e funksioneve të zakonshme. Ndarja mund të bëhet jo vetëm në nivelin e moduleve individuale, por edhe në nivelin e grupeve të moduleve që, për shembull, duhet të punojnë me zona të përbashkëta të kujtesës

Fuqitë e kërkuara mund të përcaktohen si në nivelin e vetë varësive, ashtu edhe t'u delegohen varësive përgjatë zinxhirit nga modulet mëmë (burimet në WASI shoqërohen me një lloj të veçantë të përshkruesit të skedarit - aftësi). Për shembull, një moduli mund t'i delegohet aftësia për të hyrë në një drejtori specifike dhe thirrje të sistemit, dhe nëse infrastruktura e zhvillimit të modulit është komprometuar ose identifikohet një cenueshmëri, gjatë një sulmi, qasja do të kufizohet vetëm në këto burime. Deklaratat e burimeve nga krijuesit e moduleve mund të jenë një tregues i aktivitetit të dyshimtë, si p.sh. kur një modul i përpunimit të tekstit kërkon leje për të hapur një lidhje rrjeti. Lejet e vendosura fillimisht kontrollohen dhe nëse ndryshojnë, ngarkimi i varësisë refuzohet derisa nënshkrimi i modulit lokal të përditësohet.

Për zhvillim të përbashkët nën krahun e Aleancës Bytecode përkthyer disa të lidhura me WebAssembly projekte, zhvilluar më parë veçmas nga kompanitë themeluese të aleancës:

  • Koha e humbjes — koha e ekzekutimit për ekzekutimin e aplikacioneve WebAssembly me shtesa WASI si aplikacione të rregullta të pavarura. Ai mbështet të dy lëshimin e bytecode WebAssembly duke përdorur një mjet të veçantë të linjës komanduese dhe lidhjen e skedarëve të gatshëm të ekzekutueshëm (wasmtime është i integruar në aplikacion si një bibliotekë). Wasmtime ka një strukturë modulare fleksibël që ju lejon të shkallëzoni kohën e funksionimit për aplikacione të ndryshme, për shembull, mund të krijoni një version të zhveshur për pajisjet me burime të kufizuara;
  • Lucet — përpiluesi dhe koha e ekzekutimit për ekzekutimin e programeve në formatin WebAssembly. Dallues veçori Lucet është përdorimi i kompilimit paraprak të plotë (AOT, para kohe) në vend të JIT në kodin e makinës, i përshtatshëm për ekzekutim të drejtpërdrejtë. Projekti u zhvillua nga Fastly dhe është optimizuar për të konsumuar burime minimale dhe për të nisur instancat e reja shumë shpejt (Fastly përdor Lucet në një motor kompjuterik në skajet cloud që përdor WebAssembly për mbajtësit e nisur në çdo kërkesë). Si pjesë e projektit të përbashkët, përpiluesi Lucet është planifikuar të konvertohet për të përdorur Wasmtime si bazë;
  • WAMR (WebAssembly Micro Runtime) është një tjetër kohë ekzekutimi për ekzekutimin e WebAssembly, i zhvilluar fillimisht nga Intel për përdorim në pajisjet Internet of Things. WAMR është optimizuar për konsum minimal të burimeve dhe mund të përdoret në pajisjet me një sasi të vogël RAM. Projekti përfshin një përkthyes dhe makinë virtuale për ekzekutimin e bytekodit të WebAssembly, një API (një nëngrup i Libc) dhe mjete për menaxhimin dinamik të aplikacioneve;
  • Ngritje vinçi — një gjenerator kodesh që përkthen një paraqitje të ndërmjetme të pavarur nga arkitekturat e harduerit në kodin e makinerive të ekzekutueshme të optimizuar për platforma të veçanta harduerike. Cranelift mbështet paralelizimin e përpilimit të funksioneve për gjenerimin e rezultateve shumë të shpejta, gjë që lejon që ai të përdoret për të krijuar përpilues JIT (JIT i bazuar në Cranelift përdoret në makinën virtuale Wasmtime);
  • WASI e zakonshme — një implementim i veçantë i API-së WASI (WebAssembly System Interface) për organizimin e ndërveprimit me sistemin operativ;
  • kargo-wasi — një modul për menaxherin e paketave Cargo që zbaton një komandë për përpilimin e kodit Rust në bytecode WebAssembly duke përdorur ndërfaqen WASI për përdorimin e WebAssembly jashtë shfletuesit;
  • wat и shpërndarës — analizues për analizimin e tekstit (WAT, WAST) dhe paraqitje binare të bytekodit WebAssembly.

Për të përmbledhur, WebAssembly është shumë si Asm.js, por tjetër në atë që është një format binar që nuk është i lidhur me JavaScript dhe lejon që kodi i ndërmjetëm i nivelit të ulët të përpiluar nga gjuhë të ndryshme programimi të ekzekutohet në shfletues. WebAssembly nuk kërkon një grumbullues mbeturinash sepse përdor menaxhim të qartë të memories. Duke përdorur JIT për WebAssembly, mund të arrini nivele të performancës afër kodit vendas. Ndër qëllimet kryesore të WebAssembly është sigurimi i transportueshmërisë, sjelljes së parashikueshme dhe ekzekutimit identik të kodit në platforma të ndryshme.

Burimi: opennet.ru

Shto një koment