Опубликован 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».



Источник: http://www.opennet.ru/opennews/art.shtml? num=59350

© OpenNet