Mozilla, Fastly, Intel и Red Hat продвигают WebAssembly, как платформу для универсального применения

Компании Mozilla, Fastly, Intel и Red Hat объединили свои усилия в развитии технологий, способствующих превращению WebAssembly в универсальную платформу для безопасного выполнения кода в любых инфраструктурах, операционных системах и устройствах. Для совместной разработки runtime и компиляторов, позволяющих применять WebAssembly не только в web-браузерах, образована организация Bytecode Alliance.

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

Для совместной разработки под крыло Bytecode Alliance переведено несколько связанных с WebAssembly проектов, ранее обособленно развиваемых компаниями-учредителями альянса. На основе переданных проектов планируется подготовить унифицированный инструментарий, подходящий для выполнения приложений, упакованных в форме WebAssembly, на различных архитектурах и устройствах. В Bytecode Alliance продолжат своё развитие следующие проекты:

  • 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) для организации взаимодействия с операционной системой;
  • cargo-wasi — модуль к пакетному менеджеру Cargo, реализующий команду для компиляции кода на языке Rust в байткод WebAssembly с задействованием интерфейса WASI для использования WebAssembly вне браузера;
  • wat и wasmparser — парсеры для разбора текстового (WAT, WAST) и бинарного представлений байткода WebAssembly.

Напомним, WebAssembly во многом напоминает Asm.js, но отличается тем, что является бинарным форматом, не завязанным на JavaScript и позволяющим выполнять в браузере низкоуровневый промежуточный код, скомпилированный из различных языков программирования. В WebAssembly не требуется применение сборщика мусора, так как применяется явное управление памятью. Благодаря задействованию JIT для WebAssembly можно добиться уровня производительности близкого к нативному коду. Среди основных задач WebAssembly выделяется обеспечение переносимости, предсказуемость поведения и идентичности выполнения кода на разных платформах.

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

©  OpenNet