ProHoster > Blogs > interneta ziÅas > Mozilla, Fastly, Intel un Red Hat reklamÄ WebAssembly kÄ platformu universÄlai lietoÅ”anai
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.