Mozilla, Fastly, Intel sareng Red Hat ngamajukeun WebAssembly salaku platform pikeun panggunaan universal

Mozilla, Fastly, Intel sareng Red Hat ngahiji usahana dina ngamekarkeun téknologi nu mantuan nyieun WebAssembly platform universal pikeun palaksanaan kode aman sakuliah infrastruktur, sistem operasi, atawa alat. Komunitas parantos dibentuk pikeun ngembangkeun gabungan runtime sareng kompiler anu ngamungkinkeun panggunaan WebAssembly henteu ngan ukur dina panyungsi wéb. Bytecode Alliance.

Pikeun nyieun program portabel anu dikirimkeun dina format WebAssembly anu tiasa dieksekusi di luar browser, kami nyarankeun ngagunakeun API. WASI (WebAssembly System Interface), nu nyadiakeun interfaces software pikeun interaksi langsung jeung sistem operasi (POSIX API pikeun gawé bareng file, sockets, jsb). Fitur has tina modél palaksanaan aplikasi nganggo WASI nyaéta aranjeunna ngajalankeun di lingkungan sandbox pikeun ngasingkeun tina sistem utama sareng nganggo mékanisme kaamanan dumasar kana manajemén kamampuan pikeun tindakan sareng unggal sumber (file, diréktori, sockets, telepon sistem. , jsb) aplikasi kudu dibéré idin luyu (ngan aksés ka fungsionalitas dinyatakeun disadiakeun).

Salah sahiji gol Aliansi anu diciptakeun mangrupikeun solusi pikeun masalah nyebarkeun aplikasi modular modéren kalayan sajumlah ageung katergantungan. Dina aplikasi sapertos kitu, unggal kagumantungan tiasa janten sumber potensi kerentanan atanapi serangan. Ngadalikeun kagumantungan ngamungkinkeun anjeun pikeun ngontrol sadaya aplikasi anu aya hubunganana sareng éta. Kapercayaan kana aplikasi sacara otomatis nunjukkeun kapercayaan ka sadaya katergantungan, tapi katergantungan sering dikembangkeun sareng dijaga ku tim pihak katilu anu kagiatanana teu tiasa dikontrol. Anggota Bytecode Alliance boga tujuan pikeun nyadiakeun solusi holistik pikeun palaksanaan aman tina aplikasi WebAssembly nu teu inherently dipercaya.

Pikeun panangtayungan, éta diusulkeun ngagunakeun konsép nanoprocesses, nu unggal modul kagumantungan dipisahkeun kana modul WebAssembly terasing misah, kakuatan nu diatur dina hubungan ukur jeung modul ieu (contona, perpustakaan pikeun ngolah string moal. tiasa muka socket jaringan atanapi file). Beda sareng pamisahan prosés, pawang WebAssembly hampang sareng ampir henteu peryogi sumber tambahan - interaksi antara pawang henteu langkung laun tibatan nelepon fungsi biasa. Pemisahan tiasa dilakukeun henteu ngan ukur dina tingkat modul individu, tapi ogé dina tingkat kelompok modul anu, contona, kedah dianggo sareng daérah mémori umum.

Kakuatan anu dipénta tiasa ditangtukeun boh dina tingkat katergantungan sorangan sareng didelegasikeun ka katergantungan sapanjang ranté ku modul indungna (sumber daya di WASI pakait sareng jinis deskriptor file khusus - kamampuan). Contona, modul a bisa delegated kamampuhan pikeun ngakses hiji diréktori husus sarta panggero sistem, sarta lamun infrastruktur ngembangkeun modul urang geus compromised atawa kerentanan hiji dicirikeun, salila serangan, aksés bakal dugi ngan pikeun sumberdaya ieu. Deklarasi sumberdaya ku panyipta modul tiasa janten indikator kagiatan anu curiga, sapertos nalika modul ngolah téks menta idin pikeun muka sambungan jaringan. Idin anu disetél mimitina dipariksa sareng upami aranjeunna robih, beban gumantungna ditolak dugi ka tandatangan modul lokal diropéa.

Pikeun ngembangkeun gabungan handapeun jangjang tina Bytecode Alliance ditarjamahkeun sababaraha patali jeung WebAssembly proyék, saméméhna dikembangkeun sacara misah ku pausahaan pangadeg aliansi:

  • Waktosna — Runtime pikeun ngajalankeun aplikasi WebAssembly sareng ekstensi WASI salaku aplikasi mandiri biasa. Ieu ngarojong duanana launching WebAssembly bytecode ngagunakeun utiliti garis paréntah husus tur linking siap-dijieun file laksana (wasmtime diwangun kana aplikasi salaku perpustakaan). Wasmtime boga struktur modular fléksibel nu ngidinan Anjeun pikeun skala runtime pikeun sagala rupa aplikasi, contona, Anjeun bisa nyieun versi dilucuti-handap pikeun alat jeung sumber kawates;
  • Lucet - kompiler sareng runtime pikeun ngaéksekusi program dina format WebAssembly. has fitur Lucet nyaéta pamakéan kompilasi anticipatory full-fledged (AOT, payun-of-waktu) tinimbang JIT kana kode mesin cocog pikeun palaksanaan langsung. Proyék ieu dikembangkeun ku Fastly sareng dioptimalkeun pikeun ngonsumsi sumber daya minimal sareng ngaluncurkeun instansi énggal gancang pisan (Fastly nganggo Lucet dina mesin komputasi ujung awan anu nganggo WebAssembly pikeun pawang anu diluncurkeun dina unggal pamundut). Salaku bagian tina proyék gabungan, kompiler Lucet direncanakeun bakal dirobih ngagunakeun Wasmtime salaku dasar;
  • WAM (WebAssembly Micro Runtime) nyaéta runtime séjén pikeun ngajalankeun WebAssembly, mimitina dikembangkeun ku Intel pikeun dianggo dina alat Internet of Things. WAMR dioptimalkeun pikeun konsumsi sumberdaya minimal sareng tiasa dianggo dina alat-alat anu gaduh jumlah RAM anu sakedik. Proyék ieu kalebet juru basa sareng mesin virtual pikeun ngalaksanakeun bytecode WebAssembly, API (sawaréh ti Libc) sareng alat pikeun manajemén aplikasi dinamis;
  • angkat bango - generator kode anu narjamahkeun hiji representasi panengah bebas arsitektur hardware kana kode mesin laksana dioptimalkeun pikeun platform hardware husus. Cranelift ngarojong parallelization kompilasi fungsi pikeun ngahasilkeun hasil pisan gancang, anu ngamungkinkeun pikeun dipaké pikeun nyieun JIT compiler (JIT basis Cranelift dipaké dina mesin virtual Wasmtime);
  • WASI umum - palaksanaan misah tina WASI (WebAssembly System Interface) API pikeun ngatur interaksi jeung sistem operasi;
  • kargo-wasi - modul pikeun manajer pakét kargo anu ngalaksanakeun paréntah pikeun nyusun kode Rust kana bytecode WebAssembly nganggo antarmuka WASI pikeun ngagunakeun WebAssembly di luar browser;
  • wat и wasmparser - parsers pikeun parsing téks (WAT, WAST) jeung representasi binér tina WebAssembly bytecode.

Pikeun recap, WebAssembly pisan kawas Asm.js, tapi béda Éta mangrupikeun format binér anu henteu kabeungkeut kana JavaScript sareng ngamungkinkeun kode panengah tingkat rendah anu disusun tina sababaraha basa pamrograman pikeun dieksekusi dina browser. WebAssembly henteu ngabutuhkeun tukang sampah sabab ngagunakeun manajemén mémori anu eksplisit. Ku ngagunakeun JIT pikeun WebAssembly, anjeun tiasa ngahontal tingkat kinerja anu caket sareng kode asli. Diantara tujuan utama WebAssembly nyaéta mastikeun portabilitas, paripolah anu tiasa diprediksi sareng palaksanaan kode anu sami dina platform anu béda.

sumber: opennet.ru

Tambahkeun komentar