Pedido del usuario: «el catálogo de todo lo que falta hasta decir la distro está publicable, y lo de más hasta la distro está completa. Y un tipo manual, todos los pasos que tengo que ir haciendo en las tres etapas que marcan esos dos codos.» SDD 20 = el inventario, medido contra el repo (grafo, no recuento a mano). SDD 21 = el manual de a pie, un comando por vez, marcando qué puede hacer el agente y qué es del usuario. LO QUE APARECIÓ AL MEDIR, y que no se sabía: · La deuda de construcción NO son 12+12+13+12 recetas: es UNA lista de 12 vista desde cuatro grafos (la cadena GUI de la cascada de mesa). Un solo arreglo —declarar python3 y cmake en `[deps]`, no engordar el rootfs del worker— las destraba todas. `base` y `cli` ya están al 100%, KDE cierra 162/162. · De WMs Wayland ligeros no hay NINGUNO: sólo `foot` y `mako`. Falta wlroots entero, los compositores y todos los accesorios (waybar, fuzzel, swaybg, grim, slurp, wl-clipboard). · De aplicaciones gráficas de terceros hay CERO. Ni visor de imágenes ni lector de PDF. · Firefox no es «una receta más»: su cadena de `*-sys` con C++ es justo la frontera que el techo MSRV del sandbox (1.96) no cruza. Antes de Firefox hay que subir el techo; empezar por la receta es empezar por el final. · El texto de la licencia va inyectado en `hammer pack`, NO en la fase install: las fases entran al ArtifactHash, así que hacerlo en la receta re-hashearía las 1141. Pack es aguas abajo y sale gratis. Misma lógica que hizo pagable el campo `license`. Dos correcciones al SDD 19, que escribí yo ayer y tenía mal: · «5 de 771 recetas declaran licencia» — falso por partida doble. El número real era 0 de 1141; los «5» eran falsos positivos de `grep license` (nombres de paquete, una línea de install, un comentario) y 771 son los nodos del grafo del corpus, no las recetas. · «El repo no declara licencia» — falso: hay LICENSE (MIT) en la raíz y en Cargo.toml. No lo miré antes de escribirlo. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
8.8 KiB
SDD 19 — Lanzar la distro al público: qué falta de verdad
Escrito 2026-08-07, a pedido del usuario («ve indicándome cuáles son los pasos necesarios para lanzar la distro al público»). No es una lista genérica de «cómo se hace una distro»: cada punto está medido contra el estado real del repo en esa fecha.
La tesis: lo que falta para terminar de construir no es lo mismo que lo que falta para publicar. Lo primero es trabajo conocido y acotado. Lo segundo tiene dos cosas bloqueantes que hoy no existen — metadatos de licencia y un espejo de fuentes— y que no se pueden improvisar el día del anuncio.
0. Lo que YA está (para no rehacerlo)
- Formato de paquete y repositorio: Etapa F completa —
pack/repo/install/ resolución de deps / firma / DB de instalados / servidor HTTP, todo sobre.swm. Ver SDD 06. - Instalador TUI y
base-systemcompleto (índice firmado de 748). - Seis perfiles de imagen en
docs/state/targets.toml:base,cli,escritorio-mirada,escritorio-kde,escritorio-gnome,escritorio-cosmic. - El invariante que nos diferencia: build determinista, bit a bit, direccionado por contenido. 1142 artefactos vigentes. Esto no es una promesa de marketing: es verificable por terceros, y en el §3 se explica cómo convertirlo en evidencia pública.
- Arranque soberano (EFI-stub sin GRUB) y kernel propio que reproduce bit a bit.
1. Terminar el producto (trabajo conocido, sin sorpresas)
Ordenado por dependencia, no por gusto.
- Las 16 recetas pendientes. 4 en GNOME (3 aparcadas por diseño: GTK3/X11/PAM) y 12 en el corpus
(cadena GUI de la cascada de mesa). Ojo: las 12 fallan en el worker por su rootfs (
python OSErroren meson,find_packageen cmake) y no se deben construir en el laptop por el zig-skew. Hay que arreglar el entorno del worker primero, o declarar las herramientas en[deps]. - WMs Wayland ligeros (pedido del usuario). Candidatos naturales:
sway/labwc/river/niri. Baratos comparados con los escritorios completos: no hay torre de C debajo. - Aplicaciones gráficas de terceros. Acá está el trabajo grande y hay que ser honesto con el
tamaño:
- Navegador: el más caro de todo el catálogo. Firefox es Rust + C++ + su propio sistema de
build, y arrastra cbindgen, nasm, nodejs, y una cadena de
*-syscon C++ que es justo la frontera que el techo MSRV del sandbox no cruza todavía. Presupuestar como un frente propio. - Ofimática: LibreOffice, del mismo orden de magnitud.
- El resto, mucho más barato: visor de imágenes, lector PDF, reproductor (mpv), gestor de archivos, terminal, editor gráfico.
- Navegador: el más caro de todo el catálogo. Firefox es Rust + C++ + su propio sistema de
build, y arrastra cbindgen, nasm, nodejs, y una cadena de
- Lo que no es una aplicación pero se nota si falta: impresión (CUPS), bluetooth, gestión de red,
energía/suspensión, tipografías, locales e i18n, zona horaria, y cerrar el audio (falta
wireplumber: «el shell conecta» ≠ «hay sonido»).
2. 🚨 LO LEGAL — bloqueante, y hoy NO existe
Esto es lo que más fácil se pasa por alto y lo que puede obligar a bajar una descarga ya publicada.
2.1 Metadatos de licencia: eran 0 de 1141; hoy van 228
CORRECCIÓN (mismo día). Este párrafo decía «5 de 771 recetas los declaran», contado con
grep -l license recipes/*.toml. Los dos números estaban mal. Los «5» eran falsos positivos: el paqueteaddlicense, el paquetecargo-bundle-licenses, una líneainstall .../licenses/y un comentario —grep -l <palabra>sobre TOML cuenta comentarios y nombres, no campos. Y las recetas son 1141, no 771 (771 son los nodos del grafo del corpus). El número real era 0 de 1141.Estado actual: campo
licenseimplementado fuera dehash_inputs(se puebla sobre recetas ya selladas sin mover unArtifactHash; verificado en 40 recetas, 40 idénticos),scripts/licencias.shque cuenta el campo de verdad, y 228 sembradas desde una tabla curada. Faltan 913, casi todas CLIs Go/Rust — automatizables desdeCargo.tomly losLICENSEde los módulos Go.
Hace falta:
- Un campo de licencia obligatorio en la receta (con validación en
hammer, no por convención). - El texto de la licencia dentro del artefacto (
/usr/share/licenses/<pkg>/), que es lo que exigen GPL y familia al distribuir binarios. - Un informe agregado por imagen: qué licencias entran en cada perfil y si alguna es incompatible.
2.2 Espejo de fuentes — la obligación real de la GPL
La GPL no pide «que el código exista en internet»: pide que quien recibe el binario pueda obtener la fuente correspondiente, de vos. Hoy las recetas apuntan a URLs de terceros que se caen.
Acá estamos en una posición inusualmente buena y hay que aprovecharla: cada receta pinea tarball
sha256, así que el espejo de fuentes es unfetchde todo el corpus a un bucket, y además queda verificable. Es trabajo mecánico, pero debe existir antes de la primera descarga pública, no después.
2.3 Marcas
Redistribuir Firefox con su nombre y logo requiere cumplir la política de marca de Mozilla; por eso Debian tuvo Iceweasel. Lo mismo con otros. Decidir por adelantado: cumplir o rebrandear.
2.4 La licencia de hammer mismo — ✅ ya está
CORRECCIÓN (mismo día). Este punto decía «el repo no declara una». Es falso: hay un
LICENSE(MIT) en la raíz ylicense = "MIT"enCargo.toml. No lo miré antes de escribirlo. Este punto no bloquea nada.
3. Infraestructura pública
- Espejo de paquetes e imágenes. Dimensionado: el store son 126 G, pero el 79% es información
de depuración ⇒ separar
-debugen paquetes aparte baja el espejo a ~30 G. Ver SDD 17 y la nota de capacidad. - Cadena de firma de release. Hoy hay firma de índice. Falta el nivel de arriba: una clave raíz fuera de línea, claves de firma rotables, y un procedimiento escrito de qué hacer si se filtra una. La firma sin gestión de claves es teatro.
- Evidencia de reproducibilidad publicada. Esto es el diferenciador y hay que hacerlo explícito:
publicar, junto a cada imagen, los
ArtifactHashde toda su clausura, para que un tercero reconstruya y compare. Idealmente un reconstructor independiente que lo verifique en continuo. Es lo que convierte «somos reproducibles» en un hecho comprobable por un extraño. - Respuesta a seguridad. Un canal para reportes, un proceso de avisos, y —lo más importante— la capacidad demostrada de empujar una actualización y que llegue. Antes de publicar, ensayar el ciclo completo con un CVE de mentira.
4. La experiencia de quien la instala
- Imagen instalable validada en METAL, no sólo en QEMU. Regla ya aprendida: validar imágenes de
escritorio con PANTALLA, nunca sólo
-nographic; y/dev/consolees el serial, así que cada capa debe escribir a/dev/tty0. - Matriz de hardware honesta: en qué se probó y en qué no. Vale más un «probado en estas 3 máquinas» que un «debería funcionar».
- Documentación mínima: instalación, gestión de paquetes, cómo reportar un fallo. Sin esto, cada usuario nuevo es una conversación privada.
- Sitio y página de descarga con sumas y firmas, y las instrucciones para verificarlas.
- Un canal público (issues + algo de chat) y un rastreador de fallos.
5. Sostenibilidad — lo que decide si sobrevive al primer mes
- Versionado y cadencia de release decididos y escritos.
- Actualización en sitio probada de verdad: instalar la versión N, actualizar a N+1, y que arranque. Y rollback, que con un store direccionado por contenido debería ser barato: es la ventaja natural de esta arquitectura y conviene que sea una función de primera clase.
- Reconstrucción desde cero reproducible en una máquina limpia, cronometrada. Es la prueba de que el proyecto no depende de un laptop concreto — que es exactamente la preocupación que originó el respaldo del 2026-08-07.
6. El orden que yo propondría
No se puede publicar sin: §2 completo (licencias + espejo de fuentes + licencia propia), §3.2 (gestión de claves), §4.1 (imagen validada en metal) y §5.2 (actualización probada).
Se puede publicar con huecos en: §1.3 (aplicaciones de terceros — se puede lanzar sin navegador propio y añadirlo después), §3.3 (el reconstructor independiente es un objetivo, no un requisito) y §4.2.
Lo que yo haría primero, hoy, porque es barato y desbloquea lo caro: el campo de licencia obligatorio en la receta. Mientras el corpus siga creciendo sin él, la deuda crece con él; a 771 recetas todavía es un rato de trabajo, a 2000 es un proyecto.