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…
el tar de busybox no sirve para un rootfs ajeno — y takana ya no dibuja un pingüino
1# os-release — la identidad del sistema, que hasta hoy NO EXISTÍA.
2#
3# Se descubrió al meter `fastfetch` (2026-09-14): en la caja de producción decía
4#
5# Host: vServer (20171111)
6# Kernel: Linux 7.1.2
7#
8# …y ni una palabra de takana, porque `/etc/os-release` no está. No es cosmético: ese fichero es lo
9# que TODO el mundo lee para saber en qué distro corre — fastfetch, los instaladores de terceros, los
10# scripts de CI, el propio `qorpa` el día que quiera distinguir anfitrión de huésped. Una distro sin
11# `os-release` es anónima para cualquier programa que no sea suyo.
12#
13# ══ POR QUÉ UNA RECETA Y NO UNA CONSTANTE EN `takana-bootstrap` ════════════════════════════════
14# El `/etc/passwd` del producto SÍ es una constante de Rust, y esa decisión ya costó: para añadir un
15# usuario había que recompilar takana (lo arregló `[[user]]`). Meter `os-release` ahí re-sellaría el
16# `product-rootfs`, que es el **baseline del selfhost**, por un fichero de cinco líneas. Como receta
17# entra por perfil, se edita sin tocar el bootstrap y su radio es cero.
18#
19# ══ Y EL LOGO, QUE ES PARTE DE LA IDENTIDAD ════════════════════════════════════════════════════
20# `fastfetch` dibujaba **el pingüino genérico de Linux**: elige el logo por el `ID` de `os-release`
21# y no conoce `takana`. Van juntos acá y no en la receta de fastfetch porque lo que se declara es la
22# identidad del sistema —nombre, URL, color, logo—, no la configuración de una herramienta: mañana
23# el que dibuje puede ser otro programa y el logo seguirá siendo el mismo fichero.
24# · `/usr/share/takana/logo.txt` — un martillo, que es lo que significa el nombre en quechua
25# · `/etc/xdg/fastfetch/config.jsonc` — la config GLOBAL (XDG), no la de un usuario
26#
27# ⚠ SIN VERSIÓN NI FECHA, a propósito. Un `VERSION_ID` con la fecha del build haría que este
28# artefacto —y con él la clausura de toda imagen que lo lleve— cambiara de hash cada día sin que
29# nada haya cambiado. La versión de una distro de árbol único es el hash de su imagen, que ya existe.
30name = "os-release"
31version = "1"
32license = "MIT"
33
34[source]
35dir = "os-release/tree"
36
37[build]
38compiler = "zig-cc"
39target = "x86_64-linux-musl"
40link = "static"
41flags = []
42
43[build.phases]
44configure = "true"
45compile = "true"
46install = "mkdir -p /out/etc /out/usr/lib && cp -a /src/etc/. /out/etc/ && cp -a /src/usr/. /out/usr/ && ln -sf ../../etc/os-release /out/usr/lib/os-release"