Files
sergioandClaude Opus 4.8 e568f7714b matar-gcc: el doc de deuda decía 47 recetas; son 16 (recontado parseando TOML)
Eran 47 el 2026-07-16. Desde entonces se migraron 31 y nadie actualizó el doc, así que el frente
se leía 3x más grande de lo que es. Recontado hoy: 16 = 4 C (file/libgcrypt/libsodium/linux-pam)
+ 12 Rust con sys-crate C.

CÓMO CONTAR, documentado en el doc: NO con grep. `grep -l 'compiler = "gcc"' recipes/*.toml` da
18 — cuenta bzip2 y pigz, que ya son zig-cc y sólo MENCIONAN gcc en un comentario. El grep no
distingue campo de comentario; hay que parsear el TOML. (Me comí ese error yo mismo antes de
medirlo bien.) Y la otra dirección también engaña: pigz DECLARABA zig-cc y construía con gcc igual
(7d86dbf) — la receta dice la intención, harkaq dice el hecho.

xplr estaba mal clasificada como 'C puro': es Rust (embebe mlua-sys, que compila Lua en C).

LO QUE IMPORTA — las 12 Rust no son 12 problemas, son uno: bajo zig-cc el link falla con símbolos
de unwinding sueltos (_Unwind_GetCFA/_Unwind_DeleteException) que aporta libgcc. La deuda no es
'zig miscompila 12 programas', es 'falta un runtime de unwinding para el C de los sys-crates'.

Y converge con el frente static: helix y tuc salían dinámicas arrastrando libgcc_s.so.1 de Alpine
DENTRO del binario — la misma libgcc, la misma razón, medida en runtime en vez de en build. Un fix
del unwinding cerraría los dos frentes a la vez. Precedente: cmake se arregló con
-static-libstdc++ -static-libgcc.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 09:45:22 -04:00
..

Deuda que harkaq NO puede declarar sola — revisión humana

De 83 recetas barridas, la deuda genuina se reduce a 3 casos, ninguno "falta una receta grande". Todo lo demás era declarable (make/binutils/pkgconf…) o sondas de compilador de Alpine (gcc, cpp, ldd, c89, c99, getent — se deniegan y clasifican, D3). Los 3 que quedan, cada uno una historia:

ncurses — fs.make_dir /usr/lib (NO es de-Alpinización)

El make install de ncurses escribe en /usr/lib, no en /out/usr/lib. Es una escritura de estructura durante install, no la lectura de una lib de Alpine. Causa probable: la fase install no respeta DESTDIR para ese subárbol. Acción: revisar el install de la receta (¿pasa DESTDIR a todo?), no declarar nada. Conceder /usr/lib como rw sería tapar el síntoma y cegar la evidencia.

mtdev — config.sub de Alpine CERRADO (2026-07-16), + gcc-compilador descubierto

config.sub: cerrado. El config.sub de mtdev 1.1.6 no conoce *-musl, así que la receta copiaba el de Alpine (/usr/share/autoconf/build-aux/). Ahora se parchea el config.sub del propio tarball (recipes/mtdev-config-sub-musl.patch, +-musl* a la whitelist de OS, 11 líneas): input soberano, hasheado con la receta, sin tocar Alpine. Verificado: mtdev construye y no lee /usr/share/autoconf.

Descubierto al cerrarlo — mtdev tenía DOS deudas de Alpine: también usa compiler = "gcc" (el gcc de Alpine, no zig). Bajo la jaula, la política deniega /usr/bin/gcc (sonda esperada) y el configure da C compiler cannot create executables. Es parte de la campaña matar gcc (kernel, cmake, mtdev), un frente aparte. Y revela un límite del modelo de clasificación: harkaq marca gcc como "sonda esperada" siempre, así que dice Hermetico, pero para una receta compiler=gcc el gcc es esencial y el build no compila sin él. harkaq no distingue "gcc sondeado (ignorable)" de "gcc = compilador".

perl — /etc/hosts, /etc/resolv.conf (config de sistema para tests)

Los tests de perl durante el build resuelven red y leen la config del sistema. No es un binario ni lib de Alpine: es config. El build completa igual (esos tests fallan o se saltan bajo la jaula). Acción, una de: (a) añadir /etc/hosts+/etc/resolv.conf al runtime base si se quiere que esos tests corran; (b) aceptar la denegación (benigna). No es de-Alpinización.