prometeu-runtime/docs/runtime/agendas/003-vm-owned-byte-buffer-abi.md
2026-03-24 13:40:48 +00:00

3.0 KiB

Agenda - VM-Owned Byte Buffer ABI

Problema

O runtime ainda trata bytes como texto em partes da borda host <-> guest.

Exemplo atual:

  • fs.read converte bytes para String.

Ao mesmo tempo, o projeto ja decidiu que:

  • o host nunca devolve handles opacos;
  • o host nunca devolve chunks de memoria host-owned;
  • syscalls falam com o runtime apenas via stack;
  • banks de hardware (image, tilemap, sound) trafegam apenas IDs;
  • as unicas excecoes reais de payload binario sao fs e o futuro bank de dados.

Dor

  • bytes arbitrarios continuam vulneraveis a UTF-8 lossy;
  • a fronteira host <-> guest fica ambigua;
  • o runtime corre o risco de introduzir atalhos proibidos, como handles host-owned;
  • fs e bank de dados ficam sem contrato canonico para copia de bytes.

Alvo da Discussao

Definir o contrato canonico para syscalls que precisam copiar bytes do host para memoria da VM, usando:

  • stack para argumentos e resultados;
  • HeapRef(Byte) VM-owned como destino;
  • preenchimento de memoria pelo host sem ownership host-side.

Decisoes Ja Fixadas

  • nao ha retorno estruturado generico por objetos heapados do host;
  • nao ha handles opacos de buffers;
  • nao ha backward compatibility;
  • button fica fora desta agenda porque eh intrinsic;
  • banks de hardware nao trafegam bytes para a VM.

O Que Precisa Ser Definido

  1. Value::Byte. O ABI precisa de um valor primitivo Byte real, em vez de tratar byte como caso derivado de outro tipo.

  2. HeapRef(Byte) como destino canonico. A agenda precisa fechar como a VM aloca e tipa buffers de bytes que poderao ser preenchidos pelo host.

  3. Protocolo de copia host -> VM. Como a syscall recebe:

    • referencia de destino;
    • capacidade disponivel;
    • offset/logica de janela, se aplicavel.
  4. Shape de retorno via stack. Como a syscall informa:

    • quantidade de bytes escritos;
    • EOF;
    • leitura parcial;
    • falha.
  5. Impacto no verifier e no runtime. O runtime precisa validar:

    • tipo correto do heap ref;
    • bounds;
    • capacidade de escrita;
    • integracao com HostReturn sem atalhos temporarios.
  6. Relaçao com fault classification. A agenda precisa explicitar quais erros pertencem ao contrato local de copia e quais dependem da agenda de falhas de syscall.

O Que Necessita Para Resolver

  • definicao normativa de Value::Byte;
  • definicao normativa de HeapRef(Byte);
  • protocolo de syscall para copia de bytes;
  • lista das operacoes que usarao esse contrato (fs e bank de dados);
  • suite minima de testes de integridade de bytes e bounds.

Fora de Escopo

  • listas estruturadas retornadas pelo host;
  • structs retornadas pelo host;
  • button e outros intrinsics;
  • design completo da API de fs;
  • modelagem funcional do bank de dados.

Critério de Saida Desta Agenda

Pode virar PR quando houver decisao escrita sobre:

  • semantica de Value::Byte;
  • uso de HeapRef(Byte) VM-owned;
  • shape exato do protocolo stack-based de copia;
  • impacto minimo em verifier e HostReturn;
  • suite minima de testes para bytes arbitrarios, leitura parcial e bounds.