# 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 `hammer` 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`).