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…

TOML 1471Shell 173Rust 105Markdown 943545 Definiciones

arquitectura: el trío de fuentes se publica con `--with-pic` — decisión del operador

`libpng`, `freetype` y `fontconfig` publicaban su `.a` SIN PIC, y un `.a` no-PIC **no puede entrar
en una biblioteca compartida**. Mientras todo lo que el corpus produjera fueran ejecutables
estáticos eso no estorbaba; lo destapó `fcitx5`, que produce ocho `.so` porque sus métodos de
entrada se cargan con `dlopen`:

    7365 × ld.lld: relocation R_X86_64_32 cannot be used against local symbol; recompile with -fPIC
    >>> in archive /usr/lib/libpng16.a · /usr/lib/libfreetype.a · /usr/lib/libfontconfig.a

y los pide `libclassicui.so`, que es la barra de candidatos del IME — no un módulo opcional.

⚠ **ES LO CONTRARIO DE LA DECISIÓN DEL 2026-08-21, y el cambio es deliberado.** Ese día el operador
decidió NO PIC-ificar `libpng` para arreglar `gdk-pixbuf`: «tiene dependientes en cuatro colas y es
estático por diseño; eso es arquitectura del corpus», y allá la salida correcta fue desactivar el
único `.so` que estorbaba (`-Dgif=disabled`). Lo que cambió no es el coste —es el mismo— sino QUÉ SE
COMPRA: allá, salvar un `.so` que nadie quería; acá, una capacidad entera (escribir chino, japonés y
coreano) y cualquier app futura que necesite enlazar desde un `.so`.

Coste medido ANTES de decidir, y confirmado después de mover los hashes:

    40 recetas caen a deuda (la unión de los dependientes transitivos de los tres; no 133: se
       solapan mucho)
    22 son HOJAS del grafo ⇒ construir ésas arrastra el resto, porque `takana build` resuelve deps
       recursivamente. Entre ellas: obs-studio, mpv, foot, plasma-desktop, xdg-desktop-portal,
       zathura-pdf-poppler, swayimg, las cinco pata-*, y fcitx5
    5 imágenes de escritorio rearman: kde 18 nodos · gnome 16 · sway 16 · cosmic 14 · mirada 11

⇒ La clausura va a bajar de 10 de 10 mientras la cascada muele, y eso es esperado, no una
regresión: el `git diff` de `cierres.json` lo va a mostrar perfil por perfil.

`--with-pic` es la forma de libtool y ya era la convención del repo (17 recetas la usaban). El coste
técnico de PIC es una indirección por acceso a global; los ejecutables estáticos siguen enlazando
igual, y el `-no-pie` del `compile` no se toca — un ejecutable no-PIE puede enlazar objetos PIC.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

a64fb640e226068b45dc93f98855b90c0ab43406 · por Sergio · (hace 2 d) · padre 57cd6aab9 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

3 archivos · +75 −3

diff --git a/recipes/fontconfig.toml b/recipes/fontconfig.toml
index 1a77baaa..a7271240 100644
--- a/recipes/fontconfig.toml
+++ b/recipes/fontconfig.toml
@@ -10,7 +10,31 @@ compiler = "zig-cc"
 target   = "x86_64-linux-musl"
 link     = "static"
 [build.phases]
-configure = "./configure --prefix=/usr --sysconfdir=/etc --disable-shared --enable-static --disable-docs"
+# ── ⚠ `--with-pic`: DECISIÓN DE ARQUITECTURA DEL CORPUS, tomada el 2026-10-19 ──────────────────
+# Este `.a` se publicaba SIN PIC, y un `.a` no-PIC **no puede entrar en una biblioteca compartida**.
+# Mientras todo lo que el corpus produjera fueran ejecutables estáticos, eso no estorbaba: un
+# ejecutable sí enlaza un `.a` no-PIC.
+#
+# Lo destapó `fcitx5`, que produce OCHO `.so` porque sus métodos de entrada se cargan con `dlopen`:
+#     7365 × ld.lld: error: relocation R_X86_64_32 cannot be used against local symbol;
+#                    recompile with -fPIC
+#     >>> in archive /usr/lib/libpng16.a · /usr/lib/libfreetype.a · /usr/lib/libfontconfig.a
+# y los pide `libclassicui.so`, que ES la barra de candidatos del IME — no un módulo opcional que se
+# pueda apagar.
+#
+# ⚠ **ESTO ES LO CONTRARIO DE LA DECISIÓN DEL 2026-08-21, y el cambio es deliberado.** Ese día el
+# operador decidió NO PIC-ificar `libpng` para arreglar `gdk-pixbuf`: «tiene dependientes en cuatro
+# colas y es estático por diseño; eso es arquitectura del corpus», y allá la salida correcta fue
+# desactivar el único `.so` que estorbaba (`-Dgif=disabled`). La diferencia de hoy no es el coste
+# —que se midió y es el mismo— sino QUÉ SE COMPRA: allá, salvar un `.so` que nadie quería; acá,
+# una capacidad entera (escribir chino, japonés y coreano) y cualquier app futura que necesite
+# enlazar desde un `.so`. Coste medido antes de decidir: **40 recetas** en la unión de los
+# dependientes transitivos de los tres (no 133: se solapan) y las CINCO imágenes de escritorio.
+#
+# `--with-pic` es la forma de libtool y la convención del repo (17 recetas la usaban ya). El coste
+# técnico de PIC es una indirección por acceso a global; los ejecutables estáticos siguen enlazando
+# igual, y `-no-pie` del `compile` no se toca: un ejecutable no-PIE puede enlazar objetos PIC.
+configure = "./configure --prefix=/usr --sysconfdir=/etc --disable-shared --enable-static --with-pic --disable-docs"
 compile   = 'make LDFLAGS="-all-static -no-pie" -j"$(nproc)"'
 install   = 'make install DESTDIR=/out LDFLAGS="-all-static -no-pie"'
 # libpng+zlib: freetype se compila --with-png, así que freetype2.pc trae `Requires: libpng`
diff --git a/recipes/freetype.toml b/recipes/freetype.toml
index ac97365f..0f5b37c9 100644
--- a/recipes/freetype.toml
+++ b/recipes/freetype.toml
@@ -26,7 +26,31 @@ flags    = []
 # Se arregla acá y no quitando `bzip2-dev` del lab porque esto mueve el hash de freetype y sus
 # dependientes; lo otro re-hashearía el corpus ENTERO por tercera vez en un día.
 # freetype no necesita bz2: sólo sirve para fuentes PCF comprimidas con bzip2.
-configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-shared --enable-static --without-harfbuzz --without-brotli --with-bzip2=no --with-zlib=yes --with-png=yes CPPFLAGS=-I/usr/include LDFLAGS=-L/usr/lib'
+# ── ⚠ `--with-pic`: DECISIÓN DE ARQUITECTURA DEL CORPUS, tomada el 2026-10-19 ──────────────────
+# Este `.a` se publicaba SIN PIC, y un `.a` no-PIC **no puede entrar en una biblioteca compartida**.
+# Mientras todo lo que el corpus produjera fueran ejecutables estáticos, eso no estorbaba: un
+# ejecutable sí enlaza un `.a` no-PIC.
+#
+# Lo destapó `fcitx5`, que produce OCHO `.so` porque sus métodos de entrada se cargan con `dlopen`:
+#     7365 × ld.lld: error: relocation R_X86_64_32 cannot be used against local symbol;
+#                    recompile with -fPIC
+#     >>> in archive /usr/lib/libpng16.a · /usr/lib/libfreetype.a · /usr/lib/libfontconfig.a
+# y los pide `libclassicui.so`, que ES la barra de candidatos del IME — no un módulo opcional que se
+# pueda apagar.
+#
+# ⚠ **ESTO ES LO CONTRARIO DE LA DECISIÓN DEL 2026-08-21, y el cambio es deliberado.** Ese día el
+# operador decidió NO PIC-ificar `libpng` para arreglar `gdk-pixbuf`: «tiene dependientes en cuatro
+# colas y es estático por diseño; eso es arquitectura del corpus», y allá la salida correcta fue
+# desactivar el único `.so` que estorbaba (`-Dgif=disabled`). La diferencia de hoy no es el coste
+# —que se midió y es el mismo— sino QUÉ SE COMPRA: allá, salvar un `.so` que nadie quería; acá,
+# una capacidad entera (escribir chino, japonés y coreano) y cualquier app futura que necesite
+# enlazar desde un `.so`. Coste medido antes de decidir: **40 recetas** en la unión de los
+# dependientes transitivos de los tres (no 133: se solapan) y las CINCO imágenes de escritorio.
+#
+# `--with-pic` es la forma de libtool y la convención del repo (17 recetas la usaban ya). El coste
+# técnico de PIC es una indirección por acceso a global; los ejecutables estáticos siguen enlazando
+# igual, y `-no-pie` del `compile` no se toca: un ejecutable no-PIE puede enlazar objetos PIC.
+configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-shared --enable-static --with-pic --without-harfbuzz --without-brotli --with-bzip2=no --with-zlib=yes --with-png=yes CPPFLAGS=-I/usr/include LDFLAGS=-L/usr/lib'
 compile   = 'make'
 install   = 'make DESTDIR=/out install'
 
diff --git a/recipes/libpng.toml b/recipes/libpng.toml
index a9b695bd..fc811fcd 100644
--- a/recipes/libpng.toml
+++ b/recipes/libpng.toml
@@ -12,7 +12,31 @@ target   = "x86_64-linux-musl"
 link     = "static"
 flags    = []
 [build.phases]
-configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-shared --enable-static CPPFLAGS=-I/usr/include LDFLAGS=-L/usr/lib'
+# ── ⚠ `--with-pic`: DECISIÓN DE ARQUITECTURA DEL CORPUS, tomada el 2026-10-19 ──────────────────
+# Este `.a` se publicaba SIN PIC, y un `.a` no-PIC **no puede entrar en una biblioteca compartida**.
+# Mientras todo lo que el corpus produjera fueran ejecutables estáticos, eso no estorbaba: un
+# ejecutable sí enlaza un `.a` no-PIC.
+#
+# Lo destapó `fcitx5`, que produce OCHO `.so` porque sus métodos de entrada se cargan con `dlopen`:
+#     7365 × ld.lld: error: relocation R_X86_64_32 cannot be used against local symbol;
+#                    recompile with -fPIC
+#     >>> in archive /usr/lib/libpng16.a · /usr/lib/libfreetype.a · /usr/lib/libfontconfig.a
+# y los pide `libclassicui.so`, que ES la barra de candidatos del IME — no un módulo opcional que se
+# pueda apagar.
+#
+# ⚠ **ESTO ES LO CONTRARIO DE LA DECISIÓN DEL 2026-08-21, y el cambio es deliberado.** Ese día el
+# operador decidió NO PIC-ificar `libpng` para arreglar `gdk-pixbuf`: «tiene dependientes en cuatro
+# colas y es estático por diseño; eso es arquitectura del corpus», y allá la salida correcta fue
+# desactivar el único `.so` que estorbaba (`-Dgif=disabled`). La diferencia de hoy no es el coste
+# —que se midió y es el mismo— sino QUÉ SE COMPRA: allá, salvar un `.so` que nadie quería; acá,
+# una capacidad entera (escribir chino, japonés y coreano) y cualquier app futura que necesite
+# enlazar desde un `.so`. Coste medido antes de decidir: **40 recetas** en la unión de los
+# dependientes transitivos de los tres (no 133: se solapan) y las CINCO imágenes de escritorio.
+#
+# `--with-pic` es la forma de libtool y la convención del repo (17 recetas la usaban ya). El coste
+# técnico de PIC es una indirección por acceso a global; los ejecutables estáticos siguen enlazando
+# igual, y `-no-pie` del `compile` no se toca: un ejecutable no-PIE puede enlazar objetos PIC.
+configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-shared --enable-static --with-pic CPPFLAGS=-I/usr/include LDFLAGS=-L/usr/lib'
 compile   = 'make LDFLAGS="-all-static -no-pie" -j"$(nproc)"'
 install   = 'make DESTDIR=/out install LDFLAGS="-all-static -no-pie"'
 [deps]