1# SDD 19 — Lanzar la distro al público: qué falta de verdad
2
3Escrito 2026-08-07, a pedido del usuario («ve indicándome cuáles son los pasos necesarios para lanzar
4la distro al público»). No es una lista genérica de «cómo se hace una distro»: cada punto está medido
5contra el estado real del repo en esa fecha.
6
7**La tesis**: lo que falta para *terminar de construir* no es lo mismo que lo que falta para *publicar*.
8Lo primero es trabajo conocido y acotado. Lo segundo tiene dos cosas bloqueantes que hoy no existen —
9metadatos de licencia y un espejo de fuentes— y que no se pueden improvisar el día del anuncio.
10
11---
12
13## 0. Lo que YA está (para no rehacerlo)
14
15- **Formato de paquete y repositorio**: Etapa F completa — `pack` / `repo` / `install` / resolución de
16 deps / firma / DB de instalados / servidor HTTP, todo sobre `.swm`. Ver [SDD 06](06-swm-format.md).
17- **Instalador TUI** y `base-system` completo (índice firmado de 748).
18- **Seis perfiles de imagen** en `docs/state/targets.toml`: `base`, `cli`, `escritorio-mirada`,
19 `escritorio-kde`, `escritorio-gnome`, `escritorio-cosmic`.
20- **El invariante que nos diferencia**: build determinista, bit a bit, direccionado por contenido.
21 1142 artefactos vigentes. Esto no es una promesa de marketing: es verificable por terceros, y en el
22 §3 se explica cómo convertirlo en evidencia pública.
23- **Arranque soberano** (EFI-stub sin GRUB) y kernel propio que reproduce bit a bit.
24
25---
26
27## 1. Terminar el producto (trabajo conocido, sin sorpresas)
28
29Ordenado por dependencia, no por gusto.
30
311. **Las 16 recetas pendientes.** 4 en GNOME (3 aparcadas por diseño: GTK3/X11/PAM) y 12 en el corpus
32 (cadena GUI de la cascada de mesa). **Ojo: las 12 fallan en el worker por su rootfs** (`python
33 OSError` en meson, `find_package` en cmake) y no se deben construir en el laptop por el zig-skew.
34 Hay que arreglar el entorno del worker primero, o declarar las herramientas en `[deps]`.
352. **WMs Wayland ligeros** (pedido del usuario). Candidatos naturales: `sway`/`labwc`/`river`/`niri`.
36 Baratos comparados con los escritorios completos: no hay torre de C debajo.
373. **Aplicaciones gráficas de terceros.** Acá está el trabajo grande y hay que ser honesto con el
38 tamaño:
39 - **Navegador**: el más caro de todo el catálogo. Firefox es Rust + C++ + su propio sistema de
40 build, y arrastra cbindgen, nasm, nodejs, y una cadena de `*-sys` con C++ que es justo la
41 frontera que el techo MSRV del sandbox no cruza todavía. Presupuestar como un frente propio.
42 - **Ofimática**: LibreOffice, del mismo orden de magnitud.
43 - **El resto**, mucho más barato: visor de imágenes, lector PDF, reproductor (mpv), gestor de
44 archivos, terminal, editor gráfico.
454. **Lo que no es una aplicación pero se nota si falta**: impresión (CUPS), bluetooth, gestión de red,
46 energía/suspensión, tipografías, locales e i18n, zona horaria, y cerrar el audio (falta
47 `wireplumber`: «el shell conecta» ≠ «hay sonido»).
48
49---
50
51## 2. 🚨 LO LEGAL — bloqueante, y hoy NO existe
52
53Esto es lo que más fácil se pasa por alto y lo que puede obligar a bajar una descarga ya publicada.
54
55### 2.1 Metadatos de licencia: eran **0 de 1141**; hoy van 228
56> **CORRECCIÓN (mismo día).** Este párrafo decía «5 de 771 recetas los declaran», contado con
57> `grep -l license recipes/*.toml`. **Los dos números estaban mal.** Los «5» eran falsos positivos:
58> el paquete `addlicense`, el paquete `cargo-bundle-licenses`, una línea `install .../licenses/` y un
59> comentario — `grep -l <palabra>` sobre TOML cuenta comentarios y nombres, no campos. Y las recetas
60> son **1141**, no 771 (771 son los nodos del grafo del corpus). El número real era **0 de 1141**.
61>
62> **Estado actual**: campo `license` implementado **fuera de `hash_inputs`** (se puebla sobre recetas
63> ya selladas sin mover un `ArtifactHash`; verificado en 40 recetas, 40 idénticos), `scripts/licencias.sh`
64> que cuenta el campo de verdad, y **228 sembradas** desde una tabla curada. Faltan 913, casi todas
65> CLIs Go/Rust — automatizables desde `Cargo.toml` y los `LICENSE` de los módulos Go.
66>
67> El catálogo completo está en [SDD 20](20-catalogo-publicable-y-completa.md); los pasos, en
68> [SDD 21](21-manual-del-piloto.md).
69
70Hace falta:
71- Un campo de licencia **obligatorio** en la receta (con validación en `takana`, no por convención).
72- El texto de la licencia **dentro del artefacto** (`/usr/share/licenses/<pkg>/`), que es lo que
73 exigen GPL y familia al distribuir binarios.
74- Un informe agregado por imagen: qué licencias entran en cada perfil y si alguna es incompatible.
75
76### 2.2 Espejo de fuentes — la obligación real de la GPL
77La GPL no pide «que el código exista en internet»: pide que **quien recibe el binario pueda obtener
78la fuente correspondiente**, de vos. Hoy las recetas apuntan a URLs de terceros que se caen.
79
80**Acá estamos en una posición inusualmente buena y hay que aprovecharla**: cada receta pinea tarball
81+ `sha256`, así que el espejo de fuentes es un `fetch` de todo el corpus a un bucket, y además queda
82verificable. Es trabajo mecánico, pero **debe existir antes de la primera descarga pública**, no
83después.
84
85### 2.3 Marcas
86Redistribuir Firefox con su nombre y logo requiere cumplir la política de marca de Mozilla; por eso
87Debian tuvo Iceweasel. Lo mismo con otros. Decidir por adelantado: cumplir o rebrandear.
88
89### 2.4 La licencia de takana mismo — ✅ ya está
90> **CORRECCIÓN (mismo día).** Este punto decía «el repo no declara una». **Es falso**: hay un
91> `LICENSE` (MIT) en la raíz y `license = "MIT"` en `Cargo.toml`. No lo miré antes de escribirlo.
92> Este punto no bloquea nada.
93
94---
95
96## 3. Infraestructura pública
97
981. **Espejo de paquetes e imágenes.** Dimensionado: el store son 126 G, pero **~60% es información de depuración** ⇒ separar `-debug` en paquetes aparte baja el espejo a **~51 G** (medido en la etapa 3 del SDD 23; el «79%» que se citaba era sobre el CONTENIDO BINARIO, no sobre el tamaño de artefacto). Ver
99 [SDD 17](17-cierres-frontera.md) y la nota de capacidad.
1002. **Cadena de firma de release.** Hoy hay firma de índice. Falta el nivel de arriba: una **clave raíz
101 fuera de línea**, claves de firma rotables, y un procedimiento escrito de qué hacer si se filtra
102 una. La firma sin gestión de claves es teatro.
1033. **Evidencia de reproducibilidad publicada.** Esto es el diferenciador y hay que hacerlo explícito:
104 publicar, junto a cada imagen, los `ArtifactHash` de toda su clausura, para que un tercero
105 reconstruya y compare. Idealmente **un reconstructor independiente** que lo verifique en continuo.
106 Es lo que convierte «somos reproducibles» en un hecho comprobable por un extraño.
1074. **Respuesta a seguridad.** Un canal para reportes, un proceso de avisos, y —lo más importante— la
108 capacidad demostrada de **empujar una actualización y que llegue**. Antes de publicar, ensayar el
109 ciclo completo con un CVE de mentira.
110
111---
112
113## 4. La experiencia de quien la instala
114
1151. **Imagen instalable validada en METAL**, no sólo en QEMU. Regla ya aprendida: validar imágenes de
116 escritorio con PANTALLA, nunca sólo `-nographic`; y `/dev/console` es el serial, así que cada capa
117 debe escribir a `/dev/tty0`.
1182. **Matriz de hardware honesta**: en qué se probó y en qué no. Vale más un «probado en estas 3
119 máquinas» que un «debería funcionar».
1203. **Documentación mínima**: instalación, gestión de paquetes, cómo reportar un fallo. Sin esto, cada
121 usuario nuevo es una conversación privada.
1224. **Sitio y página de descarga** con sumas y firmas, y las instrucciones para verificarlas.
1235. **Un canal público** (issues + algo de chat) y un rastreador de fallos.
124
125---
126
127## 5. Sostenibilidad — lo que decide si sobrevive al primer mes
128
1291. **Versionado y cadencia de release** decididos y escritos.
1302. **Actualización en sitio probada de verdad**: instalar la versión N, actualizar a N+1, y que
131 arranque. Y **rollback**, que con un store direccionado por contenido debería ser barato: es la
132 ventaja natural de esta arquitectura y conviene que sea una función de primera clase.
1333. **Reconstrucción desde cero reproducible** en una máquina limpia, cronometrada. Es la prueba de que
134 el proyecto no depende de un laptop concreto — que es exactamente la preocupación que originó el
135 respaldo del 2026-08-07.
136
137---
138
139## 6. El orden que yo propondría
140
141**No se puede publicar sin**: §2 completo (licencias + espejo de fuentes + licencia propia), §3.2
142(gestión de claves), §4.1 (imagen validada en metal) y §5.2 (actualización probada).
143
144**Se puede publicar con huecos en**: §1.3 (aplicaciones de terceros — se puede lanzar sin navegador
145propio y añadirlo después), §3.3 (el reconstructor independiente es un objetivo, no un requisito) y
146§4.2.
147
148**Lo que yo haría primero, hoy, porque es barato y desbloquea lo caro**: el campo de licencia
149obligatorio en la receta. Mientras el corpus siga creciendo sin él, la deuda crece con él; a 771
150recetas todavía es un rato de trabajo, a 2000 es un proyecto.
19-lanzamiento-publico.md
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-system completo (í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 OSError en meson, find_package en 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
*-sys con 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.
- 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 paquete addlicense, el paquete cargo-bundle-licenses, una línea install .../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 license implementado fuera de hash_inputs (se puebla sobre recetas
ya selladas sin mover un ArtifactHash; verificado en 40 recetas, 40 idénticos), scripts/licencias.sh
que cuenta el campo de verdad, y 228 sembradas desde una tabla curada. Faltan 913, casi todas
CLIs Go/Rust — automatizables desde Cargo.toml y los LICENSE de los módulos Go.
El catálogo completo está en SDD 20; los pasos, en
SDD 21.
Hace falta:
- Un campo de licencia obligatorio en la receta (con validación en
takana, 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 un fetch de 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 takana 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 y license = "MIT" en Cargo.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 ~60% es información de depuración ⇒ separar
-debug en paquetes aparte baja el espejo a ~51 G (medido en la etapa 3 del SDD 23; el «79%» que se citaba era sobre el CONTENIDO BINARIO, no sobre el tamaño de artefacto). 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
ArtifactHash de 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/console es 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.