Files
takana/docs/adr/0001-rust-for-tooling.md
Sergio 97ceb72411 takana etapa 5b: los 59 docs de diseño, runbooks y ADR
645 líneas. Los ADR entran porque en este repo SON documentos vivos, no
registros inmutables: el 0013 tiene 5 commits, el 0009 dos. Eso se comprobó
antes de decidir, no se asumió por convención general.

EXCLUIDOS por ser REGISTRO o generado: docs/evidencia/ (6), el HANDOFF de la
noche de KDE (1) y docs/state/ (24, se regenera solo). Reescribir un comando
dentro de una evidencia la falsifica.

Y el ADR 0016 se excluye de todo barrido, con un aviso adentro para el próximo
que barra: habla SOBRE el renombre, así que necesita seguir diciendo 'hammer'.
El barrido se lo llevó puesto y lo dejó titulado 'Renombre del sistema: takana
→ takana'; revertido.

Congelados, verificados uno por uno con controles: /opt/hammer, /var/lib/hammer,
/usr/bin/hammer, /mnt/vvv/hammer, la URL de gitea, hammer-farm.service,
hammer-live-install.sh, BRIEFING-hammer.md, hammerd, hammer-recover y
HAMMER_LIVE.
2026-09-09 19:25:51 +00:00

1.2 KiB

ADR 0001 — Rust para el tooling y los daemons

  • Estado: aceptada
  • Fecha: 2026-06-06

Contexto

Necesitamos un lenguaje para hammerd, las CLIs y el daemon del diario. Candidatos: Rust, Go, Zig. El sistema manipula ELF, sockets UNIX, fanotify, overlayfs, namespaces, y produce binarios que deben correr en un userland musl, posiblemente estáticos.

Decisión

Rust para todo el tooling y los daemons.

Razones

  • Binarios estáticos-musl de primera (x86_64-unknown-linux-musl), justo nuestro target.
  • Ecosistema fuerte para lo que hacemos: parsing/edición ELF, sockets, nix/rustix para syscalls (fanotify, namespaces), blake3, serde.
  • Seguridad de memoria sin GC; importante en un daemon de larga vida con privilegios.
  • El autor lo eligió explícitamente.

Consecuencias

  • Curva de entrada más alta que Go; asumida.
  • Compilación del compilador del lab es ortogonal: escribimos takana en Rust, el lab invoca zig cc para compilar C/C++ upstream. Sin conflicto (ver ADR 0003).
  • Perfil release ya configurado para binarios pequeños (opt-level=z, lto, strip, panic=abort).