diff --git a/docs/26-atuq-envoltorio-gecko.md b/docs/26-atuq-envoltorio-gecko.md index 25cce09b..b4ea2753 100644 --- a/docs/26-atuq-envoltorio-gecko.md +++ b/docs/26-atuq-envoltorio-gecko.md @@ -326,6 +326,40 @@ 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. +### 2.quinquies La v0.3 y los tres mecanismos: dos muertos, uno vivo + +La página de inicio y la pestaña nueva parecían un `pref` y resultaron ser un frente. Lo que se +midió, en orden: + +| Mecanismo | Resultado | +|---|---| +| `distribution/extensions/` — el clásico de las distros | **No instala nada.** Firefox retiró el *sideloading*. El `extensions.json` del perfil ni lo mencionaba y el log no dijo una palabra: fallo perfectamente silencioso | +| `policies.json` → `ExtensionSettings` con `install_url` | **Se lee** (`browser.policies.applied=true` en el perfil) y falla nombrándose: `ERROR_SIGNEDSTATE_REQUIRED` | +| `xpinstall.signatures.required = false` | **No alcanza** — la exigencia viene COMPILADA | + +**El instrumento que destrabó el diagnóstico fue un testigo.** `defaultPref` no deja rastro en +`prefs.js` —sólo se guarda lo que difiere del default— así que un autoconfig que **no se ejecuta** +es indistinguible de uno que sí y no hace nada. `atuq.cfg` escribe ahora `atuq.autoconfig.ok` como +pref de **usuario**, legible desde fuera sin abrir el navegador. Salió `true` ⇒ el `.cfg` corría, y +por lo tanto la pref de firma se estaba ignorando. + +De ahí `MOZ_REQUIRE_SIGNING` vacío en `recipes/firefox.toml`. Dos detalles que costaron cada uno su +vuelta: + +1. El default sale del **milestone** (`milestone.is_release_or_beta`), no del canal de actualización. + El nuestro es `default` y la exigencia estaba activa igual. +2. **Se desactiva con el valor VACÍO, no con cero.** `=0` muere con «takes 0 values»: es booleana y + el cero es un valor que no acepta. Leído del parser de mozbuild, no deducido. + +**El precio, escrito:** este Firefox deja de exigir la firma de Mozilla para cualquier complemento. +La alternativa es firmar en AMO —cuenta y revisión de Mozilla por versión—, que es la dependencia +externa que esta distro existe para no tener. Y no es un desvío: **sin esto, el `sct` del §6.1 +tampoco se podría shipear nunca**, así que la unidad 6 dependía de ésta sin que el plan lo dijera. + +**Método que conviene repetir:** la prueba del testigo se hizo **sin reconstruir**, montando el +`.cfg` modificado con `--ro-bind` por encima del artefacto. Editar el fichero en el rootfs habría +escrito sobre un **hardlink del store** y corrompido el artefacto sellado. + ## 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 @@ -351,7 +385,8 @@ siguiente. | 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 | 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.d | **Abrirlo en pantalla** — destapó EXDEV, el lanzador, el `atk` envenenado y la cadena GTK3 estática | «usable», no sólo «sellado» | — | +| 4.e | **v0.3: página de inicio y pestaña nueva** por extensión de sistema; exigió `MOZ_REQUIRE_SIGNING` vacío | y con eso queda destrabada la unidad 6 (`sct`) | rebuild de firefox | | 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 |