Simon Willison несколько лет экспериментировал с разными подходами к изолированному исполнению кода — и вот, по его словам, наконец получил решение с нужным набором свойств. Пакет micropython-wasm (статус alpha) запускает MicroPython-интерпретатор внутри WebAssembly через библиотеку wasmtime. Первый плагин на его основе — datasette-agent-micropython — уже интегрирован в Datasette Agent и работает в production-режиме автора.
Контекст
Willison — автор трёх активно используемых open-source проектов: Datasette (аналитический сервер поверх SQLite), LLM (CLI для языковых моделей) и sqlite-utils. Все три поддерживают плагины через Python и Pluggy. Проблема одна: плагинный код исполняется с полными правами процесса. Любой сторонний плагин может читать файлы, стучаться в сеть, уходить в бесконечный цикл и ронять всё приложение.
WebAssembly оказался правильным ответом — спецификация проектировалась именно для исполнения недоверенного кода, браузеры используют её уже почти десятилетие. Библиотека wasmtime (поддерживается командой Bytecode Alliance) имеет активные Python-биндинги с бинарными wheel'ами: устанавливается через pip без дополнительных шагов. MicroPython — компактная реализация Python 3 для микроконтроллеров — оказался идеальным кандидатом для компиляции в WASM. Альтернатива, Pyodide, умеет запускать Python через WASM, но только в браузере и Node.js — серверный Python не поддерживается.
Исследование провёл GPT-5.5 Pro, который нашёл нужный PR против MicroPython. Затем Codex Desktop построил прототип по research.md-документу — от идеи до рабочего proof of concept за одну сессию. Ключевой инженерный вызов — постоянное состояние интерпретатора между вызовами — решили через поток с очередью: MicroPython блокируется, ожидая следующего блока кода от host-функции, исполняет его через eval() и возвращает результат.
Аналитика
За этим проектом стоит паттерн, актуальный далеко за пределами одного open-source инструмента. Agentic системы 2026 года генерируют и исполняют код — это норма. Datasette Agent, позволяющий LLM запускать запросы и скрипты, уже существует. Без sandbox между LLM-output и реальной системой — это прямой путь к непреднамеренному или намеренному RCE. Willison проверил решение жёстко: запер GPT-5.5 внутри плагина с заданием сломать изоляцию. Пока sandbox держится.
Техническая архитектура минималистична и честна. 78 строк C, скомпилированных в 362 KB WASM-blob, распространяются вместе с пакетом — ноль внешних зависимостей для пользователя. Memory limits — нативная функция wasmtime. CPU limits — через концепцию «fuel»: wasmtime считает количество операций WebAssembly-вызова, Willison использует 20 млн units по умолчанию, признавая, что подбор правильного значения — ещё открытый вопрос. Host functions — механизм, через который хост-приложение избирательно открывает свои возможности песочнице — реализованы через те же 78 строк C.
Показателен сам процесс разработки: один человек с AI-ассистентами решил задачу, которая раньше требовала команды security-инженеров. Это не «вайб-кодинг ради хайпа» — Willison сам ставит alpha-статус и прямо говорит: не используйте это в высокорисковых контекстах без собственного аудита. Он открыто приглашает компании с профессиональными security-командами взять WASM-подход и довести до production-зрелости. Это честная позиция.
Кейсы применения в бизнесе
B2B SaaS стартап с плагинной или scripting-архитектурой. Если ваш продукт позволяет клиентам загружать Python-скрипты — трансформации данных, интеграции, автоматизации — WASM-sandbox убирает риск RCE без сложной инфраструктуры. Сценарий для команды в КР: ETL-платформа, где клиент пишет скрипт очистки данных. Вы принимаете код, исполняете его в MicroPython-сессии с ограничением по памяти и CPU, получаете результат — и не беспокоитесь о том, что чужой скрипт прочитает ваши .env-файлы.
Корпорация с legacy и AI-агентами. AI-агент, который генерирует код-трансформации поверх внутренних баз данных, должен быть отделён от production-систем. WASM-sandbox как слой между LLM-output и реальными данными снижает риск prompt injection с последующим code execution. Это особенно актуально для финтех и ретейла в Центральной Азии, где регулятор начинает смотреть на AI-системы внимательнее.
SMB и локальный бизнес. Если вы строите no-code/low-code инструмент для автоматизации и хотите дать пользователям возможность писать небольшие скрипты — вместо постоянного code review можно запускать код в sandbox. Даже alpha-версия micropython-wasm закрывает базовые сценарии: простые вычисления, форматирование данных, условная логика — без доступа к файловой системе сервера.
Кейсы в личной жизни
Разработчик, строящий CLI-инструменты или агентов. Если ваш проект принимает пользовательские скрипты или генерирует код через LLM и тут же исполняет его — micropython-wasm даёт готовую основу для безопасной сессии. Alpha, но уже пригодна для экспериментов и внутренних инструментов.
Контент-мейкер или фрилансер с AI-агентом для обработки данных. Если вы используете агента, который пишет и исполняет Python-скрипты для работы с вашими файлами — WASM-изоляция защищает вашу рабочую директорию от ошибок агента. Агент может ошибиться в логике, но не сможет случайно удалить файлы за пределами разрешённой зоны.
Студент или исследователь в области безопасности и WASM. micropython-wasm — отличный учебный объект: 78 строк C, Python-обёртка, wasmtime, MicroPython — весь стек открытый и компактный. Можно читать код, понимать, как работает host function mechanism, воспроизводить и ломать в контролируемой среде.
Как применить сегодня
- Установите пакет:
pip install micropython-wasm— и запустите первыйMicroPythonSessionпо примеру из документации. Убедитесь, что переменные сохраняются между вызовамиsession.run(). - Если используете Datasette — установите
datasette-agent-micropythonи включите изолированное исполнение кода в Datasette Agent. - Перед использованием в production изучите исходный C-код (78 строк) и задайте значение fuel под ваши задачи: для простых вычислений 20 млн units достаточно, для тяжёлых трансформаций — стоит измерить.
- Используйте wasmtime напрямую как базу, если MicroPython не подходит по синтаксису: любой язык, компилируемый в WASM, можно встроить по тому же паттерну.
- Следите за репозиторием: Willison открыто приглашает security-команды к тестированию и намерен развивать проект при наличии реального интереса от бизнеса.
«Мне хотелось бы, чтобы это убедило компании с профессиональными security-командами использовать Python в WebAssembly как подход к sandbox и открыть свои решения» — Simon Willison.