Se descubrió usándolo. `wf-recorder` daba 0 faltantes / 0 muros, y al ir a escribirlo resultó que sus dos backends de audio —pipewire y pulse— existen en las TRES colas de escritorio y en NINGUNA en el corpus. Una receta del corpus no ve una cola hermana, así que wf-recorder construye pero graba MUDO, y no tiene backend ALSA con el que caerse. Lo que eso destapa es más grande que wf-recorder y por eso queda escrito como decisión abierta: **el corpus no tiene ningún cliente de audio salvo ALSA**. Ya chocó dos veces en un día — mpv terminó con `--ao=alsa` en vez de su salida nativa, y ahora esto. Las tres salidas posibles (promover UNA pipewire al corpus / aceptar ALSA como la ABI única / que las apps multimedia vivan en las colas) quedan planteadas con su precio; la primera choca con la enfermedad de las dos glib y no se decide de madrugada. wf-recorder NO se escribe hasta entonces: un grabador de pantalla mudo es la clase de media-cosa que conviene no sellar sin que alguien la haya elegido.
9.3 KiB
Plan — apps de usuario final (montón A del ADR 0015), MEDIDO
Fecha de la medición: 2026-09-03 · Catálogo contra el que se midió: 1079 recetas
(corpus + las cuatro colas) · Instrumento: makedepends+depends del APKBUILD de Alpine de
cada candidata, cruzados contra los nombres de receta que existen en el disco.
Por qué existe este documento
El ADR 0015 parte las apps que faltan en tres montones y dice del A —Firefox, Chromium, LibreOffice, mpv, GIMP, Inkscape, Blender, OBS— que no lo bloquea «nada estructural: son Wayland-nativos y compilables. Falta escribirlas», y propone el orden mpv → OBS → Firefox.
mpv se escribió el 2026-09-03 y esa parte se confirmó. Al ir por el segundo, la medición
desmiente la premisa para el resto del montón: OBS y Firefox no están a una receta de distancia,
están detrás de muros que esta distro levantó a propósito. Este documento deja el dato escrito para
que la decisión se tome mirándolo y no de memoria.
Cómo leer la tabla
Dos columnas, y la que importa es la segunda:
- recetas que faltan — cuántos
makedependsde Alpine no tienen receta acá. Es una cota superior floja: Alpine construye con todo activado y nosotros no. El control lo dampv, que YA ESTÁ SELLADA y aun así aparece con 16 faltantes — son exactamente las perillas que su receta apaga a propósito (jack, sndio, libbluray, zimg, rubberband…). O sea: un número alto no prueba que sea caro. - muros de diseño — dependencias que NO son «una receta más», sino decisiones ya tomadas de
esta distro: GTK3 aparcado, X11 al tacho, Qt6 que vive sólo en
incoming-kde, toolchain wasi inexistente. Un muro no se paga escribiendo una receta: se paga cambiando una decisión.
La tabla
| app | faltan | muros | veredicto |
|---|---|---|---|
| wf-recorder | 0 | (ver ⚠ abajo) | construible hoy sin audio: su captura de sonido es pulse o pipewire, y ninguno de los dos se alcanza desde el corpus. |
| imv | 7 | — | barato: los 7 son cargadores de formato opcionales (heif, jxl, freeimage…). Visor de imágenes. |
| zathura | 8 | — | lector de PDF; girara es su propia lib y ya usa GTK4 en Alpine. |
| mupdf | 9 | X11 | el X11 es del visor mupdf-x11; el motor y mupdf-gl no. Requiere mirar. |
| inkscape | 14 | — | sin muros, pero gtkmm3 en la lista hay que verificarlo (¿GTK3 encubierto?). |
| mpv | 16 | X11 | YA SELLADA — es el control del método, no una candidata. |
| gimp | 18 | GTK3, X11 | GIMP 2.10 es GTK2/3. Fuera de alcance mientras GTK3 esté aparcado. |
| obs-studio | 20 | Qt6, X11 | ver abajo. |
| firefox | 26 | GTK3, X11, wasi | ver abajo. |
| chromium | 38 | GTK3, Qt6, X11 | peor que Firefox por todos lados. |
| libreoffice | 59 | GTK3, Qt6, X11 | 59 recetas y tres muros. No es un ticket, es un año. |
⚠ El defecto del método, encontrado al usarlo (y lo que destapó)
La columna «recetas que faltan» pregunta ¿existe esta receta en el disco? y esa es la pregunta equivocada. La correcta es ¿la alcanza el consumidor? — porque una receta resuelve sus deps sibling-first (su propia cola) y después el catálogo PADRE, nunca una cola hermana.
Se descubrió al ir a escribir wf-recorder, que la tabla daba en 0/0: su makedepends pide
pipewire-dev y pulseaudio-dev, los dos existen… en las tres colas de escritorio y en ninguna
en el corpus. Una app del corpus no los ve. wf-recorder construye igual (-Dpulse=disabled -Dpipewire=disabled, have_audio=false) pero graba sin sonido, y no tiene backend ALSA con el
que caerse.
Lo que eso destapa, que es más grande que wf-recorder
El corpus no tiene ningún cliente de audio salvo ALSA.
libpipewire-0.3ylibpulseviven sólo enincoming-{kde,gnome,cosmic}. Toda app multimedia que llegue al corpus va a chocar acá.
Ya chocó dos veces en un día: mpv terminó con --ao=alsa en vez de su salida nativa de PipeWire
(y por eso hubo que dar vuelta -Dpipewire-alsa en las tres pipewire, que fue el arreglo correcto
pero fue un rodeo), y ahora wf-recorder se queda mudo.
La decisión que hay que tomar (no es de madrugada): promover UNA pipewire al corpus. Construye
—el corpus tiene su propia glib, dbus y pcre2— pero el problema no es construirla: es que una
imagen que hidrate corpus/pipewire y la de su cola pondría dos libpipewire-0.3.so distintas
en la misma ruta, que es la enfermedad de las dos glib. Las salidas posibles, para pensarlas
despierto:
- Una sola pipewire, en el corpus, y las tres colas jubilan la suya. Es lo más limpio y es lo que ya se hizo con otras 13 copias que sellaban igual — pero éstas NO sellan igual (difieren en glib/dbus/pcre2), así que hay que decidir cuál gana y volver a sellar wireplumber y los portales de las tres colas.
- Aceptar ALSA como la única ABI de audio del corpus, que es lo que hoy quedó funcionando de
hecho:
-Dpipewire-alsa=enabledhace que un cliente ALSA desemboque en PipeWire. Barato y ya está hecho; el precio es que las apps del corpus nunca usan la API nativa (sin control por-stream, sin metadata de sesión) y que las que sólo hablan pulse/pipewire —wf-recorder— quedan afuera. - Que las apps multimedia vivan en las colas, una copia por escritorio. Es lo que la estructura empuja hoy y es exactamente lo que no queremos para una app que sirve a las cuatro imágenes.
Hasta que eso se decida, wf-recorder queda sin escribir: un grabador de pantalla mudo es
justamente la clase de media-cosa que conviene no sellar sin que alguien la haya elegido.
Los dos veredictos que corrigen al ADR
Firefox NO es montón A
Su APKBUILD pide gtk+3.0-dev — Firefox no tiene backend GTK4 ni lo va a tener a corto plazo, y
GTK3 es una de las tres deudas que el frente GNOME aparcó por diseño. Además pide libxt,
libxcomposite (X11) y un toolchain wasi (wasi-sdk, wasi-compiler-rt) que no existe en el
corpus, más nodejs, icu, nss/nspr, clang/llvm/lld versionados y cbindgen.
La memoria del repo decía que a Firefox «le falta subir el techo MSRV». Eso es cierto y es lo menor: el bloqueo real es GTK3.
Consecuencia estratégica, que es la decisión que hay que tomar despierto: todos los navegadores del mundo Linux son o GTK3 (Firefox y derivados) o Chromium (que además arrastra Qt6 y GTK3 en Alpine). Entonces «tener navegador» no es un ticket del montón A: es elegir entre
- autorar el stack GTK3 —revierte una decisión de diseño y reabre GIMP/Inkscape de paso—, o
- darle el navegador a qorpa, o sea tratarlo como montón B: el navegador corre en la imagen ajena, hablando Wayland por socket.
La opción 2 es coherente con todo lo demás que ya se decidió, y tiene una ventaja que conviene nombrar: el navegador es justamente el proceso al que menos ganas dan de darle el sistema entero.
OBS no puede ser una app del corpus
Pide qt6-qtbase-dev, qt6-qtbase-private-dev y qt6-qtsvg-dev, y Qt6 vive sólo en
incoming-kde/. Una receta resuelve sibling-first y después el catálogo padre: desde el corpus no
se alcanza una cola. O sea que OBS hoy sólo puede existir dentro de la cola de KDE, y entonces
no es una app de las cuatro imágenes sino una app de KDE. Súmese X11 (libx11, libxcb,
libxcomposite, libxinerama) y 20 recetas nuevas (libdatachannel, librist, libsrt,
mbedtls, rnnoise, x264, luajit, swig, vlc…).
Si lo que se quiere es grabar la pantalla —que es el 80% de para qué se instala OBS— eso ya está
al alcance de la mano: wf-recorder sale con CERO recetas faltantes y cero muros, porque su
cierre (wayland, ffmpeg, libdrm) quedó completo cuando entró mpv.
Orden propuesto, en reemplazo del del ADR
- ✅ mpv — hecho (2026-09-03).
- decisión de audio del corpus (el ⚠ de arriba). Destraba wf-recorder y le da a mpv su salida nativa. Es una decisión, no una campaña.
- wf-recorder — inmediato una vez tomada esa decisión; cubre el caso de uso principal de OBS.
- imv — visor de imágenes; los 7 faltantes son opcionales y se puede entrar con los mínimos.
- zathura (+ backend PDF) — verificar antes que su cadena sea GTK4 y no GTK3.
- Decisión de navegador — no es trabajo de recetas, es la elección de arriba. No debería entrar a una cola de build hasta que esté tomada.
OBS, Firefox, Chromium, GIMP y LibreOffice salen del montón A hasta que se decida GTK3 o qorpa.
Que se llame montón A y no se pueda construir es peor que no tenerlo en la lista: es deuda fantasma,
la misma figura que la terna de GNOME que había que sacar de targets.toml para que el grafo dejara
de mentir.
Reproducir la medición
/tmp/.../triaje-apps.py fue un script de una sola vez; si hace falta repetirlo, lo que hace es:
bajar el APKBUILD de cada candidata, extraer makedepends/depends, quitarles el sufijo -dev, y
cruzar contra recipes/*.toml + recipes/incoming-*/*.toml, separando una lista fija de nombres
que son muros de diseño (gtk+3.0, qt6-, lib X11, wasi-). No se guarda en scripts/ porque la
lista de candidatas es del momento, no un invariante que valga la pena vigilar.