Запуск кода где угодно без боли и Docker

14 апр 2026
20,957
992
193
4 недели

Представьте ситуацию: вам нужно запустить Python-скрипт или небольшую утилиту на C++ в изолированном окружении. Обычно рука сама тянется к Docker. Но пока скачается базовый образ, пока соберется контейнер — проходит вечность, а итоговый образ весит сотни мегабайт. Кажется, мы привыкли стрелять из пушки по воробьям.

Я наткнулся на проект Wasmer, который предлагает альтернативный путь. Это среда выполнения для WebAssembly (Wasm), которая позволяет запускать код в сверхлегких контейнерах. Причем делать это можно буквально везде: от серверов и десктопа до браузера и даже внутри баз данных.

Что это такое на самом деле

Wasmer — это не просто очередной плеер для .wasm файлов. Это полноценный рантайм, написанный на Rust. Его главная фишка в том, что он превращает WebAssembly в универсальный бинарный формат, который работает со скоростью, близкой к нативной.

Wasmer logo

Если раньше 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 точно пригодится, если вы:

  1. Разрабатываете систему плагинов и ищете безопасный способ их запуска.
  2. Хотите распространять CLI-утилиты, не заставляя пользователей устанавливать рантаймы вроде Python или Node.js.
  3. Ищете способ запускать код на Edge-серверах с минимальными задержками на старт.

Конечно, Wasm пока не заменит Docker во всех задачах, особенно там, где нужен сложный сетевой стек или специфические драйверы. Но для легкой изоляции и кроссплатформенного запуска это, пожалуй, одно из лучших решений на сегодня.

Пощупать проект можно прямо в браузере на wasmer.sh, там полноценный терминал с поддержкой Wasm-команд.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.