Wasmer
- title
- Wasmer
- type
- toolbox
- summary
- WebAssembly runtime на Rust со сменными бэкендами компилятора и системным интерфейсом WASIX
- tags
- rust, webassembly, runtime, sandboxing, serverless
- language
- Rust
- license
- MIT
- created
- 2026-07-23
- updated
- 2026-07-23
- lang
- ru
- translation_of
- wasmer
- source_updated
- 2026-07-23
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
Wasmer - это самостоятельный webassembly runtime: CLI для запуска файлов .wasm, библиотека для встраивания в хост-программу и реестр пакетов, откуда CLI умеет их скачивать. Проект развивается с 2018 года, что делает его одним из старейших runtime'ов вне браузера; он распространяется под лицензией MIT, и за ним стоит компания с инвестициями YC. Коммерческий слой поверх открытого ядра - это платформа для развёртывания Wasm-приложений в edge-сети.
Главная страница wasmer.io почти целиком посвящена рекламе этой платформы - "новые технологии контейнеризации", "масштабируется без усилий", логотипы крупных корпораций - и говорит крайне мало о самом runtime'е. Ниже описан именно runtime.
Как устроен
Главное архитектурное решение - компилятор сделан в виде сменного backend'а, а не жёстко встроен в движок. Singlepass компилирует за один линейный проход ради максимально быстрого запуска и предсказуемого времени компиляции - именно это нужно, когда модуль приходит во время запроса и сразу после этого выбрасывается. Cranelift - промежуточный вариант. LLVM генерирует самый быстрый код ценой гораздо более долгой компиляции - для модулей, которые компилируются один раз и используются повторно. Скомпилированные артефакты можно сериализовать заранее (ahead of time), чтобы перенести затраты на компиляцию с момента загрузки на этап сборки.
Вторая составляющая - системный интерфейс. Стандартный WASI даёт Wasm-модулю урезанное подмножество POSIX - предварительно открытые директории, stdio, часы, генератор случайных чисел - и сознательно не пытается быть полноценной операционной системой. Wasmer поставляет WASIX, собственное расширение поверх WASI, куда добавлены потоки, полноценные сокеты Беркли и вызовы fork/exec. Именно это позволяет компилировать существующий серверный софт в Wasm практически без изменений. Но это нестандартное расширение: код, зависящий от WASIX, работает только в Wasmer и не запустится в runtime'ах, реализующих исключительно WASI.
Встраивание поддерживается для большого списка языков - нативно для Rust, а также для C/C++, Python, Go, JavaScript, PHP, Ruby и других через обвязки над общим C API. За счёт этого к одной и той же песочнице можно обращаться независимо от языка хост-приложения. JavaScript SDK умеет запускать программы WASIX прямо в браузере - именно так работает демо-оболочка wasmer.sh.
# run a module directly
wasmer run ./program.wasm --dir=. -- --flag arg
# run a published package from the registry
wasmer run python/python -- -c "print(1+1)"
# compile ahead of time with a chosen backend
wasmer compile ./program.wasm --llvm -o program.wasmu
Где уместен
По сравнению с wazero компромисс понятен: wazero написан на чистом Go без CGO, поэтому его встраивание не усложняет сборку, но это интерпретатор с простым компилятором без уровня оптимизаций LLVM. Wasmer быстрее на пределе возможностей и поддерживает WASIX, однако его встраивание в Go-программу требует линковки нативной библиотеки и лишает простой кросс-компиляции. В сравнении с Wasmtime (runtime от Bytecode Alliance) отличия Wasmer - это архитектура с несколькими backend'ами, WASIX и широкий выбор языковых биндингов. Wasmtime остаётся более консервативным выбором, если важнее строгое следование стандартам.
Ограничения
Главное из них - WASIX. Он решает реальную проблему (стандартный WASI слишком беден для портирования существующих программ), но делает это в обход процесса стандартизации. Поэтому его использование - это осознанный отказ от переносимости, а не бесплатная возможность. Архитектура со сменными backend'ами также означает, что итоговая производительность зависит от выбранного backend'а и от того, была ли компиляция выполнена заранее, а маркетинговые замеры редко уточняют эти детали.
Runtime распространяется с открытым исходным кодом, тогда как платформа развёртывания, реестр и тарифные планы - это отдельные вещи, границы между которыми сайт пытается размыть. Тем, кто оценивает Wasmer для встраивания, стоит изучать репозиторий, а не сайт.
Репозиторий: github.com/wasmerio/wasmer - ~20 900 звёзд, MIT, Rust.