Mozilla, Fastly, Intel va Red Hat WebAssembly-ni universal foydalanish platformasi sifatida targ'ib qiladi

Mozilla, Fastly, Intel va Red Hat birlashgan WebAssembly-ni har qanday infratuzilma, operatsion tizim yoki qurilmada xavfsiz kod bajarilishi uchun universal platformaga aylantirishga yordam beradigan texnologiyalarni ishlab chiqishdagi sa'y-harakatlari. WebAssembly-dan nafaqat veb-brauzerlarda foydalanishga imkon beruvchi ish vaqti va kompilyatorlarni birgalikda ishlab chiqish uchun hamjamiyat tashkil etildi. Bytecode Alliance.

Brauzerdan tashqarida bajarilishi mumkin bo'lgan WebAssembly formatida yetkazib beriladigan portativ dasturlarni yaratish uchun API dan foydalanishni tavsiya etamiz. WASI (WebAssembly System Interface), bu operatsion tizim bilan to'g'ridan-to'g'ri o'zaro ta'sir qilish uchun dasturiy interfeyslarni ta'minlaydi (fayllar, rozetkalar va boshqalar bilan ishlash uchun POSIX API). WASI-dan foydalanadigan ilovalarni bajarish modelining o'ziga xos xususiyati shundaki, ular asosiy tizimdan izolyatsiya qilish uchun sandbox muhitida ishlaydi va har bir manba (fayllar, kataloglar, rozetkalar, tizim qo'ng'iroqlari) bilan harakatlar uchun imkoniyatlarni boshqarishga asoslangan xavfsizlik mexanizmidan foydalanadi. , va hokazo) ilovaga tegishli ruxsatnomalar berilishi kerak (faqat e'lon qilingan funksiyaga kirish ta'minlanadi).

Bittasi maqsadlar Yaratilgan ittifoq zamonaviy modulli ilovalarni ko'p sonli bog'liqliklar bilan tarqatish muammosini hal qilishdir. Bunday ilovalarda har bir qaramlik zaifliklar yoki hujumlarning potentsial manbai bo'lishi mumkin. Tobelikni nazorat qilish unga bog'liq bo'lgan barcha ilovalarni boshqarish imkonini beradi. Ilovaga ishonch avtomatik ravishda barcha bog'liqliklarga ishonchni anglatadi, lekin bog'liqliklar ko'pincha faoliyatini nazorat qilib bo'lmaydigan uchinchi tomon guruhlari tomonidan ishlab chiqiladi va qo'llab-quvvatlanadi. Bytecode Alliance a'zolari tabiiy ravishda ishonchli bo'lmagan WebAssembly ilovalarini xavfsiz bajarish uchun yaxlit yechimni taqdim etish niyatida.

Himoya qilish uchun har bir bog'liqlik moduli alohida ajratilgan WebAssembly moduliga bo'lingan nanojarayonlar kontseptsiyasidan foydalanish taklif etiladi, ularning vakolatlari faqat ushbu modulga nisbatan o'rnatiladi (masalan, satrlarni qayta ishlash uchun kutubxona mavjud bo'lmaydi). tarmoq rozetkasini yoki faylni ochish imkoniyatiga ega bo'lish). Jarayonni ajratishdan farqli o'laroq, WebAssembly ishlov beruvchilari engil va deyarli qo'shimcha resurslarni talab qilmaydi - ishlov beruvchilar o'rtasidagi o'zaro ta'sir oddiy funktsiyalarni chaqirishdan ko'ra sekinroq emas. Ajratish nafaqat alohida modullar darajasida, balki, masalan, umumiy xotira maydonlari bilan ishlash kerak bo'lgan modullar guruhlari darajasida ham amalga oshirilishi mumkin.

So'ralgan vakolatlar ham bog'liqliklar darajasida aniqlanishi mumkin, ham ota-modullar tomonidan zanjir bo'ylab bog'liqliklarga berilishi mumkin (WASI-dagi manbalar maxsus turdagi fayl identifikatori - qobiliyat bilan bog'liq). Misol uchun, modulga ma'lum bir katalog va tizim qo'ng'iroqlariga kirish imkoniyati berilishi mumkin va agar modulning rivojlanish infratuzilmasi buzilgan yoki zaiflik aniqlansa, hujum paytida kirish faqat ushbu resurslar bilan cheklanadi. Modul yaratuvchilari tomonidan resurs deklaratsiyasi, masalan, matnni qayta ishlash moduli tarmoq ulanishini ochishga ruxsat so‘raganda, shubhali faoliyat ko‘rsatkichi bo‘lishi mumkin. Dastlab o'rnatilgan ruxsatlar tekshiriladi va agar ular o'zgarsa, mahalliy modul imzosi yangilanmaguncha bog'liqlikni yuklash rad etiladi.

Bytecode Alliance qanoti ostida birgalikda ishlab chiqish uchun tarjima qilingan WebAssembly bilan bog'liq bir nechta loyihalar, ilgari alyansning ta'sischi kompaniyalari tomonidan alohida ishlab chiqilgan:

  • vaqt — odatiy mustaqil ilovalar sifatida WASI kengaytmalari bilan WebAssembly ilovalarini ishga tushirish uchun ish vaqti. U maxsus buyruq qatori yordam dasturi yordamida WebAssembly baytkodini ishga tushirishni va tayyor bajariladigan fayllarni bog'lashni qo'llab-quvvatlaydi (wasmtime kutubxona sifatida ilovaga o'rnatilgan). Wasmtime moslashuvchan modulli tuzilishga ega, bu sizga turli ilovalar uchun ish vaqtini o'lchash imkonini beradi, masalan, cheklangan resurslarga ega qurilmalar uchun qisqartirilgan versiyani yaratishingiz mumkin;
  • Lucet — WebAssembly formatida dasturlarni bajarish uchun kompilyator va ish vaqti. O'ziga xos xususiyat Lucet - bu to'g'ridan-to'g'ri bajarish uchun mos bo'lgan mashina kodiga JIT o'rniga to'liq taxminiy kompilyatsiya (AOT, muddatidan oldin) dan foydalanish. Loyiha Fastly tomonidan ishlab chiqilgan va minimal resurslarni iste'mol qilish va yangi nusxalarni juda tez ishga tushirish uchun optimallashtirilgan (har bir so'rov bo'yicha ishga tushirilgan ishlovchilar uchun WebAssembly-dan foydalanadigan bulutli chekka hisoblash dvigatelida Lucet-dan tez foydalanadi). Qo'shma loyiha doirasida Lucet kompilyatorini Wasmtime-dan asos sifatida foydalanishga aylantirish rejalashtirilgan;
  • WAMR (WebAssembly Micro Runtime) WebAssembly-ni bajarish uchun yana bir ish vaqti bo'lib, dastlab Intel tomonidan Internet narsalar qurilmalarida foydalanish uchun ishlab chiqilgan. WAMR minimal resurs sarfi uchun optimallashtirilgan va kichik hajmdagi operativ xotiraga ega qurilmalarda foydalanish mumkin. Loyiha WebAssembly bayt-kodini bajarish uchun tarjimon va virtual mashinani, API (Libc ning quyi to'plami) va ilovalarni dinamik boshqarish vositalarini o'z ichiga oladi;
  • Kranelift — apparat arxitekturasidan mustaqil oraliq tasvirni muayyan apparat platformalari uchun optimallashtirilgan bajariladigan mashina kodiga aylantiruvchi kod generatori. Cranelift juda tez natijalarni yaratish uchun funksiya kompilyatsiyasini parallellashtirishni qo'llab-quvvatlaydi, bu JIT kompilyatorlarini yaratishda foydalanish imkonini beradi (Cranelift asosidagi JIT Wasmtime virtual mashinasida qo'llaniladi);
  • WASI keng tarqalgan — operatsion tizim bilan o'zaro aloqani tashkil qilish uchun WASI (WebAssembly System Interface) API ning alohida amalga oshirilishi;
  • yuk-vasi — WebAssembly-dan brauzerdan tashqarida foydalanish uchun WASI interfeysi yordamida Rust kodini WebAssembly bayt-kodiga kompilyatsiya qilish buyrug'ini amalga oshiradigan Cargo paketi menejeri moduli;
  • wat и wampparser — matnni tahlil qilish (WAT, WAST) va WebAssembly bayt-kodining ikkilik ko'rinishlari uchun parserlar.

Xulosa qilib aytadigan bo'lsak, WebAssembly Asm.js-ga juda o'xshaydi, lekin farq qiladi chunki u JavaScript-ga bog'lanmagan ikkilik format bo'lib, turli dasturlash tillaridan tuzilgan past darajadagi oraliq kodni brauzerda bajarishga imkon beradi. WebAssembly axlat yig'uvchini talab qilmaydi, chunki u aniq xotira boshqaruvidan foydalanadi. WebAssembly uchun JIT-dan foydalanib, siz mahalliy kodga yaqin ishlash darajalariga erishishingiz mumkin. WebAssembly-ning asosiy maqsadlari orasida turli platformalarda portativlikni, bashorat qilinadigan xatti-harakatlarni va bir xil kod bajarilishini ta'minlash kiradi.

Manba: opennet.ru

a Izoh qo'shish