Запуск кода где угодно без боли и Docker
Представьте ситуацию: вам нужно запустить Python-скрипт или небольшую утилиту на C++ в изолированном окружении. Обычно рука сама тянется к Docker. Но пока скачается базовый образ, пока соберется контейнер — проходит вечность, а итоговый образ весит сотни мегабайт. Кажется, мы привыкли стрелять из пушки по воробьям.
Я наткнулся на проект Wasmer, который предлагает альтернативный путь. Это среда выполнения для WebAssembly (Wasm), которая позволяет запускать код в сверхлегких контейнерах. Причем делать это можно буквально везде: от серверов и десктопа до браузера и даже внутри баз данных.
Что это такое на самом деле
Wasmer — это не просто очередной плеер для .wasm файлов. Это полноценный рантайм, написанный на Rust. Его главная фишка в том, что он превращает WebAssembly в универсальный бинарный формат, который работает со скоростью, близкой к нативной.
Если раньше Wasm ассоциировался только с браузерными играми или тяжелыми вычислениями в вебе, то Wasmer выводит его "наружу". Теперь это безопасная песочница для серверного кода, плагинов или CLI-инструментов.
Чем он хорош в деле
Первое, что бросается в глаза — это безопасность. По умолчанию у кода внутри Wasmer нет доступа ни к файлам, ни к сети, ни к переменным окружения. Вы сами решаете, что "прокинуть" внутрь. Это идеальный вариант для запуска чужого, потенциально опасного кода.
Интересно реализована поддержка стандартов. Из коробки работают WASI (WebAssembly System Interface) и его расширенная версия WASIX. Это значит, что программы могут общаться с операционной системой почти так же, как обычные приложения.
Для тех, кто не хочет возиться с компиляцией, есть готовые пакеты. Попробуйте сами, если установлен curl:
curl https://get.wasmer.io -sSfL | sh
wasmer run cowsay "Привет, Хабр!"
Программа скачается из реестра и запустится мгновенно. Никаких зависимостей в системе не останется.
Встраивание в свои проекты
Самая полезная часть для разработчика — это SDK. Wasmer можно использовать как библиотеку внутри вашего основного приложения. Список поддерживаемых языков огромный: Rust, Python, Go, JS, C++, PHP и даже Postgres.
Зачем это нужно? Например, вы пишете платформу, где пользователи могут загружать свои плагины. Вместо того чтобы мучиться с кастомными DSL или рисковать безопасностью, выполняя скрипты напрямую, вы просто встраиваете Wasmer. Пользователь пишет плагин на чем угодно (хоть на Rust, хоть на Zig), компилирует в Wasm, а ваше приложение запускает его в изолированной среде.
| Язык | Пакет |
| --- | --- |
| Rust | wasmer crate |
| Python | wasmer PyPI |
| Go | wasmer-go |
| JS | @wasmerio NPM |
Как это работает под капотом
Технически Wasmer — это модульная система. Он может использовать разные компиляторы для генерации машинного кода: Cranelift, LLVM или Singlepass. Если вам нужна максимальная скорость выполнения, выбираете LLVM. Если важна скорость самой компиляции (например, для запуска коротких скриптов), подойдет Cranelift.
Проект активно развивает свою экосистему. У них есть Wasmer Edge для деплоя приложений и собственный реестр пакетов. Это напоминает NPM, но для бинарных файлов, которые запустятся на любой архитектуре — хоть x86, хоть ARM.
Кому стоит попробовать
Wasmer точно пригодится, если вы:
- Разрабатываете систему плагинов и ищете безопасный способ их запуска.
- Хотите распространять CLI-утилиты, не заставляя пользователей устанавливать рантаймы вроде Python или Node.js.
- Ищете способ запускать код на Edge-серверах с минимальными задержками на старт.
Конечно, Wasm пока не заменит Docker во всех задачах, особенно там, где нужен сложный сетевой стек или специфические драйверы. Но для легкой изоляции и кроссплатформенного запуска это, пожалуй, одно из лучших решений на сегодня.
Пощупать проект можно прямо в браузере на wasmer.sh, там полноценный терминал с поддержкой Wasm-команд.
