gioser

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 1389Shell 137Markdown 80Rust 802602 Definitions

fix(distro): kitty no falta por falta de receta — falta porque no publicamos OpenGL

Medido bajando kitty v0.49.2 (`b2cb8712`) y leyendo su build, no suponiendo:

    setup.py:804        gl_libs = … pkg_config('gl', '--libs')
    data-types.h:25     #define OPENGL_REQUIRED_VERSION_MAJOR 3
    gl.c:68             aborta: «OpenGL version is X.Y, version >= 3.3 required for kitty»

Y en el store, medido: **nadie publica `gl.pc` ni `libGL.so`.** `mesa` da `egl.pc`, `glesv2.pc`,
`gbm.pc` y `dri.pc`; `libglvnd` da `opengl.pc` con `libOpenGL.so`/`libGLdispatch.so` — y sólo viaja
en `escritorio-kde`. O sea que kitty **no compila** (falla el pkg-config) y, aunque se le forzara,
**abortaría al arrancar**: el chequeo de versión está en runtime. Es el mismo muro que paró a OBS.

⇒ El censo gana una dimensión, porque contar las dos cosas juntas era mentir por omisión: **«falta
la receta» y «la distro no publica eso» tienen presupuestos distintos.** `MUROS` registra sólo los
medidos, con el dato que los prueba; lo demás se queda sin anotar, que es más honesto que adivinar.
Hoy hay uno y es kitty.

Lo que esto cambia para el plan: los otros cuatro terminales de la lista hay que MEDIRLOS antes de
presupuestarlos, no agruparlos con kitty. `alacritty` y `wezterm` pueden tener camino GLES/wgpu;
`xterm` no usa GL pero arrastra X11, que la distro descartó entera (Wayland-only). Ninguna de esas
tres cosas la sé todavía, y por eso no están en `MUROS`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

bf7f85558463031657064ef36644698c4a5fb9de · by Sergio · (2 d ago) · parent 5ebfe46a8 · browse the tree at this commit

Semantic delta · 1

scripts/censo-distro.py

  • body changed fn main

2 files · +23 −0

diff --git a/docs/state/distro-huecos.json b/docs/state/distro-huecos.json
index cba5692e..39470cd3 100644
--- a/docs/state/distro-huecos.json
+++ b/docs/state/distro-huecos.json
@@ -119,6 +119,8 @@
    "items": [
     {
      "estado": "falta",
+     "muro": "sin-opengl-de-escritorio",
+     "muro_porque": "setup.py:804 hace pkg_config('gl', '--libs') y data-types.h:25 exige OpenGL >= 3.x core. Medido en el store: NADIE publica `gl.pc` ni `libGL.so` — mesa da egl.pc, glesv2.pc, gbm.pc y dri.pc; libglvnd da opengl.pc con libOpenGL.so/libGLdispatch.so y sólo viaja en escritorio-kde. Compilar no basta: gl.c:68 aborta en runtime con «OpenGL version is X.Y, version >= 3.3 required for kitty». Mismo muro que OBS.",
      "nombre": "kitty",
      "parientes": []
     },
diff --git a/scripts/censo-distro.py b/scripts/censo-distro.py
index 13dcd067..35be0906 100755
--- a/scripts/censo-distro.py
+++ b/scripts/censo-distro.py
@@ -156,6 +156,20 @@ CHECKLIST = {
 }
 
 
+# ── POR QUÉ ESTÁ CADA HUECO: receta ausente ≠ capacidad ausente ─────────────────────────────────
+# «Falta la receta» y «la distro no publica eso» son dos cosas con presupuestos distintos, y el
+# censo mentía por omisión al contarlas juntas. Sólo entran acá los muros MEDIDOS, con el dato que
+# los prueba; lo demás se queda sin anotar, que es más honesto que adivinar.
+MUROS = {
+    'kitty': ('sin-opengl-de-escritorio',
+              "setup.py:804 hace pkg_config('gl', '--libs') y data-types.h:25 exige OpenGL >= 3.x "
+              "core. Medido en el store: NADIE publica `gl.pc` ni `libGL.so` — mesa da egl.pc, "
+              "glesv2.pc, gbm.pc y dri.pc; libglvnd da opengl.pc con libOpenGL.so/libGLdispatch.so "
+              "y sólo viaja en escritorio-kde. Compilar no basta: gl.c:68 aborta en runtime con "
+              "«OpenGL version is X.Y, version >= 3.3 required for kitty». Mismo muro que OBS."),
+}
+
+
 def nombres_conocidos():
     """Toda receta alcanzable: catálogo, colas `incoming-*` y `tandas/`."""
     n = set()
@@ -206,6 +220,8 @@ def main():
         for i in items:
             if i['estado'] == 'falta' and i['parientes']:
                 i['pista'] = 'nombre parecido en el catálogo (verificar, NO es equivalencia)'
+            if i['nombre'] in MUROS:
+                i['muro'], i['muro_porque'] = MUROS[i['nombre']]
 
     print('== qué le falta a la distro para usarse (checklist de JUICIO, estado MEDIDO) ==')
     print('   recetas alcanzables: %d · de ellas en alguna imagen: %d'
@@ -221,6 +237,11 @@ def main():
         print('   — PISTAS: falta, pero hay un nombre parecido (verificar; NO es equivalencia):')
         for n, p in rev:
             print('        %-20s ~ %s' % (n, ', '.join(p)))
+    con_muro = [(i['nombre'], i['muro']) for f in filas for i in f['items'] if i.get('muro')]
+    if con_muro:
+        print('   — MUROS MEDIDOS (no es que falte la receta: la distro no publica eso):')
+        for n, m in con_muro:
+            print('        %-20s %s' % (n, m))
     print('   resumen: %s' % json.dumps(resumen, ensure_ascii=False))
 
     if a.json: