Mozilla, Fastly, Intel dan Red Hat mempromosikan WebAssembly sebagai platform untuk penggunaan universal

Mozilla, Fastly, Intel dan Red Hat serikat upayanya dalam mengembangkan teknologi yang membantu menjadikan WebAssembly sebagai platform universal untuk eksekusi kode yang aman di seluruh infrastruktur, sistem operasi, atau perangkat apa pun. Sebuah komunitas telah dibentuk untuk pengembangan bersama runtime dan kompiler yang memungkinkan penggunaan WebAssembly tidak hanya di browser web Aliansi Bytecode.

Untuk membuat program portabel yang dikirimkan dalam format WebAssembly yang dapat dijalankan di luar browser, kami menyarankan menggunakan API WSASI (WebAssembly System Interface), yang menyediakan antarmuka perangkat lunak untuk interaksi langsung dengan sistem operasi (POSIX API untuk bekerja dengan file, soket, dll.). Ciri khas model eksekusi aplikasi yang menggunakan WASI adalah bahwa aplikasi tersebut berjalan di lingkungan sandbox untuk isolasi dari sistem utama dan menggunakan mekanisme keamanan berdasarkan manajemen kapabilitas untuk tindakan dengan masing-masing sumber daya (file, direktori, soket, panggilan sistem , dll.) aplikasi harus diberikan izin yang sesuai (hanya akses ke fungsionalitas yang dinyatakan yang disediakan).

Satu dari tujuan Aliansi yang dibuat merupakan solusi terhadap masalah pendistribusian aplikasi modular modern dengan jumlah dependensi yang besar. Dalam aplikasi seperti itu, setiap ketergantungan dapat menjadi sumber kerentanan atau serangan potensial. Mengontrol ketergantungan memungkinkan Anda mengendalikan semua aplikasi yang terkait dengannya. Kepercayaan pada aplikasi secara otomatis menyiratkan kepercayaan pada semua dependensi, namun dependensi sering kali dikembangkan dan dipelihara oleh tim pihak ketiga yang aktivitasnya tidak dapat dikontrol. Anggota Bytecode Alliance bermaksud memberikan solusi holistik untuk eksekusi aman aplikasi WebAssembly yang pada dasarnya tidak dapat dipercaya.

Untuk perlindungan, diusulkan untuk menggunakan konsep nanoproses, di mana setiap modul ketergantungan dipisahkan menjadi modul WebAssembly yang diisolasi secara terpisah, yang kekuatannya diatur hanya dalam kaitannya dengan modul ini (misalnya, perpustakaan untuk memproses string tidak akan dapat membuka soket atau file jaringan). Tidak seperti pemisahan proses, penangan WebAssembly ringan dan hampir tidak memerlukan sumber daya tambahan - interaksi antar penangan tidak jauh lebih lambat daripada memanggil fungsi biasa. Pemisahan dapat dilakukan tidak hanya pada tingkat modul individual, tetapi juga pada tingkat kelompok modul yang, misalnya, perlu bekerja dengan area memori bersama.

Kekuasaan yang diminta dapat ditentukan baik pada tingkat dependensi itu sendiri, dan didelegasikan ke dependensi di sepanjang rantai oleh modul induk (sumber daya di WASI dikaitkan dengan jenis deskriptor file khusus - kemampuan). Misalnya, sebuah modul dapat didelegasikan kemampuan untuk mengakses direktori tertentu dan panggilan sistem, dan jika infrastruktur pengembangan modul disusupi atau kerentanan teridentifikasi, selama serangan, akses akan dibatasi hanya pada sumber daya ini. Deklarasi sumber daya oleh pembuat modul dapat menjadi indikator aktivitas mencurigakan, seperti ketika modul pemrosesan teks meminta izin untuk membuka koneksi jaringan. Izin yang ditetapkan pada awalnya diperiksa dan jika diubah, pemuatan ketergantungan ditolak hingga tanda tangan modul lokal diperbarui.

Untuk pengembangan bersama di bawah naungan Bytecode Alliance diterjemahkan beberapa terkait dengan WebAssembly proyek, yang sebelumnya dikembangkan secara terpisah oleh perusahaan pendiri aliansi:

  • waktu istirahat β€” runtime untuk menjalankan aplikasi WebAssembly dengan ekstensi WASI sebagai aplikasi reguler yang berdiri sendiri. Ini mendukung peluncuran bytecode WebAssembly menggunakan utilitas baris perintah khusus dan menghubungkan file executable yang sudah jadi (wasmtime dibangun ke dalam aplikasi sebagai perpustakaan). Wasmtime memiliki struktur modular fleksibel yang memungkinkan Anda menskalakan runtime untuk berbagai aplikasi, misalnya, Anda dapat membuat versi sederhana untuk perangkat dengan sumber daya terbatas;
  • Lucet β€” compiler dan runtime untuk menjalankan program dalam format WebAssembly. Berbeda fitur Lucet adalah penggunaan kompilasi antisipatif penuh (AOT, sebelumnya) alih-alih JIT ke dalam kode mesin yang cocok untuk eksekusi langsung. Proyek ini dikembangkan oleh Fastly dan dioptimalkan untuk menggunakan sumber daya minimal dan meluncurkan instance baru dengan sangat cepat (Fastly menggunakan Lucet dalam mesin komputasi tepi awan yang menggunakan WebAssembly untuk penangan yang diluncurkan pada setiap permintaan). Sebagai bagian dari proyek bersama, kompiler Lucet direncanakan akan dikonversi menggunakan Wasmtime sebagai basis;
  • WAMR (WebAssembly Micro Runtime) adalah runtime lain untuk menjalankan WebAssembly, awalnya dikembangkan oleh Intel untuk digunakan di perangkat Internet of Things. WAMR dioptimalkan untuk konsumsi sumber daya minimal dan dapat digunakan pada perangkat dengan jumlah RAM kecil. Proyek ini mencakup penerjemah dan mesin virtual untuk mengeksekusi bytecode WebAssembly, API (bagian dari Libc) dan alat untuk manajemen aplikasi dinamis;
  • Pengangkatan derek β€” generator kode yang menerjemahkan representasi perantara yang tidak bergantung pada arsitektur perangkat keras menjadi kode mesin yang dapat dieksekusi yang dioptimalkan untuk platform perangkat keras tertentu. Cranelift mendukung paralelisasi kompilasi fungsi untuk menghasilkan hasil yang sangat cepat, yang memungkinkannya digunakan untuk membuat kompiler JIT (JIT berbasis Cranelift digunakan di mesin virtual Wasmtime);
  • WASI umum terjadi β€” implementasi terpisah dari API WASI (WebAssembly System Interface) untuk mengatur interaksi dengan sistem operasi;
  • kargo-wasi β€” modul untuk manajer paket Cargo yang mengimplementasikan perintah untuk mengkompilasi kode Rust ke dalam bytecode WebAssembly menggunakan antarmuka WASI untuk menggunakan WebAssembly di luar browser;
  • wat ΠΈ wasmparser β€” parser untuk mengurai teks (WAT, WAST) dan representasi biner dari bytecode WebAssembly.

Singkatnya, WebAssembly sangat mirip dengan Asm.js, tapi berbeda karena ini adalah format biner yang tidak terikat dengan JavaScript dan memungkinkan kode perantara tingkat rendah yang dikompilasi dari berbagai bahasa pemrograman untuk dieksekusi di browser. WebAssembly tidak memerlukan pengumpul sampah karena menggunakan manajemen memori eksplisit. Dengan menggunakan JIT untuk WebAssembly, Anda dapat mencapai tingkat kinerja yang mendekati kode asli. Di antara tujuan utama WebAssembly adalah memastikan portabilitas, perilaku yang dapat diprediksi, dan eksekusi kode yang identik pada platform berbeda.

Sumber: opennet.ru

Tambah komentar