diff --git a/docs/26-atuq-envoltorio-gecko.md b/docs/26-atuq-envoltorio-gecko.md index 5e2bc5b5..42e18465 100644 --- a/docs/26-atuq-envoltorio-gecko.md +++ b/docs/26-atuq-envoltorio-gecko.md @@ -178,6 +178,49 @@ bit-repro; a nosotros nos rompe el invariante. La salida: **generar el perfil UN artefacto propio, consumido por hash** desde `firefox`. El build optimizado vuelve a ser determinista aunque su insumo no lo sea, y el perfil se regenera a propósito, no por accidente. +### 3.quater La cadena wasm, y las tres cosas que costó (2026-09-06) + +`--without-wasm-sandboxed-libraries` se cambió por `--with-wasi-sysroot=/usr/share/wasi-sysroot`, +que es literalmente el flag de Alpine. Detrás hay cinco recetas nuestras, en este orden obligatorio: + +``` +wasi-libc-headers → wasi-compiler-rt → wasi-libc → wasi-libcxx → wasi-sdk → firefox +``` + +`wasi-libc-headers` existe **sólo** para romper el ciclo del bootstrap y pinea un commit VIEJO a +propósito (triple `wasm32-wasi`), mientras `wasi-libc` pinea el nuevo (`wasm32-wasip1`, el que +clang 22.1 usa de verdad). Es lo mismo que hace Alpine y no es un descuido. + +**Lo que costó, que es la parte reusable:** + +1. **`check-symbols` falla por sesgo de clang, no por un artefacto malo.** El lab trae clang 22.1.8 + y el snapshot del árbol viene de uno anterior: sobra `#define __wasip1__ 1` y nada más. Se + reconcilia el snapshot; **no** se salta con `make no-check-symbols`, que se lleva por delante la + comparación de símbolos —la mitad que sí vale y que pasaba byte a byte. + +2. **Faltaba `wasi-libcxx`, y el hueco era visible en el grafo sin construir nada.** El configure + murió a los 6 s con `'cstring' file not found`, culpando a los headers de WASI, que estaban + perfectos: `` es C++ y las librerías enjauladas no son todas C. El `wasi-sdk` de Alpine + declara `wasi-libc wasi-libcxx wasi-compiler-rt` —TRES— y la cadena tenía dos. **El `depends` + del paquete ajeno equivalente es una comprobación de completitud gratis**, antes de gastar CPU. + +3. **Un directorio VACÍO que sí importa.** Con `wasi-libcxx` sellado el configure volvió a morir + igual, y `cstring` estaba en el artefacto: clang no lo buscaba. Falta el `mkdir -p + include/c++/v1` que Alpine tiene en su `package()` y que parece ruido de empaquetado — es la + sonda por la que el driver decide que el sysroot tiene layout de libc++. Medido dentro del lab: + sin ese directorio, `'cstring' file not found`; con él, exit 0. Es el **reverso exacto de la + regla 3 del `CLAUDE.md`**: allá un directorio vacío es un artefacto mentiroso, acá es una + declaración dirigida al compilador. + +De ahí sale el criterio de guardián que ahora usan estas recetas: **«existe» no es «se encuentra»**. +`wasi-libcxx` corre hoy la misma prueba que hace el configure de firefox, contra un sysroot +fusionado con el de su dep, así que un fallo aparece en el segundo 20 de una receta chica —con la +lista de búsqueda de clang impresa— y no en el segundo 6 de un build de cuatro horas que además +culpa a otro. Y `firefox` exige RLBox **en el binario**: sobre `b3:352d7880` (el último con RLBox +apagado) los patrones `w2c_`, `rlbox` y `wasm2c` dan cero los tres en `libxul.so`, así que +cualquiera apareciendo prueba que la jaula entró. Es la tercera repetición de la lección de +`MOZ_REQUIRE_SIGNING` y `MOZ_BUILD_DATE`: una bandera que el configure acepta y el artefacto ignora. + ## 4. Lo que `atuq` NO promete Esta sección existe antes que la lista de features a propósito, con el mismo criterio que el modelo @@ -408,7 +451,7 @@ siguiente. | 2 | ~~`llvm-toolchain`~~ → **`apk add lld` + `compiler="clang"`** ✅ 2026-09-05 | LTO **y** el muro 3 | — | | 3 | Construir el `firefox` con LTO (hash `b3:6f2a3b2f`) | el eje de velocidad **y** las extensiones de `atuq` | 2 ✅ | | 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 | +| 3.b | **RLBox ENCENDIDO** ✅ 2026-09-06 — cadena wasm de CINCO recetas selladas + guardián que la exige en el binario; firefox construyendo | 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 | el chrome de verdad | — | | 4.d | **Abrirlo en pantalla** — destapó EXDEV, el lanzador, el `atk` envenenado y la cadena GTK3 estática | «usable», no sólo «sellado» | — |