Mozilla, Fastly, Intel un Red Hat reklamē WebAssembly kā platformu universālai lietoÅ”anai

Mozilla, Fastly, Intel un Red Hat vienoti savus centienus izstrādāt tehnoloÄ£ijas, kas palÄ«dz padarÄ«t WebAssembly par universālu platformu droÅ”ai koda izpildei jebkurā infrastruktÅ«rā, operētājsistēmā vai ierÄ«cē. Ir izveidota kopiena kopÄ«gai izpildlaika un kompilatoru izstrādei, kas ļauj izmantot WebAssembly ne tikai tÄ«mekļa pārlÅ«kprogrammās Bytecode Alliance.

Lai izveidotu pārnēsājamas programmas, kas tiek piegādātas WebAssembly formātā un kuras var izpildÄ«t ārpus pārlÅ«kprogrammas, mēs iesakām izmantot API BIJU ES (WebAssembly System Interface), kas nodroÅ”ina programmatÅ«ras saskarnes tieÅ”ai mijiedarbÄ«bai ar operētājsistēmu (POSIX API darbam ar failiem, ligzdām utt.). Lietojumprogrammu, kurās izmanto WASI, izpildes modeļa atŔķirÄ«gā iezÄ«me ir tā, ka tās darbojas smilÅ”kastes vidē, lai izolētu no galvenās sistēmas, un izmanto droŔības mehānismu, kura pamatā ir spēju pārvaldÄ«ba darbÄ«bām ar katru resursu (faili, direktoriji, ligzdas, sistēmas izsaukumi). u.c.) lietojumprogrammai ir jāpieŔķir atbilstoÅ”as ā€‹ā€‹atļaujas (tiek nodroÅ”ināta tikai piekļuve deklarētajai funkcionalitātei).

Viens no mērÄ·i Izveidotā alianse ir risinājums mÅ«sdienu moduļu lietojumprogrammu izplatÄ«Å”anai ar lielu skaitu atkarÄ«bu. Šādās lietojumprogrammās katra atkarÄ«ba var bÅ«t potenciāls ievainojamÄ«bu vai uzbrukumu avots. Kontroles pārņemÅ”ana pār atkarÄ«bu ļauj iegÅ«t kontroli pār visām ar to saistÄ«tajām lietojumprogrammām. UzticÄ“Å”anās lietojumprogrammai automātiski nozÄ«mē uzticÄ“Å”anos visām atkarÄ«bām, taču atkarÄ«bas bieži izstrādā un uztur treÅ”o puÅ”u komandas, kuru darbÄ«bas nevar kontrolēt. Bytecode Alliance dalÄ«bnieki plāno nodroÅ”ināt holistisku risinājumu droÅ”ai WebAssembly lietojumprogrammu izpildei, kas pēc savas bÅ«tÄ«bas nav uzticamas.

AizsardzÄ«bai tiek piedāvāts izmantot nanoprocesu jēdzienu, kurā katrs atkarÄ«bas modulis tiek atdalÄ«ts atseviŔķi izolētā WebAssembly modulÄ«, kura jaudas ir iestatÄ«tas tikai attiecÄ«bā pret Å”o moduli (piemēram, virkņu apstrādes bibliotēka nedarbosies var atvērt tÄ«kla ligzdu vai failu). AtŔķirÄ«bā no procesu atdalÄ«Å”anas, WebAssembly apstrādātāji ir viegli un gandrÄ«z neprasa papildu resursus - mijiedarbÄ«ba starp apstrādātājiem nav daudz lēnāka nekā parasto funkciju izsaukÅ”ana. AtdalÄ«Å”anu var veikt ne tikai atseviŔķu moduļu lÄ«menÄ«, bet arÄ« moduļu grupu lÄ«menÄ«, kurām, piemēram, jādarbojas ar kopējām atmiņas zonām

PieprasÄ«tās pilnvaras var noteikt gan paÅ”u atkarÄ«bu lÄ«menÄ«, gan deleģēt atkarÄ«bām ķēdē ar vecāku moduļiem (WASI resursi ir saistÄ«ti ar Ä«paÅ”u faila deskriptora veidu - iespēju). Piemēram, modulim var deleģēt iespēju piekļūt noteiktam direktorijam un sistēmas izsaukumiem, un, ja moduļa izstrādes infrastruktÅ«ra ir apdraudēta vai tiek konstatēta ievainojamÄ«ba, uzbrukuma laikā piekļuve tiks ierobežota tikai Å”iem resursiem. Moduļu veidotāju resursu deklarācijas var liecināt par aizdomÄ«gām darbÄ«bām, piemēram, kad teksta apstrādes modulis pieprasa atļauju atvērt tÄ«kla savienojumu. Sākotnēji iestatÄ«tās atļaujas tiek pārbaudÄ«tas, un, ja tās mainās, atkarÄ«bas ielāde tiek noraidÄ«ta, lÄ«dz tiek atjaunināts lokālā moduļa paraksts.

KopÄ«gai attÄ«stÄ«bai Bytecode Alliance paspārnē tulkots vairākas saistÄ«tas ar WebAssembly projektiem, ko iepriekÅ” atseviŔķi izstrādājuÅ”i alianses dibinātāji:

  • bija laiks ā€” izpildlaiks WebAssembly lietojumprogrammu palaiÅ”anai ar WASI paplaÅ”inājumiem kā parastas atseviŔķas lietojumprogrammas. Tā atbalsta gan WebAssembly baitkoda palaiÅ”anu, izmantojot Ä«paÅ”u komandrindas utilÄ«tu, gan gatavu izpildāmo failu saistÄ«Å”anu (wasmtime ir iebÅ«vēts lietojumprogrammā kā bibliotēka). Wasmtime ir elastÄ«ga moduļu struktÅ«ra, kas ļauj mērogot izpildlaiku dažādām lietojumprogrammām, piemēram, varat izveidot attÄ«rÄ«tu versiju ierÄ«cēm ar ierobežotiem resursiem;
  • Lucet ā€” kompilators un izpildlaiks programmu izpildei WebAssembly formātā. ÄŖpatnējs iezÄ«me Lucet ir pilnvērtÄ«gas paredzamās kompilācijas (AOT, pirms laika) izmantoÅ”ana JIT vietā maŔīnkodā, kas piemērots tieÅ”ai izpildei. Projektu izstrādāja Fastly, un tas ir optimizēts, lai patērētu minimālus resursus un ļoti ātri palaistu jaunas instances (Fastly izmanto Lucet mākoņa malas skaitļoÅ”anas dzinējā, kas izmanto WebAssembly apstrādātājiem, kas tiek palaisti pēc katra pieprasÄ«juma). KopÄ«gā projekta ietvaros plānots Lucet kompilatoru pārveidot, lai par pamatu izmantotu Wasmtime;
  • WAMR (WebAssembly Micro Runtime) ir vēl viens WebAssembly izpildes laiks, ko sākotnēji izstrādāja Intel izmantoÅ”anai lietu interneta ierÄ«cēs. WAMR ir optimizēts minimālam resursu patēriņam, un to var izmantot ierÄ«cēs ar nelielu operatÄ«vās atmiņas apjomu. Projektā ietilpst tulks un virtuālā maŔīna WebAssembly baitkoda izpildei, API (Libc apakÅ”kopa) un rÄ«ki dinamiskai lietojumprogrammu pārvaldÄ«bai;
  • Celtņa pacēlājs ā€” koda Ä£enerators, kas no aparatÅ«ras arhitektÅ«ras neatkarÄ«gu starpposma attēlojumu pārvērÅ” izpildāmā maŔīnkodā, kas optimizēts konkrētām aparatÅ«ras platformām. Cranelift atbalsta funkciju kompilācijas paralēlizāciju ļoti ātrai rezultātu Ä£enerÄ“Å”anai, kas ļauj to izmantot JIT kompilatoru izveidei (Wasmtime virtuālajā maŔīnā tiek izmantots uz Cranelift balstÄ«ts JIT);
  • WASI izplatÄ«ta ā€” atseviŔķa WASI (WebAssembly System Interface) API ievieÅ”ana mijiedarbÄ«bas ar operētājsistēmu organizÄ“Å”anai;
  • kravas-wasi ā€” Cargo pakotņu pārvaldnieka modulis, kas ievieÅ” komandu Rust koda kompilÄ“Å”anai WebAssembly baitkodā, izmantojot WASI interfeisu WebAssembly lietoÅ”anai ārpus pārlÅ«kprogrammas;
  • wat Šø wasmparser ā€” parsētāji teksta (WAT, WAST) un WebAssembly baitkoda bināro attēlojumu parsÄ“Å”anai.

Rezumējot, WebAssembly ir ļoti lÄ«dzÄ«gs Asm.js, bet atŔķirÄ«gs jo tas ir binārs formāts, kas nav saistÄ«ts ar JavaScript un ļauj pārlÅ«kprogrammā izpildÄ«t zema lÄ«meņa starpposma kodu, kas kompilēts no dažādām programmÄ“Å”anas valodām. WebAssembly nav nepiecieÅ”ams atkritumu savācējs, jo tas izmanto skaidru atmiņas pārvaldÄ«bu. Izmantojot JIT for WebAssembly, varat sasniegt veiktspējas lÄ«meni, kas ir tuvu vietējam kodam. Viens no galvenajiem WebAssembly mērÄ·iem ir nodroÅ”ināt pārnesamÄ«bu, paredzamu uzvedÄ«bu un identisku kodu izpildi dažādās platformās.

Avots: opennet.ru

Pievieno komentāru