Опубликован Wasmer 4.0, инструментарий для создания приложений на базе WebAssembly

Доступен выпуск проекта Wasmer 4.0, развивающего runtime для выполнения модулей WebAssembly, который можно использовать для создания универсальных приложений, способных выполняться в разных операционных системах, а также для изолированного выполнения кода, не заслуживающего доверия. Код проекта написан на языке Rust и распространяется под лицензией MIT.

Возможность запуска одного приложения на разных платформах обеспечивается благодаря компиляции кода в низкоуровневый промежуточный код WebAssembly, который может запускаться в любых ОС или встраиваться в программы на других языках программирования. Программы представляют собой легковесные контейнеры, в которых выполняется псевдокод WebAssembly. Данные контейнеры не привязаны к операционной системе и могут включать код, изначально написанный на любом языке программирования. Для компиляции в WebAssembly может использоваться инструментарий Emscripten. Для трансляции WebAssembly в машинный код текущей платформы поддерживается подключение разных бэкендов компиляции (Singlepass, Cranelift, LLVM) и движков (задействование JIT или генерация машинного кода).

Приложения изолированы от основной системы в sandbox-окружении и имеют доступ только к заявленной функциональности (механизм безопасности на основе управления возможностями – для действий с каждым из ресурсов (файлы, каталоги, сокеты, системные вызовы и т.п.) приложению должны быть даны соответствующие полномочия). Управление доступом и взаимодействие с системой обеспечивается при помощи API WASI (WebAssembly System Interface), предоставляющем программные интерфейсы для работы с файлами, сокетами и другими функциями, предоставляемыми операционной системой.

Платформа позволяет добиться производительности выполнения приложений, близкой к выполнению родных сборок. При помощи Native Object Engine для WebAssembly-модуля можно сгенерировать машинный код (“wasmer compile –native” для генерации предкомпилированных объектных файлов .so, .dylib и .dll), для запуска которого требуется минимальный runtime, но сохраняются все возможности sandbox-изоляции. Возможна поставка предкомпилированных программ со встроенным Wasmer. Для создания надстроек и дополнений предлагаются Rust API и Wasm-C-API.

Для запуска WebAssembly-контейнера достаточно установить в системе runtime Wasmer, который поставляется без внешних зависимостей (“curl https://get.wasmer.io -sSfL | sh”), и запустить необходимый файл (“wasmer test.wasm”). Программы распространяются в форме обычных WebAssembly-модулей, для управления которыми можно использовать пакетный менеджер WAPM. Wasmer также доступен в форме библиотеки, которую можно использовать для встраивания кода WebAssembly в программы на языках Rust, С/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir и Java.

Основные новшества Wasmer 4.0:

  • Добавлена поддержка API WASIX, дополняющего интерфейс WASI средствами для полной совместимости с POSIX. При помощи WASIX в Wasmer могут запускаться приложения, использующие многопоточность, сетевые сокеты, ответвление дочерних процессов и другие расширенные возможности. Например, теперь можно скомпилировать в представление на WebAssembly такие приложения, как curl, bash, CPython и static-web-server, и запускать их с sandbox-изоляцией на любых платформах при помощи Wasmer.
  • Реализована новая архитектура runner-ов, позволяющая выполнять любые типы приложений на WebAssembly и расширять ABI без выпуска новых версий runtime. В настоящее время поддерживаются три runner-а: WASIX (поддержка ABI WASIX), Emscripten (запуска программ, скомпилированных в Emscripten) и WCGI (позволяет создавать CGI-скрипты на WebAssembly).
  • Интегрирована функциональность пакетного менеджера WAPM – все команды утилиты wapm для публикации и сопровождения пакетов теперь встроены в интерфейс командной строки wasmer, например, теперь можно выполнять команды “wasmer login”, “wasmer whoami” и “wasmer publish”.
  • Интегрирована поддержка Wasmer Edge, позволяющая взаимодействовать с Wasmer Edge напрямую через интерфейс командной строки wasmer. Например, для создания и размещения приложения в Wasmer Edge можно использовать команды “wasmer deploy” и “wasmer app create”.

Release. Ссылка here.