Mozilla, Fastly, Intel және Red Hat WebAssembly-ді әмбебап пайдалануға арналған платформа ретінде алға тартады

Mozilla, Fastly, Intel және Red Hat біріккен оның WebAssembly кез келген инфрақұрылымда, операциялық жүйеде немесе құрылғыда қауіпсіз кодты орындауға арналған әмбебап платформаға айналдыруға көмектесетін технологияларды әзірлеудегі күш-жігері. WebAssembly-ді тек веб-шолғыштарда ғана емес пайдалануға мүмкіндік беретін орындау уақыты мен компиляторларды бірлесіп әзірлеу үшін қауымдастық құрылды. Байткод альянсы.

Браузерден тыс орындалатын WebAssembly пішімінде жеткізілетін портативті бағдарламаларды жасау үшін API пайдалануды ұсынамыз. WASI (WebAssembly System Interface), ол операциялық жүйемен тікелей әрекеттесу үшін бағдарламалық интерфейстерді қамтамасыз етеді (файлдармен, розеткалармен және т.б. жұмыс істеуге арналған POSIX API). WASI қолданатын қолданбалардың орындалу үлгісінің ерекшелігі олардың негізгі жүйеден оқшаулау үшін құмсалғыш ортасында жұмыс істеуі және әрбір ресурстармен (файлдар, каталогтар, ұялар, жүйелік қоңыраулар) әрекеттері үшін мүмкіндіктерді басқаруға негізделген қауіпсіздік механизмін пайдалануында. және т.б.) қолданбаға тиісті рұқсаттар берілуі керек (тек мәлімделген функционалдылыққа қол жеткізу қамтамасыз етіледі).

Бірі мақсаттар Құрылған альянс тәуелділіктердің үлкен саны бар заманауи модульдік қосымшаларды тарату мәселесінің шешімі болып табылады. Мұндай қолданбаларда әрбір тәуелділік осалдықтардың немесе шабуылдардың ықтимал көзі болуы мүмкін. Тәуелділікті басқару онымен байланысты барлық қолданбаларды басқаруға мүмкіндік береді. Қолданбаға сенім автоматты түрде барлық тәуелділіктерге деген сенімді білдіреді, бірақ тәуелділіктерді көбінесе әрекеттерін бақылау мүмкін емес үшінші тарап топтары әзірлейді және қолдайды. Bytecode Alliance мүшелері шын мәнінде сенімді емес WebAssembly қолданбаларын қауіпсіз орындау үшін тұтас шешімді қамтамасыз етуге ниетті.

Қорғау үшін әрбір тәуелділік модулі жеке оқшауланған WebAssembly модуліне бөлінген, өкілеттіктері тек осы модульге қатысты орнатылған нанопроцестер тұжырымдамасын пайдалану ұсынылады (мысалы, жолдарды өңдеуге арналған кітапхана жұмыс істемейді). желілік ұяшықты немесе файлды аша алу). Процесті бөлуден айырмашылығы, WebAssembly өңдегіштері жеңіл және қосымша ресурстарды қажет етпейді - өңдеушілер арасындағы өзара әрекеттесу қарапайым функцияларды шақырудан әлдеқайда баяу емес. Бөлу тек жеке модульдер деңгейінде ғана емес, сонымен қатар, мысалы, жалпы жады аймақтарымен жұмыс істеуді қажет ететін модульдер топтары деңгейінде де орындалуы мүмкін.

Сұралған өкілеттіктерді тәуелділік деңгейінде де анықтауға болады, сонымен қатар ата-аналық модульдер бойынша тізбек бойынша тәуелділіктерге беруге болады (WASI-дегі ресурстар файл дескрипторының арнайы түрімен - мүмкіндіктермен байланысты). Мысалы, модульге белгілі бір каталогқа және жүйелік қоңырауларға қол жеткізу мүмкіндігі берілуі мүмкін және модульдің әзірлеу инфрақұрылымы бұзылса немесе осалдық анықталса, шабуыл кезінде қол жеткізу тек осы ресурстармен шектеледі. Модуль жасаушылардың ресурс мәлімдемелері мәтінді өңдеу модулі желі қосылымын ашуға рұқсат сұраған кездегі сияқты күдікті әрекеттің көрсеткіші болуы мүмкін. Бастапқыда орнатылған рұқсаттар тексеріледі және олар өзгерсе, жергілікті модуль қолтаңбасы жаңартылмайынша, тәуелділікті жүктеу қабылданбайды.

Bytecode Alliance қанатының астында бірлескен даму үшін аударылған бірнеше WebAssembly қатысты жобалар, бұрын альянстың негізін қалаушы компаниялар бөлек әзірлеген:

  • Уақыт — кәдімгі оқшау қолданбалар ретінде WASI кеңейтімдері бар WebAssembly қолданбаларын іске қосу үшін орындалу уақыты. Ол арнайы пәрмен жолы утилитасын пайдаланып WebAssembly байт кодын іске қосуды және дайын орындалатын файлдарды байланыстыруды қолдайды (wasmtime қолданбаға кітапхана ретінде енгізілген). Wasmtime әртүрлі қолданбалар үшін орындалу уақытын масштабтауға мүмкіндік беретін икемді модульдік құрылымға ие, мысалы, ресурстары шектеулі құрылғылар үшін қысқартылған нұсқаны жасауға болады;
  • Люсет — WebAssembly пішіміндегі бағдарламаларды орындауға арналған компилятор және орындау уақыты. Ерекше ерекшелігі Lucet - бұл тікелей орындау үшін қолайлы машиналық кодқа JIT орнына толық күтілетін компиляцияны (AOT, мерзімінен бұрын) пайдалану. Жобаны Fastly әзірлеген және ең аз ресурстарды тұтыну және жаңа даналарды өте жылдам іске қосу үшін оңтайландырылған (Әр сұрауда іске қосылған өңдеушілер үшін WebAssembly пайдаланатын бұлттық шеткі есептеуіш қозғалтқышта Lucet жылдам пайдаланады). Бірлескен жоба аясында Lucet компиляторын негіз ретінде Wasmtime пайдалануға түрлендіру жоспарлануда;
  • WAMR (WebAssembly Micro Runtime) – WebAssembly-ді орындауға арналған басқа орындалу уақыты, бастапқыда Интернет заттар құрылғыларында пайдалану үшін Intel әзірлеген. WAMR ресурсты минималды тұтыну үшін оңтайландырылған және жедел жадының аз мөлшері бар құрылғыларда пайдаланылуы мүмкін. Жобаға WebAssembly байт кодын орындауға арналған аудармашы және виртуалды машина, API (Libc ішкі жиыны) және динамикалық қолданбаларды басқаруға арналған құралдар кіреді;
  • Кранелифт — арнайы аппараттық платформалар үшін оңтайландырылған орындалатын машиналық кодқа аппараттық құрылымнан тәуелсіз аралық көріністі аударатын код генераторы. Cranelift нәтижені өте жылдам генерациялау үшін функция компиляциясының параллельизациясын қолдайды, бұл оны JIT компиляторларын жасау үшін пайдалануға мүмкіндік береді (Cranelift негізіндегі JIT Wasmtime виртуалды машинасында қолданылады);
  • WASI жалпы — операциялық жүйемен өзара әрекеттесуді ұйымдастыру үшін WASI (WebAssembly System Interface) API бөлек жүзеге асырылуы;
  • жүк-васи — WebAssembly браузерден тыс пайдалану үшін WASI интерфейсін пайдаланып WebAssembly байт кодына Rust кодын құрастыру пәрменін жүзеге асыратын Cargo пакетінің менеджеріне арналған модуль;
  • wat и wasmparser — мәтінді талдауға арналған талдаушылар (WAT, WAST) және WebAssembly байт кодының екілік көрсетілімдері.

Қорытындылай келе, WebAssembly Asm.js сияқты, бірақ ерекшеленеді өйткені бұл JavaScript-ке байланбаған екілік пішім және әртүрлі бағдарламалау тілдерінен құрастырылған төмен деңгейлі аралық кодты шолғышта орындауға мүмкіндік береді. WebAssembly қоқыс жинағышты қажет етпейді, себебі ол нақты жадты басқаруды пайдаланады. WebAssembly үшін JIT пайдалану арқылы жергілікті кодқа жақын өнімділік деңгейлеріне қол жеткізуге болады. WebAssembly негізгі мақсаттарының қатарында әртүрлі платформаларда тасымалдануды, болжамды мінез-құлықты және бірдей кодты орындауды қамтамасыз ету болып табылады.

Ақпарат көзі: opennet.ru

пікір қалдыру