Переносимость обеспечивается благодаря компиляции кода приложения в низкоуровневый промежуточный код WebAssembly, который может запускаться в любых ОС или встраиваться в программы на других языках программирования. Программы представляют собой легковесные контейнеры, в которых выполняется псевдокод WebAssembly. Данные контейнеры не привязаны к операционной системе и могут включать приложения, изначально написанные на любом языке программировании. Для компиляции в WebAssembly может использоваться инструментарий Emscripten. Для трансляции WebAssembly в машинный код текущей платформы подключаются разные фреймворки, такие как LLVM и генератор кода Cranelift.
Управление доступом и взаимодействие с системой обеспечивается при помощи API WASI (WebAssembly System Interface), предоставляющем программные интерфейсы для работы с файлами, сокетами и другими функциями, предоставляемыми операционной системой. Приложения изолированы от основной системы в sandbox-окружении и имеют доступ только к заявленной функциональности (механизм безопасности на основе управления возможностями — для действий с каждым из ресурсов (файлы, каталоги, сокеты, системные вызовы и т.п.) приложению должны быть даны соответствующие полномочия).
Для запуска 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 1.0 называется:
- Высокая производительность выполняемых приложений, близкая к выполнению родных сборок, и высокая скорость компиляции.
- Расширяемая архитектура с возможностью подключения разных бэкендов компиляции (Singlepass, Cranelift, LLVM) и движков (задействование JIT или генерация машинного кода).
- Native Object Engine, позволяющий генерировать для WebAssembly-модуля машинный код для заданных систем («wasmer compile —native» для генерации предкомпилированных объектных файлов .so, .dylib и .dll). Для запуска предкомпилированного кода требуется минимальный runtime, но сохраняются все возможности sandbox-изоляции.
- Headless-режим для поставки предкомпилированных программ со встроенным Wasmer.
- Поддержка кросс-компиляции, например, позволяющая на системе x86_64 генерировать машинный код для архитектуры Aarch64.
- Простой API для создания надстроек и дополнений, не требующий изучения расширенных концепций WebAssembly. Поддержка Wasm-C-API.
- Средства для отладки и обработки ошибок.
Источник: http://www.opennet.ru/opennews/art.shtml?num=54363