8.5 KiB
| id | ticket | title | status | created | resolved | decision | tags | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| AGD-0033 | system-os-service-ownership-and-module-layout | Agenda - SystemOS Service Ownership and Module Layout | accepted | 2026-05-14 |
|
Agenda - SystemOS Service Ownership and Module Layout
Contexto
Antes de avançar o contrato de lifecycle do SystemOS, há uma limpeza de
fronteira que precisa ser discutida separadamente.
O SystemOS começou como agregador de:
SystemOS
VirtualMachineRuntime
ProcessManager
TaskManager
Mas o código ainda carrega sinais do modelo anterior, em que a VM concentrava
coisas que hoje parecem serviços de sistema. O exemplo mais claro é
LogService dentro de VirtualMachineRuntime. A mesma dúvida aparece em torno
de outros serviços e estados associados a filesystem, memcard, diagnóstico,
telemetria e identidade do cartucho.
Há também uma questão de layout:
VirtualMachineRuntimeestá no root deprometeu-system, embora conceitualmente agora seja um serviço do OS;WindowManagerestá dentro deprograms/prometeu_hub, embora a direção de arquitetura seja transformar o Hub em Shell/Home visual, não no sistema;ProcessManagereTaskManagerjá vivem emservices, o que torna a posição da VM e do WindowManager inconsistente com o desenho novo.
Problema
Misturar ownership de serviços com execução da VM dificulta a evolução do OS.
Se VirtualMachineRuntime continuar parecendo dona de logging, filesystem,
memcard, diagnóstico e janela, o SystemOS vira apenas um wrapper, e não a
autoridade natural para coordenar serviços do console.
Ao mesmo tempo, nem tudo aqui é puramente mecânico:
- mover arquivos para
servicespode ser uma alteração sem mudança funcional; - mover
LogServiceparaSystemOSaltera ownership e pode exigir uma API de serviço ou passagem explícita de dependência para a VM; - promover
WindowManagera serviço do OS antecipa uma fronteira arquitetural, mesmo que a implementação continue mínima.
Por isso, este assunto não deve ser escondido dentro da agenda de lifecycle
(AGD-0032). Ele é uma agenda de pré-requisito ou paralela: primeiro precisamos
limpar a fronteira entre "VM como executor" e "OS como dono de serviços".
Pontos Criticos
VirtualMachineRuntimedeve representar execução VM, não ser o container geral de serviços do sistema.SystemOSdeve ser o lugar natural para serviços compartilhados por jogos, Shell/Home, firmware e processos nativos futuros.LogServiceprovavelmente pertence aoSystemOS, mas a forma de acesso pela VM precisa respeitar as restrições de borrow e o desenho deNativeInterface.VirtualFSeMemcardServicetambém parecem serviços de OS, mas movê-los no mesmo corte pode aumentar demais o risco.WindowManagerdeve sair dePrometeuHubporque o Hub deve virar consumidor visual do OS, não proprietário de serviço de janela.- A mudança de layout de módulo deve preservar comportamento, mas não precisa preservar caminhos antigos de import; callsites devem ser atualizados diretamente.
- A decisão precisa separar explicitamente "relocação de módulo" de "mudança de ownership".
Opcoes
Opcao A - Agregar tudo na agenda de lifecycle
Abordagem:
Usar AGD-0032 para decidir lifecycle, ownership de serviços, layout de módulos
e promoção do WindowManager.
Vantagens:
- uma única discussão cobre toda a direção do
SystemOS; - menos artefatos de workflow.
Custos / Riscos:
- mistura semântica de lifecycle com limpeza estrutural;
- aumenta a chance de uma decisão grande demais;
- dificulta transformar a discussão em plans pequenos e verificáveis;
- pode bloquear lifecycle por causa de detalhes de módulo e borrow.
Opcao B - Separar uma agenda de service ownership e layout
Abordagem:
Manter AGD-0032 focada em lifecycle de Task/Process e usar esta agenda
para decidir onde vivem os serviços do OS, quais módulos devem ir para
services, e quais extrações são mecânicas ou semânticas.
Vantagens:
- mantém a agenda principal limpa;
- permite um primeiro plan mecânico de relocação sem reabrir lifecycle;
- torna explícito que
LogServicesair da VM é mudança de ownership; - cria base melhor para promover
WindowManagersem confundir Hub e OS.
Custos / Riscos:
- cria uma dependência a mais antes da implementação do lifecycle;
- pode revelar que alguns serviços exigem desenho de API antes do refactor;
- exige cuidado para atualizar callsites diretamente sem deixar caminhos antigos exportados.
Opcao C - Fazer apenas os moves mecanicos direto no codigo
Abordagem:
Mover VirtualMachineRuntime e WindowManager para services sem decisão
formal, deixando LogService para depois.
Vantagens:
- rápido;
- baixo risco se for realmente só path/reexport;
- reduz ruído visual do layout atual.
Custos / Riscos:
- não resolve a dúvida central de ownership;
- pode mascarar uma decisão arquitetural como refactor mecânico;
- viola a política do repositório se a mudança alterar fronteiras sem agenda e decisão.
Sugestao / Recomendacao
A recomendação é seguir a Opção B.
Esta agenda deve ser separada da AGD-0032, mas tratada como pré-requisito ou
agenda paralela para ela. O primeiro contrato deve dividir o trabalho em dois
tipos:
-
Relocação mecânica sem mudança funcional
- mover
VirtualMachineRuntimeparaservices; - mover
WindowManagerparaservices; - não manter reexports ou aliases de compatibilidade para os caminhos antigos;
- atualizar callsites diretamente para os caminhos novos;
- provar que o comportamento não mudou.
- mover
-
Correção de ownership de serviços
- mover
LogServiceparaSystemOSse aceitarmos que logging é serviço do OS; - decidir se
VirtualFS,MemcardService, diagnóstico, telemetria e certificação ficam na VM, no OS, ou em serviços próprios; - definir como a VM acessa serviços de OS sem voltar a ser dona deles.
- mover
Para o primeiro corte, a inclinação é:
VirtualMachineRuntimedeve ficar emservices, como serviço de execução VM;WindowManagerdeve ficar emservices, mesmo que ainda seja mínimo;LogServicedeve ser tratado como serviço deSystemOS, não detalhe interno da VM;VirtualFSeMemcardServicedevem ser avaliados em seguida, sem mover tudo junto automaticamente.
Perguntas em Aberto
- O path deve ser
services/vm_runtimeouservices/virtual_machine_runtime? vm_runtime VirtualMachineRuntimecontinua sendo o nome correto depois de virar serviço, ou devemos introduzir um nome menor apenas no módulo? Podemos manter o mesmo nomeLogServicedeve sair da VM no mesmo plan do move mecânico, ou em um plan separado de ownership? pode ser em um plan separado- A VM deve receber referência explícita ao logging do
SystemOS, ou deve chamar uma API de serviço mais estreita? A VM pode ter uma referência explícita ao logging doSystemOSpara seu uso VirtualFSeMemcardServicepertencem aoSystemOSjá, ou continuam na VM até existir uma camada de permissões e mount por processo? podemos move-los para systemos jahWindowManagerdeve virar campo doSystemOSimediatamente, ou primeiro apenas sair dePrometeuHubem termos de módulo? eu diria que ele jah deve nascer em system os a partir de jah, mesmo que sem implementar nada- O
PrometeuHubdeve continuar expondowindow_managerenquanto a Shell visual ainda depende dele, ou isso deve ser mediado peloSystemOSdesde já? o prometeu hub eh um shell especial, ou seja, o window manager deve mediado pelo system os desde jah
Criterio para Encerrar
Esta agenda pode virar decisão quando houver resposta para:
- quais serviços pertencem ao
SystemOSno primeiro corte; - qual layout canônico de módulo será usado em
services; - quais mudanças são relocação mecânica e quais são ownership semântico;
- como
VirtualMachineRuntimeacessaLogServicedepois da extração; - se
WindowManagerserá apenas movido de módulo ou também promovido a campo doSystemOS; - como os callsites serão atualizados sem reexports temporários.
Proximo Passo
Revisar esta agenda antes de fechar AGD-0032. Se a direção for aceita, o
próximo estágio deve ser uma decisão curta para fronteira de serviços do
SystemOS, seguida de plans pequenos: primeiro relocação mecânica, depois
extração de ownership onde houver contrato suficiente.