WASI проект на Mozilla за използване на WebAssembly извън браузъра

WASI проект на Mozilla за използване на WebAssembly извън браузъра

Разработчиците на Mozilla представиха проекта WASI (WebAssembly System Interface), която работи върху дефинирането на софтуерни интерфейси, които могат да се използват за организиране на взаимодействието на приложения, доставени във формат WebAssembly, с операционната система.

Целта на проекта е да предостави API, който разширява използването на WebAssembly и ви позволява да създавате програми редовно базирани В тази технология, която работи извън браузъраТе са преносими към всяка платформа и демонстрират високо ниво на сигурност.

Какво е WASI?

WASI позволява на средата WebAssembly да има достъп до функциите, предоставени от операционната системакато файлове, файлова система, мрежови контакти, таймери и генератори на произволни числа.

API на WASI първоначално е разработен като независим от браузъра и самостоятелен от JavaScript / Web API, но в същото време осигурява адекватно ниво на изолиране на системата main (приложенията се изпълняват в пясъчник) и ви позволява да дефинирате изрично правомощията, дадени на приложението в стила на CloudABI и Capsicum.

БЯХ ЛИ използва модел на защита, базиран на управление на разрешения, в рамките на която една програма може само умишлено да извършва оторизирани действия.

Подобно на това как WebAssembly ограничава достъпа на ниво функции за импортиране, WASI контролира достъпа до системните възможности.

Файлове, директории, сокети и други ресурси са свързани със специален тип дескриптор на файлове (капацитет) и приложението трябва да има разрешения за извършване на действие върху всеки от ресурсите.

Разрешенията се управляват йерархично, тоест достъпът до директорията се отваря автоматично и достъпът до всички файлове, които тя съдържа.

имайки предвид, че WebAssembly е независима от платформата версия на асемблерния език, използването на JIT може да постигне ниво на производителност, близко до родния код, като същевременно запазва способността да работи на различни хардуерни платформи и операционни системи.

Понастоящем проектът осигурява на двуядрения модул изпълнението на основния API на POSIX (файлове, сокети и т.н.), който понастоящем няма поддръжка за заключвания и асинхронни I / O.

В бъдеще, предвижда се създаване на модули с изпълнение на API за извършване на криптографски операции, работа с 3D графика, взаимодействат със сензори, операции с процеси (извикването на вилката все още не се поддържа) и обработват мултимедийни данни.

Компонентни прототипи

Wasmtime е време за изпълнение, което е отговорно за стартирането на приложения, базирани на WebAssembly с разширения WASI като обикновени самостоятелни приложения.

Se поддържа стартиране на байт код WebAssembly с помощта на специална помощна програма за команден ред и дизайн на готови за използване изпълними файлове (wasmtime е вграден в приложението като библиотека).

За да се постигне подходящото ниво на производителност, се използва JIT компилатор, базиран на генератора на кода на кота.

Lucet е друга версия по време на изпълнение на проекта Fastly (кодът е планиран да бъде публикуван днес или утре).

WASI SDK- Инструменти за компилиране на C / C ++ приложения във формат за уеб асемблиране с помощта на Clang 8.0.

Цел за сглобяване с поддръжка на WASI за езика Rust, който ви позволява да компилирате Rust код в WebAssembly.

Wasi-sysroot е изпълнение на стандартната библиотека libc за WASI, базиран на кода на Musl, както и слой по време на изпълнение, за да преобразува функциите, предоставени от библиотеката, в системни извиквания на различни операционни системи, за да се постигне възможността за стартиране на приложение WASI на различни операционни системи.

Проектът също така разработва библиотеката на polyfill JavaScript с внедряване на WASI за стартиране на приложения в браузъра., което позволява да се приложи моделът за контрол на достъпа „възможности“ към код, изпълняван в браузъра.

От плановете се споменава създаването на базирана на WASI модулна система за интеграция в изолирани плъгин приложения с допълнителна функционалност, предоставена във формата WebAssembly.

Една от основните задачи на WebAssembly е да осигури преносимост, предсказуемост на поведението и идентичност на изпълнението на кода на различни платформи.