Ang Mozilla, Fastly, Intel at Red Hat ay nagpo-promote ng WebAssembly bilang isang platform para sa unibersal na paggamit

Mozilla, Fastly, Intel at Red Hat nagkakaisa ang mga pagsisikap nito sa pagbuo ng mga teknolohiya na tumutulong na gawing unibersal na platform ang WebAssembly para sa secure na pagpapatupad ng code sa anumang imprastraktura, operating system, o device. Ang isang komunidad ay nabuo para sa magkasanib na pagbuo ng runtime at mga compiler na nagpapahintulot sa paggamit ng WebAssembly hindi lamang sa mga web browser Bytecode Alliance.

Upang lumikha ng mga portable na programa na inihatid sa WebAssembly na format na maaaring isagawa sa labas ng browser, iminumungkahi namin ang paggamit ng API WASI (WebAssembly System Interface), na nagbibigay ng mga interface ng software para sa direktang pakikipag-ugnayan sa operating system (POSIX API para sa pagtatrabaho sa mga file, socket, atbp.). Ang isang natatanging tampok ng modelo ng pagpapatupad ng mga application gamit ang WASI ay ang mga ito ay tumatakbo sa isang sandbox na kapaligiran para sa paghihiwalay mula sa pangunahing system at gumamit ng mekanismo ng seguridad batay sa pamamahala ng kakayahan para sa mga aksyon sa bawat isa sa mga mapagkukunan (mga file, direktoryo, socket, mga tawag sa system , atbp.) ang application ay dapat bigyan ng naaangkop na mga pahintulot (ang pag-access lamang sa ipinahayag na pag-andar ang ibinigay).

Isa sa mga layunin Ang nilikha na alyansa ay isang solusyon sa problema ng pamamahagi ng mga modernong modular na aplikasyon na may malaking bilang ng mga dependency. Sa ganitong mga application, ang bawat dependency ay maaaring maging isang potensyal na mapagkukunan ng mga kahinaan o pag-atake. Ang pagkuha ng kontrol sa isang dependency ay nagbibigay-daan sa iyo upang makakuha ng kontrol sa lahat ng mga application na nauugnay dito. Ang pagtitiwala sa application ay awtomatikong nagpapahiwatig ng pagtitiwala sa lahat ng mga dependency, ngunit ang mga dependency ay madalas na binuo at pinapanatili ng mga third-party na team na ang mga aktibidad ay hindi makokontrol. Nilalayon ng mga miyembro ng Bytecode Alliance na magbigay ng isang holistic na solusyon para sa secure na pagpapatupad ng mga WebAssembly application na hindi likas na mapagkakatiwalaan.

Para sa proteksyon, iminungkahi na gamitin ang konsepto ng mga nanoprocess, kung saan ang bawat dependency module ay pinaghihiwalay sa isang hiwalay na nakahiwalay na WebAssembly module, na ang mga kapangyarihan ay nakatakda kaugnay lamang sa module na ito (halimbawa, ang isang library para sa pagproseso ng mga string ay hindi makapagbukas ng network socket o file). Hindi tulad ng paghihiwalay ng proseso, ang mga humahawak ng WebAssembly ay magaan at halos hindi nangangailangan ng karagdagang mga mapagkukunan - ang pakikipag-ugnayan sa pagitan ng mga humahawak ay hindi mas mabagal kaysa sa pagtawag sa mga ordinaryong function. Ang paghihiwalay ay maaaring gawin hindi lamang sa antas ng mga indibidwal na module, kundi pati na rin sa antas ng mga grupo ng mga module na, halimbawa, kailangang gumana sa mga karaniwang lugar ng memorya

Ang mga hiniling na kapangyarihan ay maaaring matukoy pareho sa antas ng mga dependency mismo, at italaga sa mga dependency sa kahabaan ng chain ng mga magulang na module (ang mga mapagkukunan sa WASI ay nauugnay sa isang espesyal na uri ng file descriptor - kakayahan). Halimbawa, maaaring italaga sa isang module ang kakayahang mag-access ng isang partikular na direktoryo at mga tawag sa system, at kung ang imprastraktura ng pag-develop ng module ay nakompromiso o natukoy ang isang kahinaan, sa panahon ng pag-atake, ang pag-access ay limitado lamang sa mga mapagkukunang ito. Ang mga deklarasyon ng mapagkukunan ng mga tagalikha ng module ay maaaring maging isang tagapagpahiwatig ng kahina-hinalang aktibidad, tulad ng kapag ang isang text processing module ay humiling ng pahintulot na magbukas ng isang koneksyon sa network. Ang mga unang itinakda na pahintulot ay sinusuri at kung magbabago ang mga ito, ang pag-load ng dependency ay tatanggihan hanggang sa ma-update ang lagda ng lokal na module.

Para sa magkasanib na pag-unlad sa ilalim ng pakpak ng Bytecode Alliance isinalin ilang nauugnay sa WebAssembly mga proyekto, na dating hiwalay na binuo ng mga nagtatag na kumpanya ng alyansa:

  • wasmtime β€” runtime para sa pagpapatakbo ng mga WebAssembly application na may mga extension ng WASI bilang mga regular na stand-alone na application. Sinusuportahan nito ang parehong paglulunsad ng WebAssembly bytecode gamit ang isang espesyal na command line utility at pag-link ng mga yari na executable file (wasmtime ay binuo sa application bilang isang library). Ang Wasmtime ay may nababaluktot na modular na istraktura na nagbibigay-daan sa iyong sukatin ang runtime para sa iba't ibang mga application, halimbawa, maaari kang lumikha ng isang stripped-down na bersyon para sa mga device na may limitadong mapagkukunan;
  • Lucet β€” compiler at runtime para sa pagpapatupad ng mga programa sa WebAssembly na format. Katangi-tangi tampok Ang Lucet ay ang paggamit ng ganap na anticipatory compilation (AOT, ahead-of-time) sa halip na JIT sa machine code na angkop para sa direktang pagpapatupad. Ang proyekto ay binuo ng Fastly at na-optimize upang kumonsumo ng kaunting mga mapagkukunan at maglunsad ng mga bagong pagkakataon nang napakabilis (Fastly ay gumagamit ng Lucet sa isang cloud edge computing engine na gumagamit ng WebAssembly para sa mga humahawak na inilunsad sa bawat kahilingan). Bilang bahagi ng pinagsamang proyekto, ang Lucet compiler ay binalak na ma-convert upang magamit ang Wasmtime bilang base;
  • WAMR (WebAssembly Micro Runtime) ay isa pang runtime para sa pagpapatupad ng WebAssembly, na orihinal na binuo ng Intel para magamit sa mga Internet of Things device. Ang WAMR ay na-optimize para sa minimal na pagkonsumo ng mapagkukunan at maaaring magamit sa mga device na may maliit na halaga ng RAM. Kasama sa proyekto ang isang interpreter at virtual machine para sa pagpapatupad ng WebAssembly bytecode, isang API (isang subset ng Libc) at mga tool para sa dynamic na pamamahala ng application;
  • crane lift β€” isang code generator na nagsasalin ng isang intermediate na representasyon na hiwalay sa mga arkitektura ng hardware sa executable machine code na na-optimize para sa mga partikular na hardware platform. Sinusuportahan ng Cranelift ang parallelization ng compilation ng function para sa napakabilis na pagbuo ng resulta, na nagpapahintulot na magamit ito upang lumikha ng mga JIT compiler (Ginagamit ang Cranelift-based na JIT sa Wasmtime virtual machine);
  • Karaniwan ang WASI β€” isang hiwalay na pagpapatupad ng WASI (WebAssembly System Interface) API para sa pagsasaayos ng pakikipag-ugnayan sa operating system;
  • cargo-wasi β€” isang module para sa Cargo package manager na nagpapatupad ng command para sa pag-compile ng Rust code sa WebAssembly bytecode gamit ang interface ng WASI para sa paggamit ng WebAssembly sa labas ng browser;
  • Wat ΠΈ wasmparser β€” mga parser para sa pag-parse ng text (WAT, WAST) at binary na representasyon ng WebAssembly bytecode.

Upang recap, ang WebAssembly ay katulad ng Asm.js, ngunit naiiba dahil ito ay isang binary na format na hindi nakatali sa JavaScript at pinapayagan ang mababang antas na intermediate code na pinagsama-sama mula sa iba't ibang mga programming language na maisakatuparan sa browser. Ang WebAssembly ay hindi nangangailangan ng isang basurero dahil gumagamit ito ng tahasang pamamahala ng memorya. Sa pamamagitan ng paggamit ng JIT para sa WebAssembly, makakamit mo ang mga antas ng pagganap na malapit sa katutubong code. Kabilang sa mga pangunahing layunin ng WebAssembly ay ang pagtiyak ng portability, predictable na gawi at magkaparehong code execution sa iba't ibang platform.

Pinagmulan: opennet.ru

Magdagdag ng komento