prometeu-runtime/docs/runtime/agendas/017-vm-owned-builtins-protocol-and-system-services.md
2026-03-24 13:40:48 +00:00

129 lines
4.2 KiB
Markdown

# Agenda - VM-Owned Builtins Protocol and System Services
## Problema
O modelo de `syscall` atual atende bem chamadas host-backed e nao deve ser quebrado.
Ao mesmo tempo, falta um protocolo formal para chamadas e dados VM-owned entre guest e VM para casos como:
- input;
- random;
- window system integrado ao SO;
- builtins com leitura/escrita e lifecycle.
Hoje ja existe base para bytes VM-owned (decisao `003`), mas ainda nao existe contrato equivalente para valores builtin, recursos tipados e handles VM-owned.
## Dor
- sem protocolo, cada dominio tende a criar shape ad-hoc de stack e retorno;
- surfaces de linguagem (FE) e backend podem divergir do runtime real;
- faltam regras canonicas para criar/ler/escrever/destruir recursos VM-owned;
- verifier e toolchain ficam sem alvo estavel para validacao de chamadas VM-owned;
- discussoes de input/random/window tendem a virar agendas grandes e misturadas.
## Alvo da Discussao
Definir um protocolo canonico de comunicacao guest <-> VM para operacoes VM-owned, preservando:
- `syscall` como fronteira host-backed existente;
- compatibilidade com o ABI atual de slots;
- determinismo por frame.
## O Que Precisa Ser Definido
1. Plano de chamada VM-owned.
Definir:
- ponto de entrada no bytecode (`INTRINSIC` com registry formal, ou outra forma);
- namespace de IDs;
- versionamento por operacao;
- metadados canonicos (`arg_slots`, `ret_slots`, layout, custo, efeito, determinismo).
2. Plano de dados builtin.
Definir:
- como builtins sao representados em slots;
- quando um builtin e inline e quando vira handle;
- regras de leitura/escrita/atualizacao em stack e heap;
- regras de compatibilidade de layout entre versoes.
3. Modelo de recursos VM-owned.
Definir:
- formato de handle (incluindo estrategia anti-stale);
- ownership;
- lifecycle (`create`, `read`, `update`, `destroy`);
- invariantes de validade.
4. Perfil de input no protocolo.
Fechar:
- como `Input.getPad()` e `Input.getTouch()` mapeiam para o protocolo VM-owned;
- relacao com as syscalls atuais de input no periodo de transicao;
- garantia de snapshot congelado por frame para leitura deterministica.
5. Perfil de random no protocolo.
Fechar:
- API minima (`getRandom` e variantes, se houver);
- PRNG deterministico e regras de seed;
- politicas de reproducibilidade.
6. Perfil de window system no protocolo.
Fechar contrato minimo para:
- criacao e destruicao de janelas;
- leitura/escrita de estado de janela;
- fila de eventos;
- relacao com foco e input.
7. Modelo de fault/status.
Definir:
- fronteira entre erro estrutural (`Trap`) e resultado operacional (`status`);
- como erros de handle/recurso/estado invalido sao expostos.
8. Integracao com verifier e toolchain.
Definir:
- validacoes estaticas minimas;
- regras de emissao no backend;
- requisitos para decode/disasm/assembler.
9. Politica de CAP, certificacao e telemetria para VM-owned.
Definir:
- se VM-owned usa ou nao capability;
- como custo entra em certificacao;
- o que e observavel em telemetria.
10. Migração.
Definir:
- como coexistem superficies antigas e novas;
- quando e como descontinuar chamadas legadas.
## Sistemas Candidatos Para Cobertura
Esta agenda deve discutir explicitamente, alem de input/random/window:
- frame clock/tick index para consultas deterministicas de tempo de jogo;
- event queue VM-owned para UI/app;
- text input para apps com janelas;
- notificacoes de sistema para app.
## Dependencias
- `../virtual-machine/ISA_CORE.md`
- `../specs/16-host-abi-and-syscalls.md`
- `../specs/16a-syscall-policies.md`
- `../decisions/003-vm-owned-byte-transfer-protocol.md`
- `../decisions/004-host-fault-taxonomy.md`
## Fora de Escopo
- redesenhar o modelo de syscall host-backed;
- UX final do window manager;
- detalhes de compositor/renderizacao de UI;
- protocolo de rede/distribuicao remota.
## Critério de Saida Desta Agenda
Pode virar PR quando houver decisao escrita sobre:
- contrato canonico do protocolo VM-owned (call plane + data plane);
- shape e lifecycle de builtins/handles;
- perfil minimo fechado para input, random e window system;
- regras de fault/status e verificacao;
- plano de migracao sem quebra da fronteira de syscall existente.