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.
31 lines
1.2 KiB
Markdown
31 lines
1.2 KiB
Markdown
# 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](0003-zig-cc-builder.md)).
|
|
- Perfil `release` ya configurado para binarios pequeños (`opt-level=z`, `lto`, `strip`,
|
|
`panic=abort`).
|