tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1346Shell 97Rust 63Markdown 571650 Definiciones

⎇ 6e1ebfd001c341063a18241bc4b1bea299f148d6 docs/plan-jaula-juegos.md Markdown · 95 líneas · 6.1 KB Historia crudo

plan jaula-juegos: kernel (NTSYNC/sched-ext/cmdline), nativos (gamescope/scx/mesa-RADV), jaula glibc por fases (flatpak → SLR sellado) con política harkaq 6e1ebfd00 · sergio ·

1# Plan — juegos en hammer (kernel, nativos, y la jaula glibc)
2
3**Fecha:** 2026-07-16 · **Contexto:** hammer es musl + estático + fuente; el mundo del juego en
4Linux es glibc + 32-bit + binarios ajenos (Steam/Proton). Este plan separa lo que hammer puede
5hacer *nativo y barato* (capas 1–2) de lo que exige un runtime ajeno *contenido y sellado*
6(capa 3), en vez de fingir que musl va a correr Steam.
7
8---
9
10## Capa 1 — kernel propio: casi gratis, ganancia real
11
12Los kernels ya fijan config por contrato explícito (`scripts/config -e/-d` en
13`recipes/linux-metal.toml:67`, mismo patrón que LANDLOCK/IO_URING/BPF de 2b7c701). Se extiende
14la misma línea:
15
16- **T1.1 — `CONFIG_NTSYNC=y`** (driver de primitivas de sincronización NT, kernel ≥6.14; el
17  6.16.12 propio lo trae). Es EL salto para Wine/Proton moderno — reemplaza los hacks
18  esync/fsync por un char device (`/dev/ntsync`). Built-in, compatible con el `-d MODULES`
19  del kernel metal.
20- **T1.2 — `CONFIG_SCHED_CLASS_EXT=y`** (sched-ext). BPF_SYSCALL ya es explícito por el
21  contrato kikin ⇒ el prerequisito grande ya está. Habilita los schedulers scx (T2.1).
22- **T1.3 — `HZ_1000` + preempt** en linux-metal (el perfil de latencia de escritorio/juego;
23  linux-generic puede quedarse como está — son perfiles distintos y por eso hay dos recetas).
24- **T1.4 — `split_lock_detect=off` en el CMDLINE embebido** (`CONFIG_CMDLINE`,
25  linux-metal.toml:99). Juegos con locks mal alineados (los hay, famosos) reciben una
26  penalización brutal del detector; en una máquina de juego se apaga. OJO: el cmdline viaja
27  DENTRO del bzImage (EFI-stub, ADR 0010) ⇒ esto re-sella el kernel, no es un toggle de GRUB.
28- **T1.5 — sysctls de perfil juego**: `vm.max_map_count=1048576` (lo pide Valve; los defaults
29  de kernel siguen en 65530), THP en `madvise`. Dónde viven: perfil de arje/base-system, no
30  hardcodeado en kernel.
31
32Re-sellar linux-metal re-hashea el kernel ⇒ pasa por la granja y el ciclo QEMU-boot de
33verificación existente, como el 2b7c701.
34
35## Capa 2 — userspace nativo (sí compila en hammer)
36
37- **T2.1 — schedulers scx (`scx_lavd`, `scx_bpfland`)**: los schedulers de juego de CachyOS.
38  Son programas BPF con userspace en Rust/C — pero compilar la parte BPF exige clang+libbpf ⇒
39  **worker**. Entrega: receta + regla de arranque en el init (SDD 07) para activarlos por
40  perfil.
41- **T2.2 — `gamescope`**: el micro-compositor de Valve (frame limiting, VRR, HDR, upscaling).
42  C++ + Vulkan + cadena wayland ⇒ **worker, frontera GUI** (gotcha zig-skew: jamás rebuildear
43  la cadena en el laptop). Es la pieza con más valor: da una "sesión de juego" contenida que
44  además le queda bien a mirada como sesión alternativa.
45- **T2.3 — `MangoHud` (C++ ⇒ worker) y `gamemode` (C)**: overlay de métricas y gobernador de
46  perfil. gamemoded habla D-Bus — la cadena KDE ya lo trajo, la dep existe.
47- **T2.4 — mesa con RADV**: el driver Vulkan serio es AMD (RADV/ACO). Revisar features de
48  `recipes/mesa.toml` y activar RADV si no está. nouveau NO es para jugar (sabido por mirada);
49  NVK madura pero no este trimestre. El perfil de juego de hammer es honesto: **AMD primero**.
50- **T2.5 — variantes v3 de mesa/wine**: donde el truco CachyOS paga de verdad para juegos.
51  Depende del piloto de `plan-variantes-cpu.md` (T5→T1–T4 de ese plan); no se duplica aquí.
52
53## Capa 3 — la jaula glibc (el elefante, por fases)
54
55Steam, Proton y el catálogo de juegos son binarios glibc, parte 32-bit. musl no los va a
56correr y perseguir eso es un pozo. La respuesta con ADN hammer: **el runtime ajeno se trae
57entero, pineado por hash, y corre enjaulado** — verificar, no confiar, aplicado a un rootfs
58que no construimos.
59
60- **F0 — pragmático (hoy)**: Steam por Flatpak. El runtime freedesktop trae su mundo glibc
61  completo. Costo: entra flatpak al catálogo (cadena ostree/bwrap — bwrap ya es dep del
62  build lab). Es la validación de demanda antes de construir nada propio.
63- **F1 — la jaula propia**: importar el **Steam Linux Runtime** (sniper/pressure-vessel — el
64  contenedor que Valve ya usa para Proton) como artefacto `file_drop` content-addressed:
65  tarball pineado por sha256 en receta, sellado en el store, hidratable como cualquier
66  artefacto. Un `hammer-juego` (script primero) lo monta con bwrap + `/dev/dri` + ntsync +
67  sockets wayland/pipewire y lanza Steam adentro. Diferencia con F0: la cadena de custodia es
68  de hammer (hash en el índice firmado, no un remote de flathub).
69- **F2 — (sólo si F1 duele) glibc propio**: construir glibc + multilib 32-bit desde fuente es
70  una campaña entera (toolchain dual, loader, locales). El mundo se mueve además hacia
71  **WoW64** (wine ≥9 corre 32-bit sobre wine 64-bit sin multilib), que puede volver F2
72  innecesario antes de que se justifique. **No arrancar F2 sin una razón que F1 no cubra.**
73
74**Cruce harkaq/arje (la parte que nadie más tiene):** la jaula de juego es un *usuario más*
75del cierre §3 — política Landlock declarada para el runtime ajeno (GPU, audio, input, red de
76Steam, y NADA más). El binario es ajeno pero la jaula es nuestra y sus permisos son una
77`ConcesionCapacidad` atestada como cualquier otra. Un Steam que no puede leer `~/.ssh` es un
78argumento de venta que ninguna distro gamer ofrece.
79
80## Lo que NO se hace
81
82- **Perseguir Steam nativo sobre musl** — pozo sin fondo, y Valve ya resolvió el contenedor.
83- **Soporte NVIDIA propietario como frente** — fuera del modelo (driver no libre, no sellable
84  desde fuente); nouveau/NVK cuando maduren. AMD es el camino soportado.
85- **Fork del kernel "gaming"** — no hay kernel aparte: son flags de perfil en linux-metal,
86  bajo el mismo contrato explícito y el mismo ciclo de verificación.
87
88## Orden propuesto
89
901. **T1.1–T1.5** — re-sellar linux-metal con NTSYNC/sched-ext/HZ/cmdline (worker + QEMU-boot).
912. **F0** — flatpak+Steam: valida demanda con costo mínimo y da juegos YA.
923. **T2.2–T2.3** — gamescope/MangoHud/gamemode a la cola del worker (cadena GUI).
934. **T2.1** — schedulers scx + regla de init.
945. **F1** — la jaula sellada con pressure-vessel + política harkaq del runtime.
956. **T2.4–T2.5** — RADV confirmado + variantes v3 de mesa (tras el piloto de variantes).

plan-jaula-juegos.md

Plan — juegos en hammer (kernel, nativos, y la jaula glibc)

Fecha: 2026-07-16 · Contexto: hammer es musl + estático + fuente; el mundo del juego en Linux es glibc + 32-bit + binarios ajenos (Steam/Proton). Este plan separa lo que hammer puede hacer nativo y barato (capas 1–2) de lo que exige un runtime ajeno contenido y sellado (capa 3), en vez de fingir que musl va a correr Steam.


Capa 1 — kernel propio: casi gratis, ganancia real

Los kernels ya fijan config por contrato explícito (scripts/config -e/-d en recipes/linux-metal.toml:67, mismo patrón que LANDLOCK/IO_URING/BPF de 2b7c701). Se extiende la misma línea:

Re-sellar linux-metal re-hashea el kernel ⇒ pasa por la granja y el ciclo QEMU-boot de verificación existente, como el 2b7c701.

Capa 2 — userspace nativo (sí compila en hammer)

Capa 3 — la jaula glibc (el elefante, por fases)

Steam, Proton y el catálogo de juegos son binarios glibc, parte 32-bit. musl no los va a correr y perseguir eso es un pozo. La respuesta con ADN hammer: el runtime ajeno se trae entero, pineado por hash, y corre enjaulado — verificar, no confiar, aplicado a un rootfs que no construimos.

Cruce harkaq/arje (la parte que nadie más tiene): la jaula de juego es un usuario más del cierre §3 — política Landlock declarada para el runtime ajeno (GPU, audio, input, red de Steam, y NADA más). El binario es ajeno pero la jaula es nuestra y sus permisos son una ConcesionCapacidad atestada como cualquier otra. Un Steam que no puede leer ~/.ssh es un argumento de venta que ninguna distro gamer ofrece.

Lo que NO se hace

Orden propuesto

  1. T1.1–T1.5 — re-sellar linux-metal con NTSYNC/sched-ext/HZ/cmdline (worker + QEMU-boot).
  2. F0 — flatpak+Steam: valida demanda con costo mínimo y da juegos YA.
  3. T2.2–T2.3 — gamescope/MangoHud/gamemode a la cola del worker (cadena GUI).
  4. T2.1 — schedulers scx + regla de init.
  5. F1 — la jaula sellada con pressure-vessel + política harkaq del runtime.
  6. T2.4–T2.5 — RADV confirmado + variantes v3 de mesa (tras el piloto de variantes).