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