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>
37 lines
1.7 KiB
Markdown
37 lines
1.7 KiB
Markdown
# ADR 0003 — `zig cc` como compilador por defecto del laboratorio
|
|
|
|
- **Estado:** aceptada
|
|
- **Fecha:** 2026-06-06
|
|
|
|
## Contexto
|
|
|
|
El lab compila C/C++ upstream de forma hermética hacia un target musl, idealmente estático, y
|
|
debe evitar contaminación del host. La opción clásica es construir un cross-toolchain (Stage 0)
|
|
a mano: largo y frágil.
|
|
|
|
## Decisión
|
|
|
|
Usar **`zig cc` como compilador por defecto** del lab, con el compilador **configurable por
|
|
receta** (escotilla a `clang`/`gcc`). Esto es ortogonal al lenguaje del tooling, que es Rust
|
|
([ADR 0001](0001-rust-for-tooling.md)): Rust orquesta, `zig cc` aprieta el tornillo.
|
|
|
|
## Razones
|
|
|
|
- **Mata el bootstrap:** un solo binario (~45 MB) provee compilador C/C++ + **musl** + headers,
|
|
para múltiples arquitecturas. Resuelve gran parte del Stage 0/1.
|
|
- **Hermético por defecto:** trae sus propios headers de libc, no chupa `/usr/include` del
|
|
host. Justo nuestro requisito de no-contaminación.
|
|
- **Cross-compile trivial:** `-target x86_64-linux-musl`, aarch64, etc. Clave para el track de
|
|
distro propia y otras arquitecturas.
|
|
- **Determinista:** ayuda directamente al hashing CAS y a la reproducibilidad
|
|
([SDD 09](../09-trust-model.md)).
|
|
|
|
## Consecuencias / riesgos
|
|
|
|
- `zig cc` es clang por debajo: algunos paquetes con **gcc-ismos** (extensiones GNU, flags
|
|
específicos) o `configure` de autotools mal detectado **fallarán**. Por eso el compilador es
|
|
**por receta**, no global: escotilla a `clang`/`gcc` cuando haga falta.
|
|
- No todo upstream compila limpio con clang/musl independientemente del compilador; es fricción
|
|
inherente a musl/static, no de `zig`.
|
|
- La versión de `zig` forma parte del hash de entrada del build (reproducibilidad).
|