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>
3.1 KiB
Deuda de compilador (matar-gcc) — las recetas que compilan con el gcc de Alpine
harkaq clasificaba /usr/bin/gcc como sonda esperada SIEMPRE, así que marcaba estas recetas
Hermetico — ciego a que dependen del gcc de Alpine (compiler=gcc = CC=gcc de Alpine, musl+GNU
ld). El arreglo (harkaq-suggest, 2026-07-16): para compiler=gcc los frontends de gcc son DEUDA
DE COMPILADOR, no sonda.
Cada una compila con gcc porque zig-cc la miscompila/no la soporta (documentado en su receta). Acción por receta: migrar a zig-cc cuando zig mejore, o aceptar el escape como deuda conocida.
Estado real: 16 recetas (2026-07-17)
Este doc decía 47. Eran 47 el 2026-07-16; desde entonces se migraron 31 y nadie lo actualizó, así que el frente se leía 3× más grande de lo que es. Recontado hoy.
CÓMO CONTAR — no uses 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. Contá parseando el TOML:
python3 - <<'PY'
import tomllib, glob, os
for f in sorted(glob.glob('recipes/*.toml')):
try: d = tomllib.load(open(f, 'rb'))
except Exception: continue
if d.get('build', {}).get('compiler') == 'gcc':
print(os.path.basename(f)[:-5])
PY
Y ojo con la otra dirección: declarar zig-cc no prueba que construya con zig-cc. pigz
declaraba zig-cc y construía con gcc igual (7d86dbf) — lo cazó harkaq midiendo el build, no
leyendo la receta. La receta dice la intención; harkaq dice el hecho. Este doc lista lo
declarado; para lo real, medí.
C (4)
- file — link=static
- libgcrypt — link=static
- libsodium — link=static
- linux-pam — link=dynamic
Rust con sys-crate C (12) — gcc para el C embebido (libgit2-sys, mlua-sys, etc)
- broot
- cargo-audit
- cargo-cache
- delta
- git-absorb
- gitui
- helix
- hurl
- ouch
- xplr
- yazi
- zellij
xplr estaba mal clasificada acá como "C puro": es Rust (embebe mlua-sys, que compila Lua en C).
La raíz de las 12 Rust: el runtime de UNWINDING de libgcc
Las 12 no son 12 problemas, son uno. Su receta lo dice (ej. xplr): bajo zig-cc el link falla con
símbolos de unwinding sueltos (_Unwind_GetCFA, _Unwind_DeleteException) que aporta libgcc;
compiler="gcc" usa el musl-gcc de Alpine, que trae ese runtime. O sea: la deuda no es "zig
miscompila 12 programas", es "falta un runtime de unwinding para el C de los sys-crates".
Converge con el frente static (scripts/static-audit.sh, 2026-07-17): helix y tuc salían
dinámicas arrastrando libgcc_s.so.1 de Alpine dentro del binario final — la misma libgcc, por
la misma razón, pero medida en runtime en vez de en build. Es deuda de matar-gcc que ninguna
declaración registra, invisible hasta que se midió. Un fix del unwinding cerraría las dos a la vez.
Precedente de que se puede: el artefacto de cmake arrastraba libstdc++/libgcc_s de Alpine a
cada build que lo declaraba como dep, y -static-libstdc++ -static-libgcc lo dejó con NEEDED sólo
libc.musl.