Files
hammer/docs/adr/0001-rust-for-tooling.md
T
sergioandClaude Opus 4.8 8bf1623044 Scaffold inicial: workspace Rust + SDDs completos
Arranque del proyecto hammer (distro AI-nativa: laboratorio funcional en el
sótano, terminal mutable clásica arriba, integración de IA programadora).

- Workspace Rust (compila, tests verdes): hammer-core, hammer-build,
  hammer-cli (bin `hammer`), hammerd.
- SDDs 00-10 + 6 ADRs en docs/ con toda la arquitectura.
- Esqueletos navegables mapeados a las fases del roadmap; Fase 0/1 listas
  para implementar el sandbox real.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 19:06:04 +00:00

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