gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1572Shell 203Rust 109Markdown 993728 Definiciones

⎇ f9500352fd68f3d87bb81318365908c86bc252ae docs/19-lanzamiento-publico.md Markdown · 150 líneas · 8.9 KB Historia crudo

takana etapa 5b: los 59 docs de diseño, runbooks y ADR 97ceb7241 · Sergio ·

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)


1. Terminar el producto (trabajo conocido, sin sorpresas)

Ordenado por dependencia, no por gusto.

  1. 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].
  2. WMs Wayland ligeros (pedido del usuario). Candidatos naturales: sway/labwc/river/niri. Baratos comparados con los escritorios completos: no hay torre de C debajo.
  3. 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.
  4. 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:

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

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

  1. 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.
  2. 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.
  3. 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.
  4. 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

  1. 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.
  2. 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».
  3. 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.
  4. Sitio y página de descarga con sumas y firmas, y las instrucciones para verificarlas.
  5. Un canal público (issues + algo de chat) y un rastreador de fallos.

5. Sostenibilidad — lo que decide si sobrevive al primer mes

  1. Versionado y cadencia de release decididos y escritos.
  2. 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.
  3. 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.