All checks were successful
Intrepid/Prometeu/Runtime/pipeline/head This commit looks good
139 lines
11 KiB
Markdown
139 lines
11 KiB
Markdown
---
|
|
id: AGD-0050
|
|
ticket: portable-host-backend-strategy
|
|
title: Portable Host Backend Strategy
|
|
status: open
|
|
created: 2026-07-14
|
|
resolved:
|
|
decision:
|
|
tags: [host, desktop, portable, sdl, backend, rendering, input, audio, linux, android, handheld]
|
|
---
|
|
|
|
## Contexto
|
|
|
|
O runtime ja tem uma fronteira de host relativamente clara: o host desktop atual vive em `crates/host/prometeu-host-desktop-winit`, usando `winit`, `pixels` e `cpal` para janela, apresentacao de framebuffer, input e audio.
|
|
|
|
A direcao desejada nao e substituir esse host de forma disruptiva no primeiro corte. A proposta e estudar e construir um segundo host portatil para servir como runtime host em handhelds e consoles portateis, especialmente hardwares chineses que rodam Linux internamente e, em alguns casos, Android customizado. O mesmo host tambem deve servir como base para uma futura versao DIY do hardware, desde que ela rode sobre um Linux base compatível. SDL e a hipotese principal, mas a agenda tambem deve avaliar outras familias de host/backend antes de virar decisao normativa.
|
|
|
|
Esse novo host deve conviver com o host atual durante estabilizacao, mas nao e descartavel: ele e candidato a se tornar o host principal quando provar paridade e estabilidade.
|
|
|
|
A troca deve ficar isolada no dominio de host: contratos de runtime, firmware, frame, input semantico e audio semantico nao devem mudar por causa da escolha de backend. Essa separacao e justamente o objetivo arquitetural que permite que um host portatil evolua para principal sem arrastar o runtime.
|
|
|
|
## Problema
|
|
|
|
Hoje a existencia de um unico host desktop torna dificil separar problemas do runtime de problemas do adaptador de plataforma. Um novo host portatil pode ajudar em testes, portabilidade, comparacao operacional e reducao de dependencia de uma pilha unica de janela/render/audio. O alvo "mobile" desta agenda nao significa telefone/tablet como produto primario; significa hardware portatil dedicado, geralmente com controles fisicos, framebuffer/display integrado, Linux customizado e distribuicao fora do modelo desktop tradicional. O alvo tambem inclui um possivel handheld DIY futuro, em que o valor esperado e ja existir um host pronto se o dispositivo expuser um Linux base suficiente.
|
|
|
|
O risco e tratar uma tecnologia especifica como resposta antes de comparar os requisitos reais de Linux handheld e Android. A agenda precisa cravar o modelo de host paralelo em estabilizacao, com destino de host principal, e entao escolher a familia de backend que melhor atende esse objetivo.
|
|
|
|
## Pontos Criticos
|
|
|
|
- A troca de host deve ser simples e local ao host, sem exigir mudancas em runtime, firmware, asset protocol, render packet, VM ou syscalls.
|
|
- O novo host precisa consumir as mesmas saidas canonicas do runtime: frames RGBA8888, comandos semanticos de audio e eventos de input normalizados.
|
|
- A estrategia deve preservar o host `winit` enquanto o novo host ainda nao provar equivalencia operacional, mas o novo host e candidato a virar o host principal depois dessa prova.
|
|
- O alvo primario e portabilidade operacional para handhelds Linux e consoles portateis com controles fisicos; Android customizado e um alvo possivel que deve influenciar a escolha de API, packaging e input/audio.
|
|
- O host portatil deve ser viavel em um futuro hardware DIY rodando Linux base, sem exigir um runtime especial ou fork de contratos.
|
|
- Testes devem distinguir contrato comum de host de detalhes especificos de backend.
|
|
- SDL2 pode ter ecossistema Rust mais estabelecido; SDL3 pode estar mais alinhado com a direcao upstream. A escolha da versao e uma pergunta separada da decisao de criar um segundo host.
|
|
- A arquitetura deve evitar duplicar logica de runtime loop, pacing, debugger, stats e presentation policy quando essa logica for comum a qualquer host.
|
|
- Outras familias de host tambem devem ser avaliadas: evoluir `winit`, SDL2/SDL3, backend Android nativo, ou uma camada multiplataforma alternativa.
|
|
|
|
## Opcoes
|
|
|
|
### Opcao A - Manter apenas o host winit atual
|
|
|
|
- **Abordagem:** continuar evoluindo `prometeu-host-desktop-winit` como unico host desktop.
|
|
- **Pro:** menor custo imediato; evita nova dependencia nativa.
|
|
- **Con:** mantem a pilha de plataforma unica como ponto de acoplamento pratico.
|
|
- **Tradeoff:** bom para estabilidade curta, fraco para provar independencia real do host.
|
|
|
|
### Opcao B - Migrar diretamente do host winit para outro backend
|
|
|
|
- **Abordagem:** substituir o host desktop atual por um novo backend portatil assim que a escolha tecnologica for feita.
|
|
- **Pro:** reduz a manutencao para um unico host depois da migracao.
|
|
- **Con:** aumenta risco de regressao e mistura decisao de backend com mudanca operacional.
|
|
- **Tradeoff:** so faz sentido depois de prova local de superioridade e paridade, o que ainda nao existe.
|
|
|
|
### Opcao C - Criar um host SDL paralelo com destino de principal
|
|
|
|
- **Abordagem:** adicionar um novo crate/binario de host SDL que implemente os mesmos contratos externos do host atual, mantendo `winit` como referencia e rollback ate haver evidencia de equivalencia.
|
|
- **Pro:** permite teste A/B, reduz risco, valida se a fronteira de host esta realmente limpa, atende a meta de handheld Linux/Android customizado/DIY e preserva caminho para tornar SDL o host principal.
|
|
- **Con:** aumenta temporariamente manutencao e exige fatorar partes comuns se houver duplicacao.
|
|
- **Tradeoff:** melhor caminho para chegar a um host principal portatil sem reabrir runtime.
|
|
|
|
### Opcao D - Evoluir winit/pixels/cpal como host portatil
|
|
|
|
- **Abordagem:** manter a familia atual e investir em configuracao, input, fullscreen, packaging e compatibilidade de Linux handheld/Android/DIY dentro dela.
|
|
- **Pro:** reaproveita o host existente e reduz dependencias nativas novas.
|
|
- **Con:** pode nao resolver os problemas praticos de distribuicao, gamepad/device handling, fullscreen/scaling, Android customizado e ambientes handheld.
|
|
- **Tradeoff:** forte se a pilha atual suportar bem os alvos; fraco se o problema real for portabilidade operacional.
|
|
|
|
### Opcao E - Host Android nativo separado
|
|
|
|
- **Abordagem:** tratar Linux handheld e Android como hosts diferentes: SDL ou winit para Linux; Android com camada nativa/propria quando o alvo amadurecer.
|
|
- **Pro:** permite respeitar o ciclo de vida, packaging, input e audio do Android sem contaminar o host Linux.
|
|
- **Con:** duplica mais superficie e adia a promessa de um host portatil unico.
|
|
- **Tradeoff:** bom se Android tiver requisitos proprios demais; ruim se SDL conseguir cobrir Android bem o bastante.
|
|
|
|
### Opcao F - Camada multiplataforma alternativa
|
|
|
|
- **Abordagem:** avaliar alternativas como uma camada Rust-first ou game-framework-level para janela, input, audio e render.
|
|
- **Pro:** pode reduzir FFI nativa e integrar melhor com Cargo.
|
|
- **Con:** pode ser menos madura para Linux handheld/Android real, packaging e controles.
|
|
- **Tradeoff:** deve ser considerada, mas precisa provar vantagem concreta sobre SDL para justificar risco.
|
|
|
|
## Sugestao / Recomendacao
|
|
|
|
Recomendacao inicial: manter a **Opcao C** como favorita, mas ampliar a fase de agenda para comparar SDL com as demais familias de host antes da decisao. O resultado desejado continua sendo um segundo host portatil, inicialmente paralelo, com destino explicito de se tornar o host principal quando atingir paridade e estabilidade.
|
|
|
|
O caminho recomendado e:
|
|
|
|
1. Definir o contrato minimo de equivalencia entre hosts: janela, framebuffer RGBA8888, input, audio, pacing, debugger/logs e encerramento.
|
|
2. Identificar o que e comum ao host e o que e backend especifico.
|
|
3. Comparar as familias candidatas contra esse contrato: SDL2, SDL3, winit atual evoluido, Android nativo separado e alternativas Rust-first.
|
|
4. Implementar o candidato escolhido como novo crate/binario sem remover `prometeu-host-desktop-winit`.
|
|
5. Permitir troca simples por binario/comando/feature, mantendo o runtime cego para a escolha.
|
|
6. Tratar handheld Linux como alvo primario de produto para esse host; tratar Android customizado e DIY Linux como restricoes de desenho quando afetarem backend, packaging, input, audio ou boot/runtime integration.
|
|
7. Promover o novo host a principal apenas depois de evidencia de estabilidade e paridade.
|
|
|
|
## Perguntas em Aberto
|
|
|
|
- [ ] A primeira implementacao SDL deve usar SDL2 ou SDL3?
|
|
- [ ] SDL deve ser a familia escolhida, ou winit evoluido, Android nativo separado ou outra camada oferece melhor caminho?
|
|
- [ ] A selecao do host deve ser por binario separado, feature Cargo, parametro CLI, ou combinacao desses mecanismos?
|
|
- [ ] Qual e o menor conjunto de comportamento que define paridade aceitavel com o host winit?
|
|
- [ ] Quais partes do host atual devem virar modulo comum antes do SDL, e quais devem ser duplicadas primeiro para evitar abstracao prematura?
|
|
- [ ] O host SDL deve reutilizar `cpal` para audio inicialmente ou usar audio SDL desde o primeiro corte?
|
|
- [ ] Quais familias de hardware handheld Linux devem ser usadas como referencia inicial?
|
|
- [ ] Handheld Linux exige controles/gamepad, fullscreen, scaling, latency, sleep/resume, framebuffer/display mode ou packaging especificos desde o primeiro corte?
|
|
- [ ] Qual e o "Linux base" minimo que um futuro hardware DIY precisaria expor para rodar o host portatil sem fork?
|
|
- [ ] Android customizado deve ser criterio de escolha entre SDL2 e SDL3 agora, ou deve ficar como compatibilidade futura?
|
|
- [ ] Como validar input e pacing de forma automatizada sem depender de janela real em CI?
|
|
- [ ] O nome do crate deve ser `prometeu-host-desktop-sdl`, `prometeu-host-desktop-sdl2`, ou algo neutro a versao?
|
|
|
|
## Criterio para Encerrar
|
|
|
|
A agenda pode virar decision quando estiver claro:
|
|
|
|
- se o novo host sera paralelo em estabilizacao, com destino de host principal;
|
|
- qual familia de backend sera alvo inicial;
|
|
- se SDL for escolhido, qual versao SDL sera alvo inicial;
|
|
- como a selecao/troca de host deve funcionar;
|
|
- quais contratos sao comuns e proibidos de mudar;
|
|
- quais requisitos minimos de handheld Linux e possivel Android customizado entram no primeiro plano;
|
|
- qual contrato minimo de Linux base mantem aberta a opcao de hardware DIY;
|
|
- qual evidencia minima prova paridade suficiente para iniciar planos de implementacao.
|
|
|
|
## Discussion
|
|
|
|
Ponto inicial aceito pelo usuario: a intencao e ter um segundo host para testes, com troca simples e facil, aproveitando o trabalho ja feito para isolar essa troca no host sem envolver runtime ou outros dominios.
|
|
|
|
Atualizacao de escopo: o novo host nao e descartavel. O objetivo e servir como runtime host para sistemas Linux rodando em consoles portateis e hardwares handheld chineses, e possivelmente Android customizado. Assim que estiver estavel, ele deve poder virar o host principal.
|
|
|
|
Atualizacao de escopo: outras familias de host/backend tambem devem viver nesta agenda. SDL segue como hipotese forte, mas a decisao deve comparar opcoes antes de cravar a tecnologia.
|
|
|
|
Clarificacao: "mobile" nesta agenda nao se refere primariamente a telefone/tablet. O foco sao dispositivos portateis dedicados com Linux interno ou Android customizado, geralmente com controles fisicos e ambiente de distribuicao proprio.
|
|
|
|
Clarificacao: a agenda tambem deve preservar a opcao de um futuro hardware DIY. A premissa desejada e que, se esse hardware expuser um Linux base suficiente, o runtime ja tenha um host portatil pronto para rodar nele.
|
|
|
|
## Resolution
|