Доступен Wasmer 5.0, инструментарий для создания приложений на базе WebAssembly

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

Возможность запуска одного приложения на разных платформах реализована через компиляцию в низкоуровневый промежуточный код WebAssembly, который может запускаться в любых ОС или встраиваться в программы на других языках программирования. Программы представляют собой легковесные контейнеры, в которых выполняется псевдокод WebAssembly. Данные контейнеры не привязаны к операционной системе и могут включать код, изначально написанный на любом языке программирования.

Для для выполнения промежуточного кода WebAssembly или его трансляции в машинный код целевой платформы предлагаются разные бэкенды:

  • Бэкенд на базе компилятора Singlepass, оптимальный для использования в блокчейнах.
  • Бэкенд на базе генератора кода Cranelift, оптимальный для использования в процессе разработки.
  • Бэкенд на базе компилятора LLVM, оптимальный для использования в рабочих внедрениях.
  • Бэкенд для запуска в web-браузере.
  • Бэкенд на базе JavaScript-движка JavascriptCore, оптимальный для использования на платформе macOS.
  • Бэкенд на базе JavaScript-движка V8, оптимальный для приложений для платформ iOS и Android.
  • Бэкенд на базе интерпретатора Wasmi, оптимальный для блокчейнов и Rust-проектов, не использующих стандартную библиотеку (nostd).
  • Бэкенд на базе runtime WAMR, оптимальный для платфлормы iOS

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

Платформа позволяет добиться производительности выполнения приложений, близкой к выполнению родных сборок. При помощи Native Object Engine для WebAssembly-модуля можно сгенерировать машинный код, для запуска которого требуется минимальный 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 5.0:

  • Реализована возможность использования интерпретаторов WebAssembly.
  • Добавлен экспериментальный бэкенд на базе легковесного интерпретатора Wasmi, позволяющего выполнять промежуточный код WebAssembly в окружениях с ограниченными ресурсами.
  • Добавлен экспериментальный бэкенд на базе WebAssembly runtime WAMR (WebAssembly Micro Runtime), оптимизированного для минимального потребления ресурсов и пригодного для применения на устройствах с небольшим объёмом оперативной памяти.
  • Добавлен экспериментальный бэкенд на базе JavaScript-движка v8, используемого в браузерах на кодовой базе Chromium. Основным достоинством применения бэкенда на базе V8 называется возможность использования встроенного в данный движок отладчика и инструментария для web-разработчиков, а также доступность в V8 расширенной функциональности WebAssembly, такой как обработка исключений и сборка мусора.
  • В бэкенд, использующий LLVM, добавлена экспериментальная поддержка архитектуры Loongarch64.
  • Добавлена поддержка платформы iOS, доступная при использовании бэкендов WAMR, Wasmi и V8.
  • Прекращена поддержка компилятора Emscripten.
  • Обновлены зависимости, среди которых LLVM 18, генератор кода Cranelift 27 и фреймворк rkyv 0.8.
  • Проведена оптимизация производительности. Например, при выполнении операций десериализации модулей наблюдается прирост производительности до 50%.













Release. Ссылка here.