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 815Rust 56Shell 37Markdown 291229 Definitions

receta: cmus va `link = "dynamic"` — carga sus formatos por dlopen

  cmus  b3:9a540d4270674ec74679dffbeed11d98796c51801663bde88e87affc041213ab

La primera versión decía `static` y era MENTIRA MEDIBLE: el audit del cron
(docs/state/static-audit.txt, medido 2026-09-12T21:04Z) la marcó — «dice static, es DINÁMICO →
libncursesw.so.6 libc.so» — y dejó el veredicto global en rojo. 715 honestas y las dos nuevas de
ayer mintiendo.

Pero el arreglo NO es hacerlo estático: **cmus no puede serlo**. El artefacto trae cinco plugins
—usr/lib/cmus/ip/{wav,cue,ffmpeg}.so y usr/lib/cmus/op/{alsa,oss}.so— y los abre por dlopen. Un
binario estático no puede abrirlos: quedaría un reproductor que no reproduce nada. Es la misma
razón por la que `sway` va dinámico (dlopea los drivers DRI de mesa).

⇒ `dynamic` es la declaración CORRECTA, no una concesión. Una declaración que el build ignora es
peor que no declarar, porque las herramientas río abajo la creen.

La prueba que decide, y cuesta dos segundos:
    find store/<hash>-<nombre> -name '*.so' | wc -l
  0 plugins → se puede y se debe ser estático.   N plugins → dynamic es lo honesto.

Comprobadas las NEEDED de los plugins contra el corpus con scripts/provee.py, que es la otra mitad:
libasound.so.2 (alsa-lib), libavformat/libavcodec/libswresample .so (ffmpeg) y libncursesw.so.6
(ncurses-shared) los publica el corpus ⇒ no hay NEEDED colgante. Las tres primeras llegan por
[deps] build; ncurses-shared va declarada en runtime desde el commit anterior.

35f83748f965b609cebcf46e2c1418f1e74748b0 · by Sergio · (1 month ago) · parent 584cc128a · browse the tree at this commit

Semantic delta

No definition changed: this change is text, documentation or data.

1 files · +8 −1

diff --git a/recipes/cmus.toml b/recipes/cmus.toml
index 5398e12d..c9f041ac 100644
--- a/recipes/cmus.toml
+++ b/recipes/cmus.toml
@@ -24,7 +24,14 @@ commit = "58d34cf9db5c29e01a985a48a9b6947855cb6cc9"
 [build]
 compiler = "zig-cc"
 target   = "x86_64-linux-musl"
-link     = "static"
+# ⚠ `dynamic` Y NO ES UNA CONCESIÓN: cmus CARGA SUS FORMATOS POR `dlopen`. El artefacto trae cinco
+# plugins —`usr/lib/cmus/ip/{wav,cue,ffmpeg}.so` y `usr/lib/cmus/op/{alsa,oss}.so`— y un binario
+# estático no puede abrirlos: quedaría un reproductor que no reproduce nada. Es la misma razón por
+# la que `sway` va dinámico (dlopea los drivers DRI de mesa).
+# La primera versión decía `static` y era MENTIRA MEDIBLE: `scripts/static-audit.sh` la marcó
+# («dice static, es DINÁMICO → libncursesw.so.6 libc.so») y dejó el audit del cron en rojo. Una
+# declaración que el build ignora es peor que no declarar, porque las herramientas río abajo la creen.
+link     = "dynamic"
 
 [build.phases]
 configure = './configure prefix=/usr CONFIG_ALSA=y CONFIG_PULSE=n CONFIG_JACK=n CONFIG_AO=n CONFIG_SNDIO=n CONFIG_ROAR=n CONFIG_FFMPEG=y CONFIG_CDIO=n CONFIG_MPRIS=n'