Найти тему
Проект OpenNet

Опубликован 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". Wasmer Edge представляет собой децентрализованную платформу для организации бессерверных вычислений, позволяющую запускать приложения на других хостах в Edge-сети. Новая платформа сочетает в себе доступность Cloudflare Workers, простоту Heroku и функциональность AWS Lambda. Платформа может масштабироваться от одного сервера до больших распределённых кластеров. По сравнению с Cloudflare Workers и AWS Lambda в запускаемых в Wasmer Edge приложениях можно обрабатывать запросы для произвольных TCP-сервисов, запускать любые HTTP-приложения, запускать приложения в браузере и на смартфоне.