takana · de takay: golpear, martillartakana · from takay: to strike, to hammer
Una distribución de Linux con dos pisos: abajo un laboratorio hermético que compila todo desde fuente y guarda cada artefacto por su hash; arriba un Linux clásico y mutable donde se pueden romper cosas y volver atrás. A Linux distribution with two floors: downstairs a hermetic laboratory that compiles everything from source and keeps every artefact by its hash; upstairs a classic, mutable Linux where you can break things and go back.
01 · los dos pisos01 · the two floors
Una distribución inmutable da reproducibilidad y quita la máquina: no se puede tocar nada sin aprender antes un lenguaje declarativo. Una clásica deja tocar todo y no sabe decir de dónde salió un binario. takana pone las dos, en pisos separados. An immutable distribution gives you reproducibility and takes the machine away: you cannot touch anything without first learning a declarative language. A classic one lets you touch everything and cannot tell you where a binary came from. takana has both, on separate floors.
El laboratorio compila desde fuentes upstream con commits fijados, aislado (bubblewrap + zig cc + musl estático), y direcciona cada artefacto por su hash BLAKE3. El userland es un Linux normal, con /bin, /lib y /etc de verdad; los binarios se hidratan del almacén por enlaces duros. Se pueden pisar archivos en caliente y revertir cuando se quiera.
The laboratory compiles from upstream sources at pinned commits, sandboxed (bubblewrap + zig cc + static musl), and addresses every artefact by its BLAKE3 hash. The userland is an ordinary Linux, with a real /bin, /lib and /etc; binaries are hydrated from the store by hard links. You can overwrite files live and revert whenever you want.
try, commit, discard.Experimentation overlay. A change on the real system, with a safety net: try, commit, discard.fanotify registra lo que se cambia a mano. Se vive de forma imperativa y el sistema calcula el delta contra la base limpia — el diario es la configuración.Mutation journal. A fanotify daemon records what you change by hand. You live imperatively and the system computes the delta against the clean base — the journal is the configuration..swm. Se comparte la receta de la mutación —parche de fuente, banderas, ediciones de config—, no el binario cocinado. Quien lo recibe lo reproduce y lo verifica..swm manifest. You share the recipe for the mutation — source patch, flags, config edits — not the cooked binary. Whoever receives it reproduces and verifies it.02 · el código02 · the code
Todo —el CLI, el laboratorio, el catálogo de recetas y el diseño completo— está en un solo repositorio, bajo licencia MIT. Everything — the CLI, the laboratory, the recipe catalogue and the full design — lives in a single repository, under the MIT licence.
repositorio de códigocode repository
https://git.gioser.net/sergio/takana$ git clone https://git.gioser.net/sergio/takana.git $ cd takana && cargo build --release $ ./target/release/takana --help
El repositorio no trae binarios: trae recetas. Cada una fija la fuente upstream por commit o por sha256, y el hash del artefacto sale de la receta entera —fuente, compilador, banderas, fases y los hashes de sus dependencias—, así que se puede saber qué va a salir antes de compilar: The repository ships no binaries: it ships recipes. Each one pins the upstream source by commit or sha256, and the artefact hash is derived from the whole recipe — source, compiler, flags, phases and the hashes of its dependencies — so you can know what will come out before building it:
$ takana hash ripgrep # el ArtifactHash vigente, sin construir $ takana build ripgrep # compila aislado y sella en el store $ takana why-differs a/ b/ # si dos builds no coinciden, NOMBRA la causa
crates/ — el CLI, el laboratorio de build, el demonio, el diario y el overlay.the CLI, the build lab, the daemon, the journal and the overlay.recipes/ — el catálogo: una receta .toml por paquete.the catalogue: one .toml recipe per package.docs/ — el diseño entero (SDD y ADR). Empieza por 00-vision.md.the entire design (SDDs and ADRs). Start at 00-vision.md.scripts/ — la granja de compilación, la cosecha y los arneses de verificación.the build farm, the harvest and the verification harnesses.03 · el estado, medido03 · the state, measured
| PiezaPiece | EstadoState | Qué quiere decirWhat that means |
|---|---|---|
| Núcleo del laboratorioLaboratory core | 🟢 | Compila aislado y direcciona por hash BLAKE3.Sandboxed builds, BLAKE3 content addressing. |
| Auto-hospedajeSelf-hosting | 🟢 | El toolchain se reconstruye a sí mismo dentro de una máquina virtual, bit por bit igual.The toolchain rebuilds itself inside a VM, bit for bit identical. |
| Cadena Rust/LLVMRust/LLVM chain | 🟢 | De mrustc hasta rustc, sin binarios ajenos de confianza.From mrustc up to rustc, with no trusted foreign binaries. |
| Kernel propioOwn kernel | 🟢 | Linux compilado acá (6.16.12 y 7.1.2), que arranca la máquina y reproduce idéntico.Linux built here (6.16.12 and 7.1.2), boots the machine and reproduces identically. |
| CatálogoCatalogue | 941 | 926 selladas, 15 en deuda. Una granja compila y promueve las que funcionan.926 sealed, 15 in debt. A farm builds and promotes the ones that work. |
| AlmacénStore | 1407 | Artefactos direccionados por contenido, cada uno con su hash.Content-addressed artefacts, each with its hash. |
| PaqueteríaPackaging | 🟢 | Empaquetar, repositorio firmado, instalar, desinstalar, dependencias y repo por red.Package, signed repository, install, uninstall, dependencies and network repo. |
| EscritoriosDesktops | 🟢 | Cuatro perfiles con su clausura sellada: KDE 418/420, GNOME 318/319, COSMIC 282/283, sway 269/270.Four profiles with their closure sealed: KDE 418/420, GNOME 318/319, COSMIC 282/283, sway 269/270. |
| Instalar en disco realInstall on a real disk | 🟡 | Las imágenes EFI/ISO arrancan en metal; el instalador desde el vivo está a medias.EFI/ISO images boot on bare metal; the installer from the live system is half done. |
| Distro redondaA rounded distro | ⚪ | Instalable por alguien que no la escribió. Todavía no.Installable by somebody who didn't write it. Not yet. |
Lo más difícil ya está: no dependemos de binarios precocidos de nadie. 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. The hardest part is done: we depend on nobody's precooked binaries. 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.
Las cifras salen de docs/state/build-state.json y del almacén de la caja, medidas el 2026-09-21. No se estiman: se cuentan.
The figures come from docs/state/build-state.json and the box's store, measured on 2026-09-21. They are not estimated: they are counted.
04 · los paquetes04 · the packages
El índice está firmado y cada paquete trae la receta de su contenido, no el binario cocinado: install resuelve el nombre, verifica la firma del índice y reconstruye desde fuente antes de hidratar. Un origen de descarga no necesita ser de confianza — lo que se verifica es el contenido.
The index is signed and each package carries the recipe for its content, not the cooked binary: install resolves the name, verifies the index signature and rebuilds from source before hydrating. A download origin does not need to be trusted — what gets verified is the content.
repositorio de paquetespackage repository
https://takana-os.net/repo/$ takana install age --repo https://takana-os.net/repo --trust ./trust
Hoy publica la clausura del perfil servidor. El mismo repo se sirve también en repo.gioser.net; --repo acepta varios orígenes separados por coma y los prueba en orden.
It currently publishes the closure of the servidor profile. The same repo is also served at repo.gioser.net; --repo takes several comma-separated origins and tries them in order.
05 · la frontera05 · the border
takana es el suelo; tawasuyu es lo que se para encima. No son dos mundos sueltos: comparten el almacén direccionado por contenido (BLAKE3), un bus entre el init de tawasuyu y el demonio de takana con contrato por bytes, el grafo de arranque, y arje —el proceso número uno de tawasuyu— como init de las imágenes, estático contra musl.
takana is the ground; tawasuyu is what stands on it. They are not two loose worlds: they share the content-addressed store (BLAKE3), a bus between tawasuyu's init and takana's daemon with a byte-level contract, the boot graph, and arje — tawasuyu's process number one — as the init of the images, statically linked against musl.
Lo que sigue abierto está escrito y priorizado, no supuesto: consenso de reconstrucción M-de-N, y explicar por qué difiere cuando dos compilaciones no dan el mismo hash. What is still open is written down and prioritised, not assumed: M-of-N rebuild consensus, and explaining why it differs when two builds don't produce the same hash.