tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1531Shell 196Rust 108Markdown 983686 Definitions

⎇ 476168bb077db780e49c83e3ca4f0d3d230bd58a docs/adr/0003-zig-cc-builder.md Markdown · 36 lines · 1.7 KB History raw

Scaffold inicial: workspace Rust + SDDs completos 8bf162304 · sergio ·

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

0003-zig-cc-builder.md

ADR 0003 — zig cc como compilador por defecto del laboratorio

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): Rust orquesta, zig cc aprieta el tornillo.

Razones

Consecuencias / riesgos