Этот выбор не является предпочтением фасада. В этой статье сравниваются две среды выполнения с точки зрения того, что на самом деле проверяется: управление, компиляторы, стандарт WASI, модель безопасности, а затем подробно описывается реализация Wasmtime, которую Aurabase использует в рабочей среде, учет топлива, прерывание эпохи, ограничения памяти, без предоставления неизмеренных цифр холодного запуска.
Самое необходимое
- Wasmtime: проект Bytecode Alliance, написанный на Rust, производственный компилятор Cranelift, лицензия Apache-2.0 с исключением LLVM.
- Wasmer: среда выполнения, разработанная Wasmer Inc., три взаимозаменяемых компилятора (Singlepass, Cranelift, LLVM), лицензия MIT.
- Aurabase объявляет
wasmtime = { version = "43", features = ["async", "cranelift"] }как фактическую производственную зависимость вaura-functions, проверенную вCargo.toml. - В собственном режиме WASM по умолчанию применяется ограничение памяти в 64 МБ, бюджет топлива в один миллиард единиц и тайм-аут в 10 секунд, все три регулируются переменной среды.
- Этот режим WASM сосуществует с режимом по умолчанию для функций Aurabase Edge (среда выполнения Deno): это второй путь выполнения, а не путь по умолчанию.
Две среды выполнения, одна и та же база WebAssembly
WebAssembly уже давно определил формат времени выполнения для браузера. В течение нескольких лет он также использовался для выполнения изолированного кода на стороне сервера или на периферии: байт-код, скомпилированный один раз, переносимый на любую хост-машину, изолированный по умолчанию без контейнера или полной виртуальной машины. Wasmtime и Wasmer выносят это расширение из браузера, оба написаны на Rust и оба способны выполнять один и тот же файл .wasm.
Wasmtime — это проект, организованный Bytecode Alliance, организацией, которая управляет несколькими компонентами серверной экосистемы WebAssembly, включая компилятор Cranelift. Wasmer разработан компанией Wasmer Inc., которая публикует среду выполнения с открытым исходным кодом и продвигает дополнительные услуги вокруг нее (периферийное развертывание, инструменты). Две разные модели управления, никакого суждения о качестве кода, созданного той или другой.
В оставшейся части этой статьи сравниваются четыре проверяемых поля: лицензирование и управление, доступные компиляторы, стандарт WASI и модель компонентов, модель безопасности, а затем объясняется, с помощью вспомогательного кода, почему Rust ядро Aurabase запускает Wasmtime в своем движке Edge Functions.
Мультивендорный фонд против коммерческого издателя
Wasmtime выпускается под лицензией Apache-2.0 за исключением LLVM — разрешительной лицензии, распространенной в экосистеме компиляторов. Его управление соответствует модели Bytecode Alliance: в проект вносят свой вклад несколько организаций, ни одна из них не владеет им в одиночку.
Программа Wasmer публикуется под лицензией MIT, еще более либеральной на бумаге, но ее техническое руководство по-прежнему сосредоточено у одного издателя, Wasmer Inc. Само по себе это не является ошибкой: многие успешные проекты с открытым исходным кодом следуют этой модели. Это просто другой профиль риска, если ваша организация ценит распределенное управление между несколькими организациями.
Один бэкэнд против трех: Cranelift, Singlepass, LLVM
Wasmtime компилируется с помощью Cranelift, генератора кода, также разработанного Bytecode Alliance. В крейте также документирован дополнительный компилятор Winch, предназначенный для сокращения времени компиляции по сравнению с Cranelift в случаях, чувствительных к запуску. Cargo.toml изaura-функций только активирует функцию cranelift: именно этот компилятор и только он обрабатывает каждый модуль WASM, загруженный в производство.
Васмер идет противоположным путем: три взаимозаменяемых серверных модуля. Singlepass компилируется за один проход, почти мгновенно, за счет менее оптимизированного машинного кода. Cranelift предлагает сбалансированный компромисс. LLVM стремится к максимально возможной производительности выполнения и максимальному времени компиляции из трех. Единая среда выполнения, три профиля компрометации, выбранные во время настройки.
Предварительная версия WASI 2 и модель компонентов
WASI, системный интерфейс WebAssembly, стандартизирует доступ к файлам, часам и сети из модуля WASM независимо от браузера. Его последняя версия, WASI Preview 2, основана на модели компонентов: механизме создания модулей, написанных на разных языках, с общими типизированными интерфейсами, а не двоичным форматом, специфичным для каждой среды выполнения. И Wasmtime, и Wasmer работают над внедрением этого стандарта, каждый в своем темпе.
Васмер дополнительно документирует WASIX, расширение, целью которого является охват примитивов POSIX, которые еще не охватываются официальным стандартом WASI, таких как потоки или более сложные сетевые сокеты. Это не стандарт, поддерживаемый рабочей группой WebAssembly, а расширение, специфичное для экосистемы Wasmer.
Собственный режим wasm Aurabase, проверенный в wasm/mod.rs, в настоящее время не использует ни WASI Preview 2, ни модель компонентов. Это собственный минимальный ABI хоста, четыре функции, доступные гостевому модулю, а не полный стандарт. Cargo.toml также не активирует функцию wasi в ящике wasmtime.
Изоляция памяти и время: топливо, эпоха, ограничения
Обе среды выполнения изолируют каждый модуль в собственной линейной памяти без прямого доступа к хост-системе за пределами явно импортированных функций. Это основа модели безопасности WebAssembly, общей для обоих проектов.
Wasmtime также предоставляет собственный API для записи выполнения, fuel: каждая инструкция использует заранее фиксированный бюджет, и выполнение прекращается должным образом, как только этот бюджет исчерпан. Второй API, прерывание epoch, позволяет вам установить тайм-аут, не блокируя движок во время ожидания. Васмер документирует свою собственную механику измерения и ограничений памяти для каждого экземпляра; В этой статье они не проверялись в стороннем репозитории, поэтому не разбивают их по цифрам.
Это именно то, что обеспечивает сервис aura-functions Aurabase, подробно описанный в следующем разделе с фактическим исходным кодом.
Wasmtime проверен в коде, а не заявленном предпочтении
Служба aura-functions объявляет wasmtime как производственную зависимость без комментариев по деактивации или конфигурации зависимости от разработки. Ни в одном файле в репозитории, ни в файле Cargo.toml, ни в файле .rs, Васмер не упоминается.
Код инициализации явно активирует подачу топлива и прерывание по эпохам, а затем ограничивает память вызовом с помощью StoreLimits:
Все три ограничения настраиваются для каждой переменной среды, при этом значения по умолчанию проверяются в config/mod.rs: WASM_MAX_MEMORY_MB — 64, WASM_TIMEOUT_SECS — 10, WASM_MAX_FUEL — один миллиард единиц. Тайм-аут запускается в фоновом режиме: tokio::spawn ожидает настроенную продолжительность, затем увеличивает эпоху механизма, не блокируя текущее выполнение во время ожидания.
ABI, предоставляемый гостевым модулям, намеренно остается минимальным: четыре функции хоста: aura.log, aura.get_input, aura.set_output и aura.get_env, зарегистрированные через linker.func_wrap. Это не модель компонентов и не WASI Preview 2: это внутренний контракт, более узкий, предназначенный для одноразового использования, выполняющий пограничную функцию HTTP и восстанавливающий ответ JSON.
Этот режим wasm представляет собой выбор для каждой функции, а не глобальный переключатель. Обзор архитектуры Aurabase подробно описывает другой путь, режим denoпо умолчанию, который выполняет JavaScript/TypeScript в отдельной службе. Оба сосуществуют в одной службе aura-functions.
Здесь проверяется фактическая реализация Wasmtime и ее ограничения ресурсов по умолчанию. Цифры холодного запуска не указаны: см. наш специальный анализ холодного запуска WebAssembly, чтобы узнать, что можно измерить, а что еще нет.
Васмтайм и Васмер бок о бок
| Управление | Bytecode Alliance, мультиорганизация | Wasmer Inc., коммерческое издательство |
|---|---|---|
| Лицензия | Apache-2.0 с исключением LLVM | Массачусетский технологический институт |
| Язык реализации | Ржавчина | Ржавчина |
| Составители | Cranelift (лебедка опционально, не активирована на Aurabase) | Одноходовой, Cranelift, LLVM по вашему выбору |
| стандарт ВАСИ | Предварительная версия WASI 2 + модель компонента | WASI Preview 2 + WASIX (расширение, специфичное для Wasmer) |
| Беговые кадры | Топливо + прерывание по эпохе (проверенный собственный API) | Механизмы, специфичные для Васмера, здесь не проверены. |
| Используется Aurabase | Да, аура-функции, закреплена версия 43 | Нет, никакой зависимости, прямой или транзитивной |
Источники: Cargo.toml и wasm/mod.rs из репозитория Aurabase, проверено непосредственно 24 августа 2026 г. Общие характеристики Wasmtime и Wasmer взяты из общедоступной документации каждого проекта; в этой таблице не публикуются контрольные показатели третьих сторон.
Кому что следует выбрать
Вы запускаете новую среду выполнения Edge без существующих зависимостей. Wasmtime, поддерживаемый мультивендорным фондом, снижает риск зависимости будущего проекта от одного издателя.
У вас очень частые и кратковременные холодные запуски. Серверная часть Singlepass компании Wasmer напрямую отвечает на эту потребность, обеспечивая почти мгновенную компиляцию за счет менее оптимизированного машинного кода.
Вам нужны примитивы POSIX, выходящие за рамки текущего стандарта WASI. WASIX, расширение Wasmer, охватывает потоки и расширенные сокеты, которые еще не охватываются только WASI Preview 2.
Вам нужен собственный API для видеозаписи и тайм-аута без стороннего промежуточного программного обеспечения. Wasmtime предоставляет fuel и epoch непосредственно в ящике, что именно позволяет aura-functions в Aurabase.