Для создания поставляемых в формате WebAssembly переносимых программ, которые можно выполнять вне браузера, предлагается использовать API WASI (WebAssembly System Interface), предоставляющий программные интерфейсы для прямого взаимодействия с операционной системой (POSIX API для работы с файлами, сокетами и т.п.). Отличительной особенностью модели выполнения приложений в формате WebAssembly является запуск в sandbox-окружении для изоляции от основной системы и применение механизма безопасности на основе управления возможностями — для действий с каждым из ресурсов (файлы, каталоги, сокеты и т.п.) приложению должны быть даны соответствующие полномочия (предоставляется только доступ к заявленной функциональности), пишет OpenNET.ru.
Для совместной разработки под крыло Bytecode Alliance переведено несколько связанных с WebAssembly проектов, ранее обособленно развиваемых компаниями-учредителями альянса/ Среди них:
- Wasmtime — runtime для выполнения WebAssembly-приложений с расширениями WASI как обычных обособленных приложений. Поддерживается как запуск байткода WebAssembly при помощи специальной утилиты командной строки, так и компоновка готовых исполняемых файлов (wasmtime встраивается в приложение как библиотека). Wasmtime имеет гибкую модульную структуру, которая позволяет масштабировать runtime для различных применений, например, можно сформировать урезанную версию для устройств с ограниченными ресурсами;
- Lucet — компилятор и runtime для выполнения программ в формате WebAssembly. Отличительной особенностью Lucet является применение вместо JIT полноценной упреждающей компиляции (AOT, ahead-of-time) в машинный код, пригодный для прямого исполнения. Проект развивался компанией Fastly и оптимизирован для потребления минимальных ресурсов и очень быстрого запуска новых экземпляров (Fastly применяет Lucet в движке облачных edge-вычислений, использующем WebAssembly для обработчиков, запускаемых на каждый запрос). В рамках совместного проекта компилятор Lucet планируется перевести на использование Wasmtime в качестве основы;
- WAMR (WebAssembly Micro Runtime) — ещё один runtime для выполнения WebAssembly, изначально разработанный компанией Intel для применения в устройствах интернета вещей. WAMR оптимизирован для минимального потребления ресурсов и может применяться на устройствах с небольшим объёмом оперативной памяти. Проект включает в себя интерпретатор и виртуальную машину для выполнения байткода WebAssembly, API (подмножество Libc) и инструментарий для динамического управления приложениями;
- Cranelift — генератор кода, транслирующий независимое от аппаратных архитектур промежуточное представление в исполняемый машинный код, оптимизированный для конкретных аппаратных платформ. Cranelift поддерживает распараллеливание компиляции функций для очень быстрой генерации результата, что позволяет использовать его для создания JIT-компиляторов (JIT на базе Cranelift используется в виртуальной машине Wasmtime);
- WASI common — обособленная реализация API WASI (WebAssembly System Interface) для организации взаимодействия с операционной системой.
WebAssembly во многом напоминает Asm.js, но отличается тем, что является бинарным форматом, не завязанным на JavaScript и позволяющим выполнять в браузере низкоуровневый промежуточный код, скомпилированный из различных языков программирования. В WebAssembly не требуется применение сборщика мусора, так как применяется явное управление памятью. Благодаря задействованию JIT для WebAssembly можно добиться уровня производительности близкого к нативному коду. Среди основных задач WebAssembly выделяется обеспечение переносимости, предсказуемость поведения и идентичности выполнения кода на разных платформах.