Gleam.br Wiki

GBR: ADR-0020 Sandboxing Computacional (CPU/RAM) via Wasmtime em Rustler NIFs | Wiki

Documentação de engenharia e especificações técnicas da Gleam-BR.

GBR: ADR-0020 Sandboxing Computacional (CPU/RAM) via Wasmtime em Rustler NIFs

  • *Status:* Proposto (Ciclo Futuro)
  • *Data:* 2026-06-09

*Contexto:*

A nossa arquitetura de sandboxing atual (Frente ALPHA / ADR-0018) foca puramente no confinamento de Entrada e Saída (I/O) no sistema de arquivos local (Chroot lógico). Embora isso seja altamente eficiente e proteja o disco de modificações destrutivas, ele não impede que o código gerado pelo LLM execute operações computacionais abusivas. Por exemplo, a IA pode gerar e rodar um script com loop infinito (while(true)) ou consumo progressivo de memória que causará inanição de recursos (Starvation) e esgotamento da memória (Out-Of-Memory) na máquina hospedeira, travando toda a Erlang VM.

Para proteger a camada computacional de CPU e RAM de forma cross-platform, precisamos de uma sandbox de baixo nível que nos dê granularidade sobre a contagem de instruções de CPU e alocação máxima de memória por tarefa de usuário (especialmente em ServiceTasks dinâmicas do motor BPMN).

*Decisão:*

Adotaremos o *WebAssembly (WASM)* como a sandbox de isolamento computacional padrão para tarefas de execução dinâmica no ecossistema gleambr_ai.

  1. *Sandboxing de Instruções e Memória:* O código gerado pela IA (ou tarefas não confiáveis) será compilado/executado estritamente como módulos WebAssembly (.wasm).
  2. *NIF Wasmtime em Rustler:* Integraremos a biblioteca Rust wasmtime à Erlang VM usando ligações seguras via rustler (NIFs). A biblioteca Rust runtime do Wasmtime gerenciará os limites rígidos.
  3. *Consumo Granular e Limitação de Recursos:* - *Combustível (Fuel Consumption):* Definiremos um limite físico de instruções de processamento (ex: máximo de 50.000 instruções). Se a CPU estourar esse limite, o runtime Wasmtime abortará a execução instantaneamente. - *Tamanho de Página (Store Memory Limit):* Definiremos a quantidade máxima de páginas de memória de 64KB (ex: máximo de 16MB de RAM).
  4. *Isolamento de Processos:* Esta camada computacional funcionará de forma paralela ao chroot de I/O, fornecendo uma defesa em profundidade de nível de hardware.

*Consequências:*

  • *Positivas:* - Imunidade total contra loops infinitos de CPU e esgotamento de memória no nível do SO hospedeiro. - Segurança de execução de código dinâmico gerado por IAs com as mesmas garantias de isolamento de plataformas modernas de Serverless.
  • *Negativas:* - Complexidade de compilação: exige a configuração do Rust toolchain e compilação de NIFs do Rustler, aumentando o tempo e os requisitos de setup de desenvolvimento do monorepo. - Latência induzida pela compilação dinâmica do código do LLM para bytes WASM em tempo de execução (mitigada por cache de compilação local).