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 emaura-functions, verificada emCargo.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.
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.
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.
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.
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 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.
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.
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.
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:
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.
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 é.
Wasmtime e Wasmer, lado a lado
| Governança | Bytecode Alliance, multiorganização | Wasmer Inc., editora comercial |
|---|---|---|
| Licença | Apache-2.0 com exceção LLVM | MIT |
| Linguagem de implementação | Ferrugem | Ferrugem |
| Compiladores | Cranelift (guincho opcional, não ativado na Aurabase) | Singlepass, Cranelift, LLVM de sua escolha |
| Padrão WASI | Visualização WASI 2 + Modelo de Componente | WASI Preview 2 + WASIX (extensão específica para Wasmer) |
| Filmagem em execução | Combustível + interrupção por época (API nativa verificada) | Mecanismos específicos de Wasmer, não verificados aqui |
| Usado por Aurabase | Sim, funções de aura, versão 43 fixada | Nã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.
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.