docs: adenda al plan de apps — el censo, el muro de GL revisado y la respuesta a «¿Electron?»
Tres preguntas del usuario, contestadas midiendo, y dos de las mediciones CORRIGEN cosas que este mismo fichero afirmaba. 1. CENSO: de ~50 apps muy usadas el catálogo tiene 9, y CINCO de las nueve son de KDE (o sea que llegan a una de las cuatro imágenes). 2. ⚠ CORRECCIÓN al «tercer defecto del método». Este documento dice, con fecha 2026-09-03, que ninguna cola publica libGL.so ni gl.pc. Dejó de ser cierto AL DÍA SIGUIENTE: recipes/libglvnd.toml es del 2026-09-04 y `provee.py --desde corpus opengl` da ✓ (libOpenGL.so.0 + opengl.pc). Y la corrección trae su propia corrección: la campaña quedó A MEDIAS. Las tres mesa siguen con -Dglvnd=false, no hay libEGL_mesa.so.0 ni egl_vendor.d, y en el rootfs KDE hidratado conviven DOS libEGL.so.1 distintos (mesa 1.440.624 B gana el symlink; el de glvnd, 323.144 B, queda huérfano). OBS —la razón de escribir libglvnd— NO la usa en runtime: libobs-opengl.so sale con NEEDED libEGL.so.1 y ni un gl[A-Z] indefinido, o sea que su glad resuelve por eglGetProcAddress. ⇒ el `opengl ✓` es verdad DE ENLACE. El muro pasó de «no enlaza» a «enlaza y no corre». Corolario: darktable estaba MAL clasificada como caso de GL. Su UI es GTK3+cairo; su muro es la cola de deps (lensfun, libgphoto2, openexr, imath, libraw, osm-gps-map, portmidi + cuatro que sólo viven en colas). Blender sí es el caso de GL. 3. ELECTRON: `grep -rni electron docs/ recipes/` da CERO. Nunca estuvo planeado. Y no existe un «Electron con base Firefox» porque Gecko no tiene API de embebido desde XULRunner (SDD 26 §1) — pero eso es exactamente lo que es atuq, y ya está: artefacto derivado + chrome propio + extensiones + host de native messaging en Rust. Falta un modo SSB, que es más barato que UN port. GenOffice concretamente: Apache-2.0 (salvo ee/), acepta endpoints OpenAI-compatible locales ⇒ la mitad de IA es una línea de config contra el llama-cpp que YA viaja en los cuatro escritorios. La mitad de runtime es qorpa. ⚠ Y el muro real es el MODELO: Qwen2.5-1.5B no sostiene IA agéntica sobre un .xlsx. 4. QUÉ REHACER, con criterio escrito: sólo cuando el bloqueo es estructural Y el valor vive en un protocolo o formato abierto. Pasan tres: el shell de apps sobre atuq, una bóveda de contraseñas (la mitad cara —la integración con el navegador— ya está construida), y un cliente Matrix si fractal no construye. Thunderbird es el más desaprovechado de la lista de EMPAQUETAR: es Gecko.
This commit is contained in:
@@ -302,3 +302,158 @@ bajar el APKBUILD de cada candidata, extraer `makedepends`/`depends`, quitarles
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
# ADENDA 2026-09-13 — el censo, el muro de GL revisado, y la respuesta a «¿Electron?»
|
||||
|
||||
Sale de tres preguntas del usuario en una sesión: *¿es congruente empaquetar GenOffice?*, *¿teníamos
|
||||
planeado compilar Electron?*, *¿qué apps muy usadas valdría la pena replicar de cero en vez de
|
||||
incluirlas?*. Las tres se contestaron midiendo, y dos mediciones **corrigen cosas escritas arriba**.
|
||||
|
||||
## 1. El censo: de ~50 apps muy usadas, el catálogo tiene 9
|
||||
|
||||
Cruzado contra los 1158 nombres de receta del disco (corpus + las cuatro colas):
|
||||
|
||||
**Están (9):** `firefox`, `mpv`, `obs-studio`, `zathura`, `okular`, `gwenview`, `dolphin`, `ark`,
|
||||
`spectacle` — y **cinco de esas nueve son de KDE**, o sea que sólo llegan a una de las cuatro
|
||||
imágenes.
|
||||
|
||||
**No están:** gimp, inkscape, krita, darktable, blender, audacity, kdenlive, shotcut, vlc, chromium,
|
||||
thunderbird, evolution, libreoffice, calligra, scribus, calibre, transmission, qbittorrent, deluge,
|
||||
filezilla, remmina, wireshark, virt-manager, gparted, keepassxc, bitwarden, signal-desktop,
|
||||
telegram-desktop, element-desktop, fractal, discord, slack, zoom, spotify, steam, lutris, wine,
|
||||
vscode, zed, sublime-text, obsidian, logseq, anki, gnucash, homebank, thunar, nautilus, pcmanfm,
|
||||
file-roller, flameshot.
|
||||
|
||||
## 2. ⚠ CORRECCIÓN al «tercer defecto del método»: el muro de GL se movió, y luego se disfrazó
|
||||
|
||||
La sección de arriba dice, con fecha 2026-09-03, que **ninguna cola publica `libGL.so` ni `gl.pc`** y
|
||||
que por eso toda app de GL de escritorio está bloqueada. **Eso dejó de ser cierto al día siguiente** y
|
||||
conviene no repetirlo de memoria:
|
||||
|
||||
```
|
||||
scripts/provee.py --desde corpus gl opengl # corrido el 2026-09-13
|
||||
gl ✗ NADIE LO PUBLICA en ninguna cola
|
||||
opengl ✓ corpus/libglvnd ⇒ libOpenGL.so.0 opengl.pc
|
||||
```
|
||||
|
||||
`recipes/libglvnd.toml` existe desde el **2026-09-04**, escrita para OBS, y hace la partición que
|
||||
ordena el problema —que arriba estaba mezclado en una sola fila:
|
||||
|
||||
- **`libGL.so.1` = GL *más GLX*** en una sola librería ⇒ **implica X11**. Encenderlo metería
|
||||
`libX11`/`libxcb`/`xorgproto` —hoy sólo en `incoming-kde`— **en el CORPUS**, o sea en las cinco
|
||||
imágenes, para servir a una app. Eso sí sería contraproducente: es reabrir X11-al-tacho.
|
||||
- **`libOpenGL.so.0` = GL de escritorio pelado**, sin ventana ni plataforma, con el contexto creado
|
||||
por EGL. **No contradice ninguna decisión de la distro.** Es la que se eligió.
|
||||
|
||||
⚠ **Pero la campaña quedó a medias, y eso vale más que la buena noticia.** Las tres recetas de mesa
|
||||
siguen con `-Dglvnd=false`. Medido en el rootfs de KDE ya hidratado:
|
||||
|
||||
| | mesa | libglvnd |
|
||||
|---|---|---|
|
||||
| `/usr/lib/libEGL.so.1` | → `libEGL.so.1.0.0`, **1.440.624 B** (el driver) | → `libEGL.so.1.1.0`, **323.144 B** (puro despacho) |
|
||||
| `libEGL_mesa.so.0` + `/usr/share/glvnd/egl_vendor.d/` | ✗ | ✗ |
|
||||
|
||||
Las **dos** están declaradas en `escritorio-kde` ⇒ dos `libEGL.so.1` distintos en la misma ruta. Hoy
|
||||
gana el de mesa —por orden de hidratación, no porque nada lo guarde— y el de glvnd queda huérfano al
|
||||
lado. La propia receta de `libglvnd` avisaba de esto: *«mesa se reconstruye en la MISMA campaña, no
|
||||
después»*.
|
||||
|
||||
**Y OBS, que fue la razón de escribir libglvnd, no la usa en runtime.** `libobs-opengl.so` sale con
|
||||
`NEEDED libEGL.so.1` y nada más; sus símbolos indefinidos son todos `egl*`, **ni un `gl[A-Z]` sin
|
||||
resolver** ⇒ su `glad` resuelve los punteros por `eglGetProcAddress` contra la EGL de mesa. glvnd
|
||||
está en la imagen satisfaciendo un requisito **de enlace** (el `OpenGL::GL` de CMake) y es **inerte**.
|
||||
|
||||
⇒ **El estado real del muro**: `provee.py` dice `opengl ✓` y eso es verdad **de enlace**. En runtime
|
||||
no hay vendor de GL de escritorio registrado. Una app que de verdad llame por `libOpenGL.so.0`
|
||||
encontraría una tabla de despacho vacía. El muro pasó de *«no enlaza»* a *«enlaza y no corre»*, que
|
||||
es el modo de fallo más caro de esta casa. **Terminarlo es re-sellar las tres mesa con
|
||||
`-Dglvnd=true` en un solo movimiento**, y su precio ya está medido: radio grande sobre `mesa` y
|
||||
libglvnd pasa a ser pieza obligatoria de las cuatro imágenes.
|
||||
|
||||
**Corolario para la tabla de arriba:** `darktable` estaba mal clasificada como caso de GL. No lo es —
|
||||
su UI es GTK3+cairo y OpenCL es opcional. Su muro es la **cola de deps**: faltan `lensfun`,
|
||||
`libgphoto2`, `openexr`, `imath`, `libraw`, `osm-gps-map`, `portmidi`, y `exiv2`/`librsvg`/
|
||||
`libsecret`/`colord` existen **sólo en colas** (inalcanzables desde el corpus). Es un frente de ~8
|
||||
recetas, no un muro. **`blender` sí es el caso de GL** (pide 4.3 core).
|
||||
|
||||
## 3. Electron: nunca estuvo planeado, y el sustituto ya está construido
|
||||
|
||||
`grep -rniE 'electron' docs/ recipes/` da **cero coincidencias**. No hay plan, ni ADR, ni ticket — y
|
||||
la tabla de arriba explica por qué sin nombrarlo: `chromium` es la peor fila del montón A (38 recetas
|
||||
+ GTK3 + Qt6 + X11), y Electron es Chromium **más** Node.
|
||||
|
||||
### No existe un «Electron con base Firefox», y el SDD 26 §1 dice por qué
|
||||
|
||||
> Gecko **no tiene API de embebido** en escritorio desde que murió XULRunner; GeckoView existe y es
|
||||
> de Android. ⇒ un envoltorio de Gecko es necesariamente **chrome-level**.
|
||||
|
||||
Por eso los intentos históricos (Positron, Mozilla 2016) no cuajaron. **Pero eso es exactamente lo
|
||||
que es `atuq`, y ya está hecho:**
|
||||
|
||||
| pieza de Electron | equivalente en `atuq` | estado |
|
||||
|---|---|---|
|
||||
| runtime Chromium | Gecko como **artefacto DERIVADO** de `firefox`, sin fork de fuente | ✅ sellado, en las 4 imágenes |
|
||||
| UI en HTML/JS | `omni.ja` re-empacado + `userChrome.css` + `distribution/extensions/` | ✅ SDD 26 §4.g |
|
||||
| lado Node (acceso al sistema) | **host de native messaging en Rust** | ✅ §7.quater, 2026-09-10 |
|
||||
| IPC | `connectNative`, con el contrato MEDIDO | ✅ §7.bis |
|
||||
|
||||
⇒ **Lo que falta para que `atuq` sea una plataforma de apps y no sólo un navegador es chico**: un
|
||||
modo SSB (una ventana, sin barra, con su icono y su `.desktop`) y una clase de receta «app de atuq».
|
||||
Eso es más barato que **un solo** port de Electron, y destraba una familia entera en vez de un
|
||||
programa.
|
||||
|
||||
### GenOffice, concretamente
|
||||
|
||||
Electron + TypeScript + React, sidecar Rust para xlsx, **Apache-2.0** salvo `ee/` (licencia
|
||||
Enterprise aparte), en `github.com/genspark-ai/genoffice`. Su README dice que acepta **cualquier
|
||||
endpoint OpenAI-compatible, incluidos servidores de modelo locales**.
|
||||
|
||||
- **La mitad de IA está resuelta y es una línea de configuración**: `llama-cpp` sirve
|
||||
`/v1/chat/completions` y `/v1/embeddings`, y **ya viaja en los cuatro escritorios** junto con
|
||||
`ia-modelo-chat`. Apuntarlo a `http://127.0.0.1:8080/v1` elimina Genspark, la API key y la salida
|
||||
del documento de la máquina.
|
||||
- **La mitad de runtime no**: no hay Electron ni lo va a haber. La vía es **qorpa** —
|
||||
`docs/state/qorpa-imagenes.toml` ya cura `ubuntu-base` y GenOffice publica `.deb`.
|
||||
- ⚠ **Y el muro real no es el empaquetado, es el MODELO.** El pineado es Qwen2.5-1.5B-Instruct
|
||||
Q4_K_M (20,1 tok/s en CPU, elegido por peso y licencia). Para reescribir un párrafo alcanza; para
|
||||
lo que GenOffice llama IA agéntica sobre un `.xlsx`, un 1.5B da basura. Conectarlo funciona; que
|
||||
**sirva** pide pinear un modelo mucho mayor, y eso es su propia unidad de trabajo (y RAM).
|
||||
|
||||
## 4. Qué vale la pena REHACER en vez de incluir
|
||||
|
||||
El criterio, porque sin criterio esto es una lista de deseos:
|
||||
|
||||
> **Rehacer sólo cuando el upstream está bloqueado por algo ESTRUCTURAL y el valor vive en un
|
||||
> protocolo o formato abierto, no en el código.** Si no: empaquetar, o enjaular.
|
||||
|
||||
**Empaquetar — el muro cayó o nunca existió:**
|
||||
|
||||
- **`thunderbird`** es el más desaprovechado: **es Gecko**. Misma cadena que `firefox`, que ya
|
||||
construye. Ningún muro nuevo, sólo otro build largo. Es el cliente de correo gráfico más barato
|
||||
que este catálogo puede tener.
|
||||
- **`gimp`**: estaba bloqueado por GTK3 y **`gtk3` ya está sellada** (Wayland-only). Pide re-triaje
|
||||
con `provee.py` antes de prometer nada.
|
||||
- **`krita`, `kdenlive`, `qbittorrent`, `keepassxc`, `calibre`**: son Qt6, y Qt6 está **completo en
|
||||
`incoming-kde`**. Son recetas de cola, no muros — pero sólo llegan a la imagen KDE.
|
||||
- **`fractal`** (Matrix, GTK4+Rust) y **`transmission`**: sin muro conocido.
|
||||
|
||||
**Enjaular (qorpa), no rehacer:** vscode, discord, slack, signal, obsidian, zoom, spotify, steam,
|
||||
**genoffice**. Y **blender**, porque la jaula trae su propia mesa glibc y **esquiva la campaña de
|
||||
glvnd por completo**.
|
||||
|
||||
**Rehacer desde tawasuyu — la lista corta que pasa el criterio:**
|
||||
|
||||
1. **El shell de apps sobre `atuq`** (§3). No es una app: es el runtime. Máximo apalancamiento.
|
||||
2. **Bóveda / gestor de contraseñas.** KeePassXC es Qt y Bitwarden es Electron, pero el valor está
|
||||
en el formato KDBX y en la integración con el navegador — y **esa mitad, que es la cara en todos
|
||||
lados, ya está construida**: `agora` (Ed25519), `qullqa` y el host de native messaging.
|
||||
3. **Cliente Matrix nativo — sólo si `fractal` no construye.** Medir antes de escribir.
|
||||
|
||||
El precedente que dice que el método funciona es propio: **torrent (SDD 26 §6.9) y medios (§6.6) se
|
||||
rehicieron como demonios Rust en vez de empaquetar transmission y vlc, y los dos están cerrados.**
|
||||
|
||||
⚠ Y la advertencia que el SDD 26 §2 ya pagó: portar un upstream vivo compra **su cinta de correr**
|
||||
(*«el costo de Zen no es el motor: es el rebase cada cuatro semanas»*). Un port de GenOffice es una
|
||||
relación, no una receta.
|
||||
|
||||
Reference in New Issue
Block a user