takana

takana · de takay: golpear, martillartakana · from takay: to strike, to hammer

takana

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

Por qué dos pisos y no unoWhy two floors and not one

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.

Las tres piezas del medioThe three pieces in between

  • Overlay de experimentación. Un cambio sobre el sistema real, con red: try, commit, discard.Experimentation overlay. A change on the real system, with a safety net: try, commit, discard.
  • Diario de mutaciones. Un demonio 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.
  • Manifiesto .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

Dónde vive el repositorioWhere the repository lives

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

Cómo está repartidoHow it is laid out

  • 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

Qué anda y qué noWhat works and what doesn't

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álogoCatalogue941926 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énStore1407Artefactos 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 repositorio de paquetesThe package repository

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 repo list   --repo https://takana-os.net/repo
$ takana repo verify --repo https://takana-os.net/repo --trust ./trust
$ 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

Qué tiene que ver con tawasuyuHow it relates to tawasuyu

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.