PRODPlataforma BaaS europeia soberanaAbra o painel →

Engenharia · 8 minutos de leitura

Wasmtime vs Wasmer para produção Edge Functions

Affane Daylami · Fondateur · 25 de junho de 2026

Voltar ao blog

Wasmtime e Wasmer são os dois tempos de execução WebAssembly mais comumente usados para executar código fora do navegador, na borda ou no lado do servidor. Aurabase decidiu: o modo de execução WASM nativo de suas Edge Functions incorpora Wasmtime, não Wasmer, verificado diretamente no Cargo.toml do serviço em questão.

Este texto em inglês foi gerado automaticamente a partir do original em francês e ainda não foi revisado.
Esta página foi traduzida automaticamente. A versão em inglês é oficial.

Esta escolha não é uma preferência de fachada. Este artigo compara os dois tempos de execução sobre o que é realmente verificado, governança, compiladores, padrão WASI, modelo de segurança e, em seguida, detalha a implementação Wasmtime que o Aurabase executa em produção, medição de combustível, interrupção de época, limites de memória, sem fornecer um valor não medido de inicialização a frio.

O essencial

  • Wasmtime: Projeto Bytecode Alliance, escrito em Rust, compilador de produção Cranelift, licença Apache-2.0 com exceção LLVM.
  • Wasmer: tempo de execução desenvolvido pela Wasmer Inc., três compiladores intercambiáveis (Singlepass, Cranelift, LLVM), licença MIT.
  • Aurabase declara wasmtime = { version = "43", features = ["async", "cranelift"] } como uma dependência de produção real em aura-functions, verificada em Cargo.toml.
  • O modo WASM nativo aplica por padrão um limite de memória de 64 MB, um orçamento de combustível de um bilhão de unidades e um tempo limite de 10 segundos, todos os três ajustáveis por variável de ambiente.
  • Este modo WASM coexiste com o modo padrão do Aurabase Edge Functions (tempo de execução Deno): é um segundo caminho de execução, não o caminho padrão.
#
Contexto

Dois tempos de execução, a mesma base WebAssembly

O WebAssembly há muito designa um formato de tempo de execução para o navegador. Por vários anos, ele também tem sido usado para executar código em sandbox no lado do servidor ou na borda: um bytecode compilado uma vez, portátil em qualquer máquina host, isolado por padrão sem contêiner ou máquina virtual completa. Wasmtime e Wasmer carregam esta extensão para fora do navegador, ambos escritos em Rust, ambos capazes de executar o mesmo arquivo .wasm.

Wasmtime é um projeto hospedado pela Bytecode Alliance, organização que gerencia diversos componentes do ecossistema de servidores WebAssembly, incluindo o compilador Cranelift. Wasmer é desenvolvido pela Wasmer Inc., uma empresa que publica o tempo de execução como código aberto enquanto comercializa serviços complementares em torno dele (implantação de borda, ferramentas). Dois modelos de governação diferentes, sem julgamento sobre a qualidade do código produzido por um ou outro.

O restante deste artigo compara quatro campos verificáveis, licenciamento e governança, compiladores disponíveis, padrão WASI e modelo de componente, modelo de segurança e, em seguida, explica, com código de suporte, por que Rust core do Aurabase executa Wasmtime em seu mecanismo Edge Functions.

#
Governança e licenciamento

Fundação de vários fornecedores versus editora comercial

Wasmtime é lançado sob a licença Apache-2.0 com exceção LLVM, uma licença permissiva comum no ecossistema de compiladores. Sua governança segue o modelo da Bytecode Alliance: diversas organizações contribuem para o projeto, nenhuma é dona sozinha.

Wasmer é publicado sob a licença do MIT, ainda mais permissiva no papel, mas sua direção técnica permanece concentrada em um único editor, Wasmer Inc. Isso não é uma falha em si: muitos projetos de código aberto bem-sucedidos seguem esse modelo. É simplesmente um perfil de risco diferente se a sua organização valoriza a governança distribuída entre múltiplas entidades.

#
Compiladores

Um back-end versus três: Cranelift, Singlepass, LLVM

Wasmtime compila em produção via Cranelift, um gerador de código também da Bytecode Alliance. A caixa também documenta um compilador adicional, Winch, projetado para reduzir o tempo de compilação em comparação com o Cranelift em casos sensíveis à inicialização. O Cargo.toml deaura-functions apenas ativa o recurso cranelift: é este compilador, e somente ele, que processa cada módulo WASM carregado em produção.

Wasmer segue o caminho oposto: três back-ends intercambiáveis. Singlepass compila em uma única passagem, quase instantaneamente, ao custo de um código de máquina menos otimizado. Cranelift oferece um compromisso equilibrado. O LLVM visa o melhor rendimento de execução possível, com o maior tempo de compilação dos três. Um único tempo de execução, três perfis de compromisso escolhidos durante a configuração.

#
Padrões

Visualização 2 do WASI e modelo de componente

WASI, WebAssembly System Interface, padroniza o acesso a arquivos, relógios e à rede a partir de um módulo WASM, sem depender do navegador. Sua versão mais recente, WASI Preview 2, é baseada no Modelo de Componentes: um mecanismo para compor módulos escritos em diferentes linguagens, com interfaces digitadas compartilhadas em vez de um formato binário específico para cada tempo de execução. Tanto Wasmtime quanto Wasmer estão trabalhando na implementação deste padrão, cada um em seu próprio ritmo.

Wasmer documenta adicionalmente o WASIX, uma extensão que visa cobrir primitivas POSIX que o padrão WASI oficial ainda não cobre, como threads ou soquetes de rede mais abrangentes. Este não é um padrão suportado pelo grupo de trabalho WebAssembly, mas uma extensão específica do ecossistema Wasmer.

O que o modo Aurabase WASM não usa

O modo nativo wasm do Aurabase, verificado em wasm/mod.rs, atualmente não usa WASI Preview 2 nem o Modelo de Componente. Esta é uma ABI de host mínima desenvolvida internamente, quatro funções expostas ao módulo convidado, não o padrão completo. O Cargo.toml também não ativa o recurso wasi na caixa wasmtime.

#
Segurança

Isolamento e tempo de memória: combustível, época, limites

Ambos os tempos de execução isolam cada módulo em sua própria memória linear, sem acesso direto ao sistema host fora das funções importadas explicitamente. Esta é a base do modelo de segurança WebAssembly, comum aos dois projetos.

Wasmtime também expõe uma API de filmagem de execução nativa, fuel: cada instrução consome um orçamento fixado antecipadamente e a execução é interrompida corretamente quando esse orçamento se esgota. Uma segunda API, a interrupção epoch, permite impor um tempo limite sem bloquear o mecanismo enquanto espera. Wasmer documenta sua própria mecânica de medição e limites de memória por instância; Este artigo não os verificou em um repositório de terceiros, portanto não os divide figura por figura.

Isso é exatamente o que o serviço aura-functions do Aurabase permite, detalhado na próxima seção com o código-fonte real.

#
A escolha da Aurabase

Wasmtime verificou o código, não uma preferência declarada

O serviço aura-functions declara wasmtime como uma dependência de produção, sem comentários de desativação ou configuração de dependência de desenvolvimento. Nenhum arquivo no repositório, nem Cargo.toml nem .rs, menciona Wasmer.

Cargo.tomltoml
# Tempo de execução WASM
wasmtime = { version = "43", features = ["async", "cranelift"] }

O código de inicialização ativa explicitamente o combustível e a interrupção por época e, em seguida, limita a memória por invocação com StoreLimits:

wasm/mod.rsrust
let mut cfg = Config::new();
cfg.consume_fuel(true);
cfg.epoch_interruption(true);
let engine = Engine::new(&cfg)?;

// por invocação:
let limits = StoreLimitsBuilder::new()
    .memory_size(self.max_memory_mb as usize * 1024 * 1024)
    .build();
store.set_fuel(self.max_fuel)?;
store.epoch_deadline_async_yield_and_update(1);

Todos os três limites são configuráveis por variável de ambiente, com valores padrão verificados em config/mod.rs: WASM_MAX_MEMORY_MB em 64, WASM_TIMEOUT_SECS em 10, WASM_MAX_FUEL em um bilhão de unidades. O timeout é acionado em segundo plano: um tokio::spawn aguarda a duração configurada e depois incrementa a época do mecanismo, sem bloquear a execução atual enquanto espera.

A ABI exposta aos módulos convidados permanece intencionalmente mínima: quatro funções de host, aura.log, aura.get_input, aura.set_output e aura.get_env, registradas via linker.func_wrap. Não é o Component Model, nem o WASI Preview 2: é um contrato interno, mais restrito, projetado para uso único, executando uma função de borda HTTP e recuperando sua resposta JSON.

Este modo wasm é uma escolha por função, não uma alternância global. A visão geral da arquitetura Aurabase detalha o outro caminho, o modo padrão deno, que executa JavaScript/TypeScript em um serviço separado. Ambos coexistem no mesmo serviço aura-functions.

Objetivo verificado vs. produto

O que é verificado aqui é a implementação real do Wasmtime e seus limites de recursos padrão. Nenhum número de inicialização a frio é declarado: consulte nossa análise dedicada da inicialização a frio do WebAssembly para saber o que é mensurável e o que ainda não é.

#
Visão geral

Wasmtime e Wasmer, lado a lado

GovernançaBytecode Alliance, multiorganizaçãoWasmer Inc., editora comercial
LicençaApache-2.0 com exceção LLVMMIT
Linguagem de implementaçãoFerrugemFerrugem
CompiladoresCranelift (guincho opcional, não ativado na Aurabase)Singlepass, Cranelift, LLVM de sua escolha
Padrão WASIVisualização WASI 2 + Modelo de ComponenteWASI Preview 2 + WASIX (extensão específica para Wasmer)
Filmagem em execuçãoCombustível + interrupção por época (API nativa verificada)Mecanismos específicos de Wasmer, não verificados aqui
Usado por AurabaseSim, funções de aura, versão 43 fixadaNão, sem dependência, direta ou transitiva

Fontes: Cargo.toml e wasm/mod.rs do repositório Aurabase, verificadas diretamente em 24 de agosto de 2026. Características gerais do Wasmtime e do Wasmer retiradas da documentação pública de cada projeto; nenhum valor de referência de terceiros é republicado nesta tabela.

#
Decisão

Quem deve escolher o quê

Você inicia um novo tempo de execução de borda, sem dependências existentes. Wasmtime, apoiado por uma base de vários fornecedores, reduz o risco de depender de um único editor para o futuro do projeto.

Você tem partidas a frio muito frequentes e de curta duração. O backend Singlepass do Wasmer responde diretamente a essa necessidade, compilação quase instantânea, ao custo de código de máquina menos otimizado.

Você precisa de primitivos POSIX além do padrão WASI atual. WASIX, a extensão Wasmer, cobre threads e soquetes estendidos que o WASI Preview 2 sozinho ainda não cobre.

Você deseja uma API nativa de filmagem e tempo limite, sem middleware de terceiros. Wasmtime expõe fuel e epoch diretamente na caixa, exatamente o que aura-functions permite no Aurabase.

#
Perguntas frequentes

Perguntas frequentes

O Wasmtime é mais rápido que o Wasmer?+
Nenhum número comparativo de desempenho é declarado aqui voluntariamente. Os dois tempos de execução expõem compiladores diferentes (Cranelift para Wasmtime; a escolha de Singlepass, Cranelift ou LLVM para Wasmer), que respondem a compensações distintas entre velocidade de compilação e velocidade de execução. Veja nossa análise dedicada da inicialização a frio do WebAssembly para processamento criptografado e de origem.
Podemos usar Wasmtime e Wasmer no mesmo projeto?+
Tecnicamente sim, já que ambos consomem o mesmo formato .wasm. Mas isso duplica a área de integração, duas APIs de host, dois modelos de configuração, sem nenhum benefício líquido para a maioria das equipes. Aurabase envia apenas um, verificado no Cargo.toml do serviço aura-functions.
Todas as funções do Aurabase Edge são executadas no Wasmtime?+
O modo padrão do Aurabase Edge Functions executa JavaScript/TypeScript por meio de um serviço Deno separado. O modo Wasm, desenvolvido pelo Wasmtime, é um segundo caminho de execução, escolhido função por função, não o caminho padrão.
O que o modelo de componente WebAssembly realmente oferece?+
O Modelo de Componentes padroniza a composição de módulos WASM escritos em diferentes linguagens, com interfaces digitadas compartilhadas, sem depender de um formato binário específico para um tempo de execução. O modo WASM nativo do Aurabase não o utiliza hoje: é um ABI de host mínimo feito em casa, não o Modelo de Componente.

PRONTO PARA IMPLEMENTAR?

Seu back-end em cinco minutos.

Não é necessário cartão de crédito · 500 MB grátis · 50.000 MAU