1# ADR 0001 — Rust para el tooling y los daemons
2
3- **Estado:** aceptada
4- **Fecha:** 2026-06-06
5
6## Contexto
7
8Necesitamos un lenguaje para `hammerd`, las CLIs y el daemon del diario. Candidatos: Rust, Go,
9Zig. El sistema manipula ELF, sockets UNIX, `fanotify`, `overlayfs`, namespaces, y produce
10binarios que deben correr en un userland musl, posiblemente estáticos.
11
12## Decisión
13
14**Rust** para todo el tooling y los daemons.
15
16## Razones
17
18- **Binarios estáticos-musl** de primera (`x86_64-unknown-linux-musl`), justo nuestro target.
19- Ecosistema fuerte para lo que hacemos: parsing/edición ELF, sockets, `nix`/`rustix` para
20 syscalls (`fanotify`, namespaces), `blake3`, `serde`.
21- Seguridad de memoria sin GC; importante en un daemon de larga vida con privilegios.
22- El autor lo eligió explícitamente.
23
24## Consecuencias
25
26- Curva de entrada más alta que Go; asumida.
27- Compilación del compilador del lab es **ortogonal**: escribimos `takana` en Rust, el lab
28 invoca `zig cc` para compilar C/C++ upstream. Sin conflicto (ver [ADR 0003](0003-zig-cc-builder.md)).
29- Perfil `release` ya configurado para binarios pequeños (`opt-level=z`, `lto`, `strip`,
30 `panic=abort`).
0001-rust-for-tooling.md
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).