🚪 cosmic: EL GATE PASADO — cosmic-comp sellado (b3:b8abc52f), y cosmic-idle con él

El compositor compiló a la primera en 51m39s (JOBS=1 + lto fat), sin un solo
parche a la fuente; lo único que hubo que corregir fue el --bin del gotcha 1.

Lo que vale es el enlace, porque es medición y no impresión: ocho NEEDED, y las
siete primeras son EXACTAMENTE los backends de smithay que la receta declara
(display-info, gbm, seat, udev, input, pixman, xkbcommon). La octava es musl.
No hay libgcc_s —el compositor no arrastra la deuda del unwinder— y no aparece
nada sin declarar: la clausura de build y la de runtime coinciden.

Un compositor Wayland completo (DRM/GBM/EGL/libinput/seat/Vulkan/XWayland,
renderer multi-GPU y UI en iced) cerrando con ocho librerías compartidas y cero
parches es el resultado más limpio de las cuatro campañas de escritorio.

Queda anotado además por qué cosmic-settings-daemon NO se resuelve copiando
pipewire: copiar entre colas es gratis sólo si TODA la clausura transitiva
resuelve igual, y ahí glib resolvería distinto (sombra de GNOME b3:f6ccdf98 vs
corpus b3:93d2cad0) ⇒ un segundo pipewire contra otra glib, que es el cuadro de
dos registros de GType que la campaña GNOME ya midió y evitó. Medido con yupana
radio antes de tocar nada.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-03 11:22:50 -04:00
co-authored by Claude Opus 5
parent 381a5c8ebe
commit 5216d46216
+49 -5
View File
@@ -65,20 +65,64 @@ Más `cosmic-settings-daemon` y `xdg-desktop-portal-cosmic` fuera de esa lista.
| `cosmic-icons` | ✅ sellado (671 SVGs) | `b3:94d06f77` |
| `cosmic-bg` | ✅ sellado (estático) | `b3:7b4962f0` |
| `dav1d` 1.5.4 | ✅ sellado (dep arrastrada, ver gotcha 8) | `b3:aab7a874` |
| `cosmic-comp` | 🔨 en construcción | — |
| `cosmic-idle` · `cosmic-osd` | 🔨 en construcción | — |
| **`cosmic-comp`** | **SELLADO — el gate** | `b3:b8abc52f` |
| `cosmic-idle` | ✅ sellado (estático) | `b3:175632b7` |
| `cosmic-osd` | 🔨 en construcción | — |
| `cosmic-panel` · `cosmic-launcher` · `cosmic-app-library` · `cosmic-workspaces-epoch` · `cosmic-notifications` | receta escrita, sin construir | — |
| `cosmic-settings-daemon` | ni receta | — |
`cosmic-settings-daemon` queda para el final a propósito: es el único con cadena propia —trae
`cosmic-pipewire` y tres crates de audio adentro—, así que va a pedir `pipewire`, que hoy vive
únicamente en la cola GNOME y habrá que copiar como se copió `libdisplay-info`.
### `cosmic-settings-daemon`: por qué queda al final y NO se resuelve copiando
Es el único con cadena propia. Su workspace incluye `audio-server` como dep de path **no opcional**,
que arrastra `cosmic-pipewire``pipewire-sys``libpipewire-0.3` por pkg-config. Y `pipewire` hoy
vive sólo en las colas GNOME y KDE.
**Acá el truco de copiar deja de ser gratis, y eso corrige lo que dice más arriba.** La regla completa
es: *copiar una receta entre colas es gratis sólo si **toda su clausura transitiva** resuelve a lo
mismo.* Se cumplió con `libdisplay-info`, `hwdata` y `nasm` —sus deps están todas en el corpus—, y
**no** se cumple con pipewire: de sus catorce deps, cinco viven sólo en colas ajenas
(`dbus-shared`, `alsa-lib`, `libsndfile`, `pulseaudio`, `zlib-shared`) y —lo decisivo— **`glib`
resolvería distinto**. Desde `incoming-gnome`, `glib` es la sombra de esa cola (`b3:f6ccdf98`); desde
`incoming-cosmic` sería la del corpus (`b3:93d2cad0`). Son recetas distintas, no la misma en dos
lugares.
O sea que copiar produciría un **segundo pipewire** construido contra otra glib, arrastrando su cadena
entera. Y eso no es sólo caro: es exactamente el cuadro que la campaña GNOME ya midió y evitó —dos
glib distintas con 370 rutas solapadas y dos registros de GType en un proceso—.
Antes de tocar nada se midió con `yupana radio` (la puerta única, nunca `grep`): `pipewire` tiene
radio 1 en GNOME y 2 en KDE, pero `glib` del corpus tiene **21 dependientes transitivos y afecta la
imagen escritorio-gnome**. La decisión correcta no es de esta campaña: es *dónde vive pipewire en el
corpus*, y es una decisión de catálogo, no de COSMIC. Hasta entonces, el escritorio arranca sin
settings-daemon —se pierden brillo, tema automático y perfiles de audio, no el escritorio—.
**El orden no es el de la lista de arranque.** `cosmic-bg` va antes que el panel a propósito: habla
Wayland con `smithay-client-toolkit` y **no toca libcosmic ni iced**, mientras que panel, launcher,
osd y workspaces son todos clientes de iced. Con el fondo sellado, «pinta el fondo pero no el panel»
separa la capa de UI del transporte; sin él, las dos preguntas llegan juntas.
## 🚪 EL GATE PASADO: cosmic-comp compila (2026-08-03)
`b3:b8abc52f`, 51 min 39 s de cargo con `CARGO_BUILD_JOBS=1` y `lto = "fat"`. **A la primera**, salvo
el `--bin` del gotcha 1. Sin un solo parche a la fuente.
Lo que dice el enlace es la parte que vale, porque es la medición y no la impresión:
```
NEEDED: libdisplay-info.so.2 · libgbm.so.1 · libseat.so.1 · libudev.so.1
libinput.so.10 · libpixman-1.so.0 · libxkbcommon.so.0 · libc.so
```
Ocho, y las siete primeras son **exactamente** los backends de smithay que la receta declara. La
octava es musl. **No hay `libgcc_s`** — o sea que el compositor no arrastra la deuda del unwinder que
sí tienen varias recetas Cargo del corpus, porque acá el enlace es dinámico contra musl y no hay
`+crt-static` que forzar. Y **no aparece nada que no se haya declarado**: la clausura de build y la de
runtime coinciden, que es la propiedad que uno quiere y casi nunca se cumple gratis.
Que un compositor Wayland completo —DRM, GBM, EGL, libinput, seat, Vulkan, XWayland, un renderer
multi-GPU y una capa de UI en iced— cierre con ocho librerías compartidas y ningún parche es el
resultado más limpio de las cuatro campañas de escritorio.
## Gotchas medidos (no previstos)
1. **`cargo rustc --` exige UN target.** La fase compile del lab pasa flags tras el `--`, y cualquier