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 distroInstalable 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.