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…
akllay sellado: b3:400e8114 — estático, 641 KB, y el guardián de estáticos lo confirma
1# akllay — el `awk` del producto. Código takana-PROPIO, no una adopción.
2#
3# Mismo patrón de receta que simi/netup/hammerd: un crate del workspace a un commit fijado, deps
4# vendoreadas para build hermético `--offline`, link estático con zig cc. Sólo depende de libc.
5#
6# ── EL NOMBRE, Y LA COLISIÓN QUE CASI SE COLÓ ───────────────────────────────────────────────────
7# *akllay* = escoger, seleccionar (separando, como los granos). Es lo que hace awk: elige los
8# registros que casan un patrón y escoge campos de cada uno.
9#
10# ⚠ Se llamó `qillqa` («escritura») durante un commit, y ese nombre **estaba tomado**: en
11# `tawasuyu/02_ruway/qillqa` hay un producto entero —registro público a prueba de manipulación, 16
12# crates, SDD propio— cuyo `qillqa-cli` instala un binario llamado exactamente `qillqa`. Dos
13# binarios homónimos en el mismo `/usr/bin` es una colisión de la que **no avisa nada**: gana el
14# último que hidrate, y takana empaqueta recetas de tawasuyu. Verificado ahora en los dos repos y
15# contra los 2193 nombres de binario del store: `akllay` libre, y `simi` también lo estaba.
16#
17# ── POR QUÉ PROPIO (decisión del usuario, 2026-09-22: «awk soberano») ───────────────────────────
18# El ADR pendiente de `docs/plan-botar-busybox.md` tenía tres candidatos y ninguno era gratis:
19# · gawk — C, con extensiones GNU que los `configure` del corpus sí usan. Adoptarlo es adoptar
20# un dialecto más grande que POSIX y una cadena que no es la nuestra.
21# · goawk — Go. Rompe la premisa de soberanía de cadena de la Etapa C.
22# · frawk — Rust, pero es otro dialecto (JIT, semántica propia).
23# La cuarta opción, escribirlo, es la que se tomó. 3531 líneas, cero crates de terceros, y un motor
24# de expresiones regulares propio: POSIX es leftmost-LONGEST y el crate `regex` es leftmost-first,
25# y esa diferencia decide qué borra un `sub()` y cuánto vale `RLENGTH`.
26#
27# ── LO MEDIDO ───────────────────────────────────────────────────────────────────────────────────
28# Banco diferencial contra DOS oráculos —`busybox awk` y `gawk --posix`— con 109 casos: 104 iguales
29# a los dos, 0 divergencias, 5 discrepancias ENTRE los oráculos (cuatro las tenemos del lado de
30# POSIX). Más los 59 programas awk reales de este repo, que acepta todos, y 29 pruebas propias.
31#
32# ⚠ Falta la prueba que de verdad decide, y esta cabecera no la finge: un `configure` de autotools
33# con akllay como `/usr/bin/awk`. Es la lección de brush, que pasó 56/57 casos POSIX y no construía
34# una sola receta.
35
36name = "akllay"
37version = "0.0.1"
38license = "MIT"
39
40[source]
41# El propio takana. El commit es el identificador inmutable; subirlo cuando akllay avance.
42repo = "https://git.gioser.net/sergio/takana.git"
43commit = "b045ea6fd48b517959ccad4d1aa09aaa17107f41"
44
45[build]
46compiler = "zig-cc"
47target = "x86_64-linux-musl"
48link = "static"
49
50# Split de la info de depuración, igual que hammerd y simi. Entra en `hash_inputs`.
51strip_debug = true
52# Sólo el binario `akllay` del workspace.
53flags = ["-p", "akllay"]
54
55# El BuildSys::Cargo instala el binario; el enlace `awk` lo pone esta receta porque **ese sí es
56# contrato**: lo llaman los `configure` del corpus y los guiones del producto. A diferencia de
57# `simi`, donde el symlink `sh` lo decide el ensamblado del rootfs —quién es /bin/sh es una
58# decisión de la raíz de confianza—, acá no hay nada que disputar: en el corpus no existe otro awk
59# declarado en ningún perfil.
60[build.phases]
61install = "mkdir -p /out/usr/bin && cp target/release/akllay /out/usr/bin/akllay && ln -sf akllay /out/usr/bin/awk"