GBR: ADR-0020 Sandboxing Computacional (CPU/RAM) via Wasmtime em Rustler NIFs | Wiki
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.
- *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).
-
*NIF Wasmtime em Rustler:* Integraremos a biblioteca Rust
wasmtimeà Erlang VM usando ligações seguras viarustler(NIFs). A biblioteca Rust runtime do Wasmtime gerenciará os limites rígidos. - *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).
- *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).