tawasuyu

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…

⎇ 2d8514555ca600b77cc12550507c2ec92ae48395 tandas/needs-review-harkaq/migracion-zig.md Markdown · 57 siq'ikuna · 3.1 KB Ñawpa willay ch'uya

matar-gcc: riesgo GUI VERIFICADO — el ABI de las libs migradas es idéntico 2d8514555 · sergio ·

1# Migración compiler=gcc → zig-cc (matar-gcc) — BALANCE FINAL (2026-07-16)
2
3harkaq nombró 47 recetas `compiler=gcc` (invisibles hasta que aprendió a leer el `compiler=`).
4`migra-zig.sh` (build con zig + smoke-test) midió cuáles migran, verificadas en el laptop.
5
6## MIGRADAS a zig-cc — 29 recetas C ✅
7bzip2 expat json-c gzip htop less libpng libyaml zstd libffi xz freetype jq libassuan libgpg-error
8libssh2 libuv libxml2 nano pcre2 pigz socat tig tmux vim curl libevent libevdev mtdev
9
10**Deuda histórica**: marcadas con zig 0.13/0.16 (que segfaultaba C clásicos); zig mejoró, el gcc
11quedó por inercia. mtdev queda de-Alpinizado por entero (config.sub soberano + zig).
12
13## MATRACA DURA — 4 recetas, gcc JUSTIFICADO (zig genuinamente falla)
14Probadas y diagnosticadas; NO es inercia, zig no las soporta:
15- **file**: el `file` que zig compila SEGFAULTEA al generar `magic.mgc`. Persiste con `-O0`,
16  `-O1`, `-fno-strict-aliasing` ⇒ codegen profundo de zig, no optimización.
17- **linux-pam**: `configure: error: cannot run C compiled programs` — el binario de test de zig no
18  corre (mismo tipo de miscompile).
19- **libgcrypt, libsodium**: no construyen con zig. Assembly/detección de features criptográficas
20  que zig maneja distinto.
21
22Estas 4 se quedan en `compiler=gcc` con razón documentada. Son parte del "gueto gcc" legítimo.
23
24## DIFERIDAS — 11 Rust con sys-crate C
25cargo-audit broot cargo-cache delta git-absorb gitui helix hurl ouch xplr yazi zellij — el gcc
26compila el C embebido de libgit2-sys/etc, no el Rust. Otra evaluación.
27
28## Balance
29De 47: **29 migradas**, 4 matraca dura (gcc justificado), 11 Rust diferidas, 3 no medidas.
30Los `compiler=gcc` bajaron de 47 a 18. matar-gcc pasó de invisible a **medido, cerrado en su
31mayoría, y con el residuo justificado**.
32
33**Rollout: las 29 re-hashean (índice firmado 748) ⇒ re-firma en el próximo packaging.**
34
35## Riesgo sobre la cadena GUI: VERIFICADO (ABI idéntico) — 2026-07-16
36
37Las 29 migradas tienen **36 consumidores**, incluidos cairo, gtk4, pango, harfbuzz, fontconfig,
38libadwaita, mesa y mirada. 6 de ellas (expat, freetype, libpng, libffi, pcre2, zstd) son deps de
39ese stack, y la regla del proyecto prohíbe rebuildear la GUI en el laptop.
40
41**No se pudo construir la cadena GUI completa en ninguna máquina** (el laptop no construye
42`python3` — gotcha conocido; el worker golden no construye `busybox` — store parcial). Así que se
43verificó lo que de verdad decide el link: **el ABI de las libs migradas**.
44
45| lib | símbolos globales | gcc vs zig |
46|---|---|---|
47| freetype | 90 | idénticos |
48| expat | 12 | idénticos |
49| libpng / libpng16 | 385 | idénticos |
50| libffi | 68 | idénticos |
51
52⇒ **La GUI linkea igual.** El cambio gcc→zig no altera la superficie que consumen sus consumidores.
53
54**Ojo al comparar** (dos falsos positivos en el intento): `find | head -1` puede tomar libs
55distintas de cada artefacto (`libpng.a` vs `libpng16.a`), y `nm --defined-only` incluye símbolos
56**internos** de los `.o` — que difieren entre compiladores sin tocar el ABI (294 "diferencias"
57espurias en libpng). Comparar **el mismo fichero** y con **`--extern-only`**.

migracion-zig.md

Migración compiler=gcc → zig-cc (matar-gcc) — BALANCE FINAL (2026-07-16)

harkaq nombró 47 recetas compiler=gcc (invisibles hasta que aprendió a leer el compiler=). migra-zig.sh (build con zig + smoke-test) midió cuáles migran, verificadas en el laptop.

MIGRADAS a zig-cc — 29 recetas C ✅

bzip2 expat json-c gzip htop less libpng libyaml zstd libffi xz freetype jq libassuan libgpg-error libssh2 libuv libxml2 nano pcre2 pigz socat tig tmux vim curl libevent libevdev mtdev

Deuda histórica: marcadas con zig 0.13/0.16 (que segfaultaba C clásicos); zig mejoró, el gcc quedó por inercia. mtdev queda de-Alpinizado por entero (config.sub soberano + zig).

MATRACA DURA — 4 recetas, gcc JUSTIFICADO (zig genuinamente falla)

Probadas y diagnosticadas; NO es inercia, zig no las soporta:

Estas 4 se quedan en compiler=gcc con razón documentada. Son parte del "gueto gcc" legítimo.

DIFERIDAS — 11 Rust con sys-crate C

cargo-audit broot cargo-cache delta git-absorb gitui helix hurl ouch xplr yazi zellij — el gcc compila el C embebido de libgit2-sys/etc, no el Rust. Otra evaluación.

Balance

De 47: 29 migradas, 4 matraca dura (gcc justificado), 11 Rust diferidas, 3 no medidas. Los compiler=gcc bajaron de 47 a 18. matar-gcc pasó de invisible a medido, cerrado en su mayoría, y con el residuo justificado.

Rollout: las 29 re-hashean (índice firmado 748) ⇒ re-firma en el próximo packaging.

Riesgo sobre la cadena GUI: VERIFICADO (ABI idéntico) — 2026-07-16

Las 29 migradas tienen 36 consumidores, incluidos cairo, gtk4, pango, harfbuzz, fontconfig, libadwaita, mesa y mirada. 6 de ellas (expat, freetype, libpng, libffi, pcre2, zstd) son deps de ese stack, y la regla del proyecto prohíbe rebuildear la GUI en el laptop.

No se pudo construir la cadena GUI completa en ninguna máquina (el laptop no construye python3 — gotcha conocido; el worker golden no construye busybox — store parcial). Así que se verificó lo que de verdad decide el link: el ABI de las libs migradas.

libsímbolos globalesgcc vs zig
freetype90idénticos
expat12idénticos
libpng / libpng16385idénticos
libffi68idénticos

⇒ La GUI linkea igual. El cambio gcc→zig no altera la superficie que consumen sus consumidores.

Ojo al comparar (dos falsos positivos en el intento): find | head -1 puede tomar libs distintas de cada artefacto (libpng.a vs libpng16.a), y nm --defined-only incluye símbolos internos de los .o — que difieren entre compiladores sin tocar el ABI (294 "diferencias" espurias en libpng). Comparar el mismo fichero y con --extern-only.