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>
This commit is contained in:
@@ -3,58 +3,72 @@
|
|||||||
harkaq clasificaba `/usr/bin/gcc` como sonda esperada SIEMPRE, así que marcaba estas recetas
|
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
|
`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
|
ld). El arreglo (harkaq-suggest, 2026-07-16): para `compiler=gcc` los frontends de gcc son DEUDA
|
||||||
DE COMPILADOR, no sonda. Esto redimensiona matar-gcc de "{kernel, cmake}" a **47 recetas**.
|
DE COMPILADOR, no sonda.
|
||||||
|
|
||||||
Cada una compila con gcc porque zig-cc la miscompila/no la soporta (documentado en su receta).
|
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.
|
**Acción por receta:** migrar a zig-cc cuando zig mejore, o aceptar el escape como deuda conocida.
|
||||||
|
|
||||||
## C puro (36) — candidatas a zig cuando zig mejore
|
## Estado real: 16 recetas (2026-07-17)
|
||||||
- bzip2
|
|
||||||
- expat
|
Este doc decía **47**. Eran 47 el 2026-07-16; desde entonces se migraron 31 y nadie lo actualizó,
|
||||||
- curl
|
así que el frente se leía 3× más grande de lo que es. Recontado hoy.
|
||||||
- file
|
|
||||||
- freetype
|
**CÓMO CONTAR — no uses grep.** `grep -l 'compiler *= *"gcc"' recipes/*.toml` da **18**: cuenta
|
||||||
- gzip
|
`bzip2` y `pigz`, que ya son zig-cc y sólo *mencionan* gcc en un comentario. El grep no distingue
|
||||||
- htop
|
campo de comentario. Contá parseando el TOML:
|
||||||
- json-c
|
|
||||||
- jq
|
```sh
|
||||||
- less
|
python3 - <<'PY'
|
||||||
- libevent
|
import tomllib, glob, os
|
||||||
- libgcrypt
|
for f in sorted(glob.glob('recipes/*.toml')):
|
||||||
- libgpg-error
|
try: d = tomllib.load(open(f, 'rb'))
|
||||||
- libssh2
|
except Exception: continue
|
||||||
- libffi
|
if d.get('build', {}).get('compiler') == 'gcc':
|
||||||
- libassuan
|
print(os.path.basename(f)[:-5])
|
||||||
- libxml2
|
PY
|
||||||
- libevdev
|
```
|
||||||
- linux-pam
|
|
||||||
- libpng
|
**Y ojo con la otra dirección**: declarar `zig-cc` no prueba que construya con zig-cc. `pigz`
|
||||||
- libsodium
|
*declaraba* zig-cc y construía con gcc igual (7d86dbf) — lo cazó harkaq midiendo el build, no
|
||||||
- libyaml
|
leyendo la receta. La receta dice la intención; **harkaq dice el hecho**. Este doc lista lo
|
||||||
- libuv
|
declarado; para lo real, medí.
|
||||||
- mtdev
|
|
||||||
- nano
|
## C (4)
|
||||||
- pigz
|
|
||||||
- pcre2
|
- file — link=static
|
||||||
- procps-ng
|
- libgcrypt — link=static
|
||||||
- socat
|
- libsodium — link=static
|
||||||
- tig
|
- linux-pam — link=dynamic
|
||||||
- tmux
|
|
||||||
- vim
|
## Rust con sys-crate C (12) — gcc para el C embebido (libgit2-sys, mlua-sys, etc)
|
||||||
- wget
|
|
||||||
- xplr
|
|
||||||
- xz
|
|
||||||
- zstd
|
|
||||||
|
|
||||||
## Rust con sys-crate C (11) — gcc para el C embebido (libgit2-sys, etc)
|
|
||||||
- broot
|
- broot
|
||||||
- cargo-audit
|
- cargo-audit
|
||||||
- cargo-cache
|
- cargo-cache
|
||||||
- delta
|
- delta
|
||||||
- gitui
|
|
||||||
- git-absorb
|
- git-absorb
|
||||||
|
- gitui
|
||||||
- helix
|
- helix
|
||||||
- hurl
|
- hurl
|
||||||
- ouch
|
- ouch
|
||||||
|
- xplr
|
||||||
- yazi
|
- yazi
|
||||||
- zellij
|
- 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`.
|
||||||
|
|||||||
Reference in New Issue
Block a user