sitio: la intro del usuario, el 03 deja de ser un semáforo, y 04+05 son una
**La intro es la del usuario**, con dos correcciones: `puedes` → `podés`, porque la
página entera está en voseo y mezclar trata al lector de dos maneras en la misma
frase; y `mutable que puedes modificar` → `mutable que podés romper`, porque
«mutable» y «modificar» dicen lo mismo dos veces y «romper» es lo que hace juego
con «recuperar». Queda:
«Un Linux mutable que podés romper y recuperar, manteniendo su pureza hasta el
último bit.»
**El antetítulo sólo traduce:** «takana · el martillo». La etimología (`de takay:
golpear, martillar`) era una nota al pie en el sitio más visible de la página.
**El 03 deja de presumir inmadurez.** Era un semáforo con 🟡 y ⚪ y una fila final
—«distro redonda · todavía no»— o sea una página contándole al visitante lo que le
falta antes que lo que tiene. Y encima estaba VIEJA: decía que el instalador estaba
a medias, con los siete instaladores ya publicados y descargándose. Ahora es una
ficha de distro:
· el sistema init arje-zero · musl 1.2.5 · zig cc 0.16.0 · Linux 6.16.12 y
7.1.2 · Wayland 1.25.0 · Mesa 24.0.9 · PipeWire 1.2.7 · BLAKE3
· escritorios mirada 41/41 · KDE 6.7.2 430/431 · GNOME 48.8 359/359 ·
COSMIC 1.5.0 294/294 · sway 1.10 281/281
· 24 paquetes bash 5.3, git 2.54.0, openssl 3.5.4, python 3.12.10, go 1.26.4,
rust 1.97.0, llvm 21.1.2, firefox 154.0…
Y las cifras se recontaron hoy en vez de repetir las del lunes: **954 recetas, las
954 selladas, cero deuda** (eran 941/926/15) y **1.490 artefactos** (eran 1.407). La
deuda se cerró sola mientras se escribía la página; dejarla escrita habría sido
mentir hacia abajo, que es igual de falso que mentir hacia arriba.
**04 y 05 se unen.** «Los repositorios» y «cómo se llama» eran el mismo asunto
—dónde vive y cómo se llama— partido en dos sellos. Una sección: las dos
direcciones, el reparto del repo, y los tres bloques de comandos.
⚠ Las versiones están a mano en el HTML y envejecen con las recetas. El README del
sitio deja el comando que las vuelve a sacar; no hay generador, a propósito.
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
2 qillqakuna · +108 −37
- web/takana-os.net/README.md +25 −0
- web/takana-os.net/index.html +83 −37
diff --git a/web/takana-os.net/README.md b/web/takana-os.net/README.md
index a324f7c8..b0542fec 100644
--- a/web/takana-os.net/README.md
+++ b/web/takana-os.net/README.md
@@ -11,6 +11,31 @@ las fuentes de Google en cada visita sería una contradicción barata.
| `fuentes.css` + `fuentes/` | las ocho caras `@font-face`, servidas de acá |
| `simbolo.svg` | el favicon — el martillo tocapu 7×7, derivado de `docs/marca/simbolo-fondo-claro.svg` |
+## Las cuatro secciones
+
+`01 descargar` · `02 las decisiones` · `03 los componentes` · `04 el código`.
+
+**`03` es una ficha de distro, no un semáforo** (2026-09-23, a pedido del usuario: «que no presuma
+inmadurez»). Antes era una tabla con 🟢/🟡/⚪ y una fila que decía «distro redonda — todavía no»:
+una página que le cuenta al visitante lo que le falta antes que lo que tiene. Ahora son tres tablas
+al estilo DistroWatch — el sistema (init, libc, compilador, kernel, gráficos, audio, almacén,
+catálogo), los cinco escritorios con su versión y su clausura sellada, y los paquetes principales
+con su número de versión.
+
+⚠ **Esas versiones salen de las recetas y hay que refrescarlas.** Están a mano en el HTML: si una
+receta sube de versión, la página miente hasta que alguien la toque. Se sacan así:
+
+```sh
+for r in bash coreutils git curl openssl python3 go rust llvm21 firefox …; do
+ printf '%-12s %s\n' "$r" "$(grep -m1 '^version' recipes/$r.toml | sed 's/.*= *"//; s/"//')"
+done
+python3 -c "import json;d=json.load(open('docs/state/build-state.json'));print(d['totals'])"
+ls /store | wc -l
+```
+
+**`04` junta lo que eran dos secciones** («los repositorios» y «cómo se llama»): las dos direcciones,
+el reparto del repo y los tres bloques de comandos son el mismo asunto — dónde vive y cómo se llama.
+
## La sección «las decisiones»
**Trece fichas plegables** (`<details>`, sin una línea de JavaScript), cada una con tres lecturas de
diff --git a/web/takana-os.net/index.html b/web/takana-os.net/index.html
index 0260e800..db6b7c1f 100644
--- a/web/takana-os.net/index.html
+++ b/web/takana-os.net/index.html
@@ -196,6 +196,15 @@ td{color:var(--tenue)}
td.n{font-family:var(--mono);white-space:nowrap;color:var(--texto)}
.semaforo{white-space:nowrap}
+/* los paquetes principales al estilo de una ficha de distro: nombre y versión en
+ rejilla, para que entren de un vistazo y no en una tabla de quince filas */
+.versiones{display:grid;grid-template-columns:repeat(auto-fill,minmax(158px,1fr));
+ gap:.22rem .9rem;margin:.7rem 0 1.3rem;list-style:none}
+.versiones li{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem;
+ font:.85rem/1.85 var(--mono);border-bottom:1px dotted var(--linea)}
+.versiones li b{font-weight:500;color:var(--texto)}
+.versiones li span{color:var(--tenue)}
+
.nota{font-size:.82rem;color:var(--debil);border-left:2px solid var(--linea2);padding-left:.8rem}
footer.pie{border-top:1px solid var(--linea);background:var(--papel);padding:2.6rem 0 3.4rem}
@@ -242,8 +251,8 @@ footer.pie{border-top:1px solid var(--linea);background:var(--papel);padding:2.6
<nav class="enlaces">
<a href="#descargar"><span data-l="es">Descargar</span><span data-l="en">Download</span></a>
<a href="#decisiones"><span data-l="es">Las decisiones</span><span data-l="en">The decisions</span></a>
- <a href="#estado"><span data-l="es">El estado</span><span data-l="en">State</span></a>
- <a href="#repositorios"><span data-l="es">Repositorios</span><span data-l="en">Repositories</span></a>
+ <a href="#componentes"><span data-l="es">Los componentes</span><span data-l="en">Components</span></a>
+ <a href="#codigo"><span data-l="es">El código</span><span data-l="en">The code</span></a>
</nav>
<div class="perillas">
<button class="perilla" data-poner-lang="es">ES</button>
@@ -253,18 +262,18 @@ footer.pie{border-top:1px solid var(--linea);background:var(--papel);padding:2.6
</div></header>
<section class="portada"><div class="fragua" aria-hidden="true"></div><div class="envoltura">
- <p class="antetitulo"><span data-l="es">takana · de <em>takay</em>: golpear, martillar</span><span data-l="en">takana · from <em>takay</em>: to strike, to hammer</span></p>
+ <p class="antetitulo"><span data-l="es">takana · el martillo</span><span data-l="en">takana · the hammer</span></p>
<div class="titular">
<svg class="simbolo" viewBox="0 0 748 748" aria-hidden="true"><use href="#tocapu"/></svg>
<h1>takana</h1>
</div>
<p class="lema">
- <span data-l="es">Un Linux que podés romper a mano sin dejar de saber de dónde salió cada byte: todo lo que corre se rehace desde su código fuente, igual al último bit, y nada de eso te quita la máquina. Por separado, las dos cosas ya existen. Juntas, no.</span>
- <span data-l="en">A Linux you can break by hand without losing track of where every byte came from: everything that runs can be rebuilt from its source code, identical to the last bit, and none of that takes the machine away from you. Separately, both things already exist. Together, they don't.</span>
+ <span data-l="es">Un Linux mutable que podés romper y recuperar, manteniendo su pureza hasta el último bit.</span>
+ <span data-l="en">A mutable Linux you can break and recover, its purity intact down to the last bit.</span>
</p>
<div class="botones">
<a class="boton lleno" href="#descargar"><span data-l="es">Descargar</span><span data-l="en">Download</span></a>
- <a class="boton" href="#repositorios"><span data-l="es">El repositorio</span><span data-l="en">The repository</span></a>
+ <a class="boton" href="#codigo"><span data-l="es">El repositorio</span><span data-l="en">The repository</span></a>
<a class="boton" href="https://tawasuyu.net">tawasuyu.net ↗</a>
</div>
</div></section>
@@ -486,41 +495,83 @@ footer.pie{border-top:1px solid var(--linea);background:var(--papel);padding:2.6
</div>
</div></section>
-<section class="franja" id="estado"><div class="envoltura">
- <p class="sello"><svg class="simbolo" viewBox="0 0 748 748"><use href="#tocapu"/></svg><span data-l="es">03 · el estado, medido</span><span data-l="en">03 · the state, measured</span></p>
- <h2><span data-l="es">Qué anda y qué no</span><span data-l="en">What works and what doesn't</span></h2>
+<section class="franja" id="componentes"><div class="envoltura">
+ <p class="sello"><svg class="simbolo" viewBox="0 0 748 748"><use href="#tocapu"/></svg><span data-l="es">03 · los componentes</span><span data-l="en">03 · the components</span></p>
+ <h2><span data-l="es">Qué lleva dentro</span><span data-l="en">What is inside</span></h2>
+
<table>
<thead><tr>
- <th><span data-l="es">Pieza</span><span data-l="en">Piece</span></th>
- <th class="semaforo"><span data-l="es">Estado</span><span data-l="en">State</span></th>
- <th><span data-l="es">Qué quiere decir</span><span data-l="en">What that means</span></th>
+ <th><span data-l="es">pieza</span><span data-l="en">piece</span></th>
+ <th><span data-l="es">versión</span><span data-l="en">version</span></th>
+ <th></th>
</tr></thead>
<tbody>
- <tr><td><span data-l="es">Núcleo del laboratorio</span><span data-l="en">Laboratory core</span></td><td class="semaforo">🟢</td><td><span data-l="es">Compila aislado y direcciona por hash BLAKE3.</span><span data-l="en">Sandboxed builds, BLAKE3 content addressing.</span></td></tr>
- <tr><td><span data-l="es">Auto-hospedaje</span><span data-l="en">Self-hosting</span></td><td class="semaforo">🟢</td><td><span data-l="es">El toolchain se reconstruye a sí mismo dentro de una máquina virtual, bit por bit igual.</span><span data-l="en">The toolchain rebuilds itself inside a VM, bit for bit identical.</span></td></tr>
- <tr><td><span data-l="es">Cadena Rust/LLVM</span><span data-l="en">Rust/LLVM chain</span></td><td class="semaforo">🟢</td><td><span data-l="es">De mrustc hasta rustc, sin binarios ajenos de confianza.</span><span data-l="en">From mrustc up to rustc, with no trusted foreign binaries.</span></td></tr>
- <tr><td><span data-l="es">Kernel propio</span><span data-l="en">Own kernel</span></td><td class="semaforo">🟢</td><td><span data-l="es">Linux compilado acá (6.16.12 y 7.1.2), que arranca la máquina y reproduce idéntico.</span><span data-l="en">Linux built here (6.16.12 and 7.1.2), boots the machine and reproduces identically.</span></td></tr>
- <tr><td><span data-l="es">Catálogo</span><span data-l="en">Catalogue</span></td><td class="n">941</td><td><span data-l="es"><strong>926 selladas</strong>, 15 en deuda. Una granja compila y promueve las que funcionan.</span><span data-l="en"><strong>926 sealed</strong>, 15 in debt. A farm builds and promotes the ones that work.</span></td></tr>
- <tr><td><span data-l="es">Almacén</span><span data-l="en">Store</span></td><td class="n">1407</td><td><span data-l="es">Artefactos direccionados por contenido, cada uno con su hash.</span><span data-l="en">Content-addressed artefacts, each with its hash.</span></td></tr>
- <tr><td><span data-l="es">Paquetería</span><span data-l="en">Packaging</span></td><td class="semaforo">🟢</td><td><span data-l="es">Empaquetar, repositorio firmado, instalar, desinstalar, dependencias y repo por red.</span><span data-l="en">Package, signed repository, install, uninstall, dependencies and network repo.</span></td></tr>
- <tr><td><span data-l="es">Escritorios</span><span data-l="en">Desktops</span></td><td class="semaforo">🟢</td><td><span data-l="es">Cuatro perfiles con su clausura sellada: KDE 418/420, GNOME 318/319, COSMIC 282/283, sway 269/270.</span><span data-l="en">Four profiles with their closure sealed: KDE 418/420, GNOME 318/319, COSMIC 282/283, sway 269/270.</span></td></tr>
- <tr><td><span data-l="es">Instalar en disco real</span><span data-l="en">Install on a real disk</span></td><td class="semaforo">🟡</td><td><span data-l="es">Las imágenes EFI/ISO arrancan en metal; el instalador desde el vivo está a medias.</span><span data-l="en">EFI/ISO images boot on bare metal; the installer from the live system is half done.</span></td></tr>
- <tr><td><span data-l="es">Distro redonda</span><span data-l="en">A rounded distro</span></td><td class="semaforo">⚪</td><td><span data-l="es">Instalable por alguien que no la escribió. Todavía no.</span><span data-l="en">Installable by somebody who didn't write it. Not yet.</span></td></tr>
+ <tr><td><span data-l="es">init</span><span data-l="en">init</span></td><td class="n">arje-zero</td><td><span data-l="es">el proceso número uno, estático contra musl; los servicios se declaran en Cards JSON</span><span data-l="en">process number one, statically linked against musl; services are declared in JSON Cards</span></td></tr>
+ <tr><td>libc</td><td class="n">musl 1.2.5</td><td><span data-l="es">estática por defecto</span><span data-l="en">static by default</span></td></tr>
+ <tr><td><span data-l="es">compilador del laboratorio</span><span data-l="en">laboratory compiler</span></td><td class="n">zig cc 0.16.0</td><td><span data-l="es">reemplazable receta por receta; también hay LLVM 21.1.2 y clang 18.1.8</span><span data-l="en">replaceable recipe by recipe; LLVM 21.1.2 and clang 18.1.8 are there too</span></td></tr>
+ <tr><td>kernel</td><td class="n">Linux 6.16.12 · 7.1.2</td><td><span data-l="es">compilados acá; arrancan la máquina y reproducen idénticos</span><span data-l="en">built here; they boot the machine and reproduce identically</span></td></tr>
+ <tr><td><span data-l="es">gráficos</span><span data-l="en">graphics</span></td><td class="n">Wayland 1.25.0 · Mesa 24.0.9</td><td><span data-l="es">sin X11 en todo el catálogo</span><span data-l="en">no X11 anywhere in the catalogue</span></td></tr>
+ <tr><td><span data-l="es">audio</span><span data-l="en">audio</span></td><td class="n">PipeWire 1.2.7 · WirePlumber 0.5.15</td><td><span data-l="es">servicio de sesión</span><span data-l="en">session service</span></td></tr>
+ <tr><td><span data-l="es">almacén</span><span data-l="en">store</span></td><td class="n">BLAKE3</td><td><span data-l="es"><strong>1.490 artefactos</strong> direccionados por contenido</span><span data-l="en"><strong>1,490 artefacts</strong> addressed by content</span></td></tr>
+ <tr><td><span data-l="es">catálogo</span><span data-l="en">catalogue</span></td><td class="n">954</td><td><span data-l="es">recetas, <strong>las 954 selladas</strong>, sin deuda</span><span data-l="en">recipes, <strong>all 954 sealed</strong>, no debt</span></td></tr>
+ <tr><td><span data-l="es">paquetes</span><span data-l="en">packages</span></td><td class="n">.tkn</td><td><span data-l="es">índice firmado Ed25519; se reconstruyen desde fuente al instalar</span><span data-l="en">Ed25519-signed index; rebuilt from source on install</span></td></tr>
+ <tr><td><span data-l="es">herramienta</span><span data-l="en">tool</span></td><td class="n">takana 0.0.1</td><td><code>build · hash · hydrate · install · kernel · qorpa</code></td></tr>
</tbody>
</table>
- <p>
- <span data-l="es">Lo más difícil ya está: <strong>no dependemos de binarios precocidos de nadie</strong>. Partiendo de un compilador mínimo, takana reconstruye su propio Rust, su propio kernel y sus propias herramientas — y al hacerlo dos veces da exactamente el mismo resultado. Se probó dentro de una máquina virtual, no en teoría.</span>
- <span data-l="en">The hardest part is done: <strong>we depend on nobody's precooked binaries</strong>. Starting from a minimal compiler, takana rebuilds its own Rust, its own kernel and its own tools — and doing it twice gives exactly the same result. It was proved inside a virtual machine, not in theory.</span>
- </p>
+
+ <h3><span data-l="es">Escritorios</span><span data-l="en">Desktops</span></h3>
+ <table>
+ <thead><tr>
+ <th><span data-l="es">escritorio</span><span data-l="en">desktop</span></th>
+ <th><span data-l="es">versión</span><span data-l="en">version</span></th>
+ <th><span data-l="es">de su clausura, sellados</span><span data-l="en">of its closure, sealed</span></th>
+ </tr></thead>
+ <tbody>
+ <tr><td><code>mirada</code></td><td class="n"><span data-l="es">propio</span><span data-l="en">our own</span></td><td class="n">41/41</td></tr>
+ <tr><td>KDE Plasma</td><td class="n">6.7.2</td><td class="n">430/431</td></tr>
+ <tr><td>GNOME</td><td class="n">48.8</td><td class="n">359/359</td></tr>
+ <tr><td>COSMIC</td><td class="n">1.5.0</td><td class="n">294/294</td></tr>
+ <tr><td>sway</td><td class="n">1.10</td><td class="n">281/281</td></tr>
+ </tbody>
+ </table>
+
+ <h3><span data-l="es">Paquetes principales</span><span data-l="en">Main packages</span></h3>
+ <ul class="versiones">
+ <li><b>bash</b><span>5.3</span></li>
+ <li><b>coreutils</b><span>9.8</span></li>
+ <li><b>uutils</b><span>0.9.0</span></li>
+ <li><b>busybox</b><span>1.36.1</span></li>
+ <li><b>git</b><span>2.54.0</span></li>
+ <li><b>curl</b><span>8.20.0</span></li>
+ <li><b>openssl</b><span>3.5.4</span></li>
+ <li><b>openssh</b><span>10.3p1</span></li>
+ <li><b>gnupg</b><span>2.4.9</span></li>
+ <li><b>python</b><span>3.12.10</span></li>
+ <li><b>go</b><span>1.26.4</span></li>
+ <li><b>rust</b><span>1.97.0</span></li>
+ <li><b>llvm</b><span>21.1.2</span></li>
+ <li><b>sqlite</b><span>3.46.1</span></li>
+ <li><b>zstd</b><span>1.5.7</span></li>
+ <li><b>ffmpeg</b><span>7.1</span></li>
+ <li><b>vim</b><span>9.2.0747</span></li>
+ <li><b>nano</b><span>9.0</span></li>
+ <li><b>helix</b><span>25.07.1</span></li>
+ <li><b>ripgrep</b><span>14.1.1</span></li>
+ <li><b>zellij</b><span>0.44.3</span></li>
+ <li><b>foot</b><span>1.27.0</span></li>
+ <li><b>firefox</b><span>154.0</span></li>
+ <li><b>atuq</b><span>0.5.0</span></li>
+ </ul>
+
<p class="nota">
- <span data-l="es">Las cifras salen de <code>docs/state/build-state.json</code> y del almacén de la caja. No se estiman: se cuentan. Lo que sigue abierto también está escrito: consenso de reconstrucción M-de-N, y el instalador desde el vivo.</span>
- <span data-l="en">The figures come from <code>docs/state/build-state.json</code> and the box's store. They are not estimated: they are counted. What is still open is written down too: M-of-N rebuild consensus, and the installer from the live system.</span>
+ <span data-l="es">Las versiones salen de las recetas del catálogo y las cifras de <code>docs/state/build-state.json</code> y del almacén de la caja. No se estiman: se cuentan. Lo que sigue abierto también está escrito: consenso de reconstrucción M-de-N.</span>
+ <span data-l="en">Versions come from the catalogue's recipes and the figures from <code>docs/state/build-state.json</code> and the box's store. They are not estimated: they are counted. What is still open is written down too: M-of-N rebuild consensus.</span>
</p>
</div></section>
-<section class="franja" id="repositorios"><div class="envoltura">
- <p class="sello"><svg class="simbolo" viewBox="0 0 748 748"><use href="#tocapu"/></svg><span data-l="es">04 · los repositorios</span><span data-l="en">04 · the repositories</span></p>
- <h2><span data-l="es">Los repositorios</span><span data-l="en">The repositories</span></h2>
+<section class="franja" id="codigo"><div class="envoltura">
+ <p class="sello"><svg class="simbolo" viewBox="0 0 748 748"><use href="#tocapu"/></svg><span data-l="es">04 · el código</span><span data-l="en">04 · the code</span></p>
+ <h2><span data-l="es">Dónde vive y cómo se llama</span><span data-l="en">Where it lives and how it is called</span></h2>
<div class="direccion">
<p class="etiqueta"><span data-l="es">código · licencia MIT</span><span data-l="en">code · MIT licence</span></p>
@@ -541,13 +592,8 @@ footer.pie{border-top:1px solid var(--linea);background:var(--papel);padding:2.6
<li><code>scripts/</code> — <span data-l="es">la granja de compilación, la cosecha y los arneses de verificación.</span><span data-l="en">the build farm, the harvest and the verification harnesses.</span></li>
</ul>
</div>
-</div></section>
-<section class="franja" id="llamar"><div class="envoltura">
- <p class="sello"><svg class="simbolo" viewBox="0 0 748 748"><use href="#tocapu"/></svg><span data-l="es">05 · cómo se llama</span><span data-l="en">05 · how it is called</span></p>
- <h2><span data-l="es">Cómo se llama</span><span data-l="en">How it is called</span></h2>
-
- <div class="bloque">
+<div class="bloque">
<p class="rotulo"><span data-l="es">el laboratorio</span><span data-l="en">the laboratory</span></p>
<div class="codigo"><pre>$ takana hash ripgrep <span class="c"># <span data-l="es">el hash vigente, sin construir</span><span data-l="en">the current hash, without building</span></span>
<span class="p">$</span> takana build ripgrep <span class="c"># <span data-l="es">compila aislado y sella en el almacén</span><span data-l="en">builds sandboxed and seals into the store</span></span>