From 00910be94d15d129ae3827644fac66af28d7e31f Mon Sep 17 00:00:00 2001 From: Sergio Date: Sat, 5 Sep 2026 11:47:51 +0000 Subject: [PATCH] =?UTF-8?q?SDD=2026=20=C2=A72.quater:=20abrirlo=20en=20una?= =?UTF-8?q?=20pantalla=20destap=C3=B3=20tres=20fallos=20que=20la=20clausur?= =?UTF-8?q?a=20no=20ve=C3=ADa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Con atuq sellado y verificado, se hidrató y se abrió en waypipe. No arrancó, y los tres motivos son justamente la diferencia entre «sellado» y «usable»: el EXDEV de hidratar a otro mount, el lanzador que no puede ser un symlink porque los ELF no traen RPATH, y un bug del CORPUS —atk se había tragado GObject entero por declarar la glib estática siendo una .so—. El tercero es el que vale escribir: el síntoma (45 GLib-GObject-CRITICAL y un SIGSEGV) no nombra a atk por ningún lado, y no se ve mirando el rootfs porque había UNA sola libgobject. Se caza preguntando quién DEFINE el símbolo, no quién lo usa. Y una corrección de número: firefox se reconstruye en ~50 minutos, no en las cuatro horas que este documento venía repitiendo. Ese número era folclore de la receta, no una medición. --- docs/26-atuq-envoltorio-gecko.md | 33 +++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/docs/26-atuq-envoltorio-gecko.md b/docs/26-atuq-envoltorio-gecko.md index 27e23d09..25cce09b 100644 --- a/docs/26-atuq-envoltorio-gecko.md +++ b/docs/26-atuq-envoltorio-gecko.md @@ -296,6 +296,36 @@ La capa de configuración de la v0.1 son cuatro ficheros —autoconfig, `atuq.cf vive en el perfil y exigiría que el usuario prenda una pref: atuq tiene que verse como atuq en el primer arranque. Falta construirlo: su dep `firefox` está en vuelo. +### 2.quater Abrirlo en una pantalla: tres fallos que la clausura no podía ver + +El 2026-09-05, con `atuq` sellado y verificado, se hidrató y se abrió en el compositor de la sesión +(waypipe). **No arrancó**, y los tres motivos son la diferencia entre «sellado» y «usable»: + +1. **EXDEV al hidratar.** `hydrate` proyecta con hardlinks y `linkat()` rechaza cruzar un punto de + montaje aunque los dos lados sean el mismo filesystem. Acá el store es `/dev/sdb` bind-monteado + y `work/` vive en `/dev/sdc`. El rootfs va bajo `/mnt/cosecha`, donde el volumen está montado + entero. Se comprueba con `findmnt -T`, **nunca** con `stat -c %d`. +2. **El lanzador no puede ser un symlink.** Ni el binario ni sus `.so` traen `RPATH`/`RUNPATH` + (`readelf -d`), así que el motor no encontraba su propio `libnspr4.so` y moría en + `XPCOMGlueLoad`. Es un script con `LD_LIBRARY_PATH` + `exec`, como Debian y Fedora. La + alternativa limpia —`RPATH=$ORIGIN` con `patchelf`, que es lo que hace Alpine— espera a que + `patchelf` exista como receta del corpus. +3. **Un bug del corpus, no de atuq: `atk` se había tragado GObject.** Declaraba la variante + ESTÁTICA de glib y produce un objeto compartido, así que `libatk-1.0.so` llevaba una copia + entera del sistema de tipos. Dos GObject en un proceso ⇒ 45 `GLib-GObject-CRITICAL` y + `Segmentation fault`. **El síntoma no nombra a atk**, y no se ve mirando el rootfs: había una + sola `libgobject`. Se cazó preguntando quién DEFINE el símbolo: + `nm -D --defined-only | grep " T g_type_register_static"` — deben salir uno, salieron + dos. + +Radio medido antes de tocar (`yupana radio atk`): 4 transitivos, 3 sellados a deuda; GNOME fuera +porque usa gtk4. La cadena `atk → gtk3 → firefox → atuq` volvió a sellar 4/4, y **firefox tardó +~50 minutos, no las cuatro horas** que repetía este documento — el número venía del folclore de la +receta, no de una medición. + +**La lección para el plan: ninguna unidad de este frente está cerrada hasta que algo se ABRE en una +pantalla.** La clausura decía 100% con un navegador que no llegaba a pintar un píxel. + ## 7. La costura: un host de native messaging en Rust Todo lo del §6 que no es CSS pasa por **un solo mecanismo**: un proceso Rust que habla native @@ -320,7 +350,8 @@ siguiente. | 3.a | PGO: perfil bajo sway headless, **sellado como artefacto propio** y consumido por hash | la otra mitad de la ganancia | 3 | | 3.b | `wasi-sdk` + `wasi-compiler-rt` ⇒ RLBox encendido | cierra el hueco de seguridad del §3.bis | 2 | | 4 | **`atuq`: receta derivada + overlay de chrome** ✅ v0.1 escrita | el andamio de todo lo demás | 3 | -| 4.b | Branding + re-empaque de `omni.ja` ✅ v0.2 `b3:7eff4ba4` | el chrome de verdad | — | +| 4.b | Branding + re-empaque de `omni.ja` ✅ v0.2 | el chrome de verdad | — | +| 4.d | **Abrirlo en pantalla** — destapó EXDEV, el lanzador y el `atk` envenenado; cadena re-sellada 4/4 | «usable», no sólo «sellado» | — | | 4.c | **`MOZ_BUILD_DATE` determinista en `firefox`** — hoy el `BuildID` es la fecha del build ⇒ el artefacto **no reproduce bit a bit** | el invariante de reproducibilidad | otro build de 4 h + re-sellar atuq | | 5 | Host de native messaging (tawasuyu) | los verbos del §6 | 4 | | 6 | `sct` v1 (extensión + testigo) | el diferenciador que nadie tiene | 5 |