Files
sergioandClaude Opus 5 346cd59706 licencias: campo license en la receta — de 0 a 228 de 1141, sin re-hashear nada
La deuda legal bloqueante del SDD 19 §2.1. Medido hoy: **0 de 1141 recetas** declaraban
licencia, no «5 de 771» como decía el informe anterior. Los dos números estaban mal: los
«5» eran falsos positivos de `grep license` (el paquete `addlicense`, el paquete
`cargo-bundle-licenses`, una línea `install .../share/licenses/` y un comentario), y las
recetas son 1141. Contar con `grep -l <palabra>` sobre TOML cuenta comentarios y nombres,
no campos; `scripts/licencias.sh` cuenta el campo de verdad (clave en la raíz, antes del
primer `[table]`).

LO QUE HACE LA DEUDA PAGABLE: `Recipe::hash_inputs` es una LISTA BLANCA — sólo entran
source, compiler, target, link, patches, flags, phases y deps. `license` no entra, igual
que `evidence` y `slots`. Por eso se puede poblar en las recetas YA SELLADAS sin mover un
solo ArtifactHash. Verificado, no supuesto: en 40 recetas modificadas se comparó el hash
con y sin la línea — 40 idénticos, 0 cambiados. Si el campo entrara al hash, declarar la
licencia costaría reconstruir el corpus entero y no se haría nunca. Clavado con el test
`licencia_round_trip_y_no_afecta_el_hash`.

TRAMPA DE TOML: una clave suelta después de un `[table]` pertenece a esa tabla. Puesta al
final del fichero, `license` acaba dentro de `[deps]` y se pierde EN SILENCIO, porque serde
ignora los campos que no conoce — no hay error, simplemente no está. Va arriba, junto a
`name` y `version`; el sembrador la inserta tras `version`.

NO SE ADIVINA. Declarar mal una licencia es peor que dejarla vacía: convierte un hueco
visible en una afirmación falsa. Sólo se puebla desde una tabla curada entrada por entrada
(`docs/licencias-conocidas.tsv`); lo que no tiene evidencia queda vacío y se CUENTA.
Concretamente se descartó el atajo «k* = KDE ⇒ LGPL»: en este catálogo `kail`, `kind`,
`ko`, `kopia`, `krew`, `kustomize`, `kyverno`, `katana`, `kibi`, `kmon` y toda la familia
`kube*` son herramientas Go sin relación con KDE. El nombre no es evidencia.

Quedan 913, casi todas CLIs Go/Rust importados en masa — y ésas sí son automatizables con
evidencia real: Cargo.toml trae el campo `license` y los módulos Go traen su LICENSE en el
árbol. El cierre estructural es capturarlo en la fase de fetch, que ya descarga y extrae
cada tarball, y inyectar el texto en `hammer pack` (aguas abajo del ArtifactHash) en vez de
en la fase install (que sí re-hashearía).

De paso, respaldo-storagebox.sh reordenado por valor irreemplazable y con zstd: medido en
la oficina, el uplink da 8 Mbps iguales por cable y por wifi ⇒ 128 G no caben en una
sentada, así que sube primero el cerebro (estado + repo) y `--partial-dir` hace que cortar
a mitad de un artefacto no tire lo ya subido.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-07 10:24:11 -04:00

47 lines
2.9 KiB
TOML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CMake 3.31.6 — dependencia de build del frente rust (variante b, SDD 11 §7.2b).
#
# rustc construye su LLVM bundled con CMake (mrustc README: "cmake ≥3.4.3, required for building llvm
# in rustc"). El toolchain Alpine lo trae como paquete; esta receta lo construye desde fuente para
# de-Alpinizar el camino de bootstrap de rust.
#
# CMake es una HERRAMIENTA del toolchain (corre en build-time, no se enlaza en el 4/4): no necesita
# casar byte-a-byte con la de Alpine, sólo configurar/generar igual. Build vainilla, sin patches.
#
# CMake trae su propio `bootstrap` (no autotools): compila un cmake mínimo con CC/CXX y luego se
# auto-configura. Enlace dinámico (un cmake estático con libc++/libstdc++ es impráctico y no aporta
# nada a una herramienta de build-time; la VM ya tiene libstdc++ runtime).
#
# -static-libstdc++ -static-libgcc: MATAR GCC, la última milla (SDD 16 §4.9). gcc sigue siendo el
# COMPILADOR (ver abajo: zig c++ segfaultea el cmake mínimo), pero su runtime C++ se hornea DENTRO
# del binario en vez de enlazarse dinámico. Sin esto el artefacto pedía libstdc++.so.6+libgcc_s.so.1
# de Alpine EN TIEMPO DE EJECUCIÓN, y como cmake es dep de build de otras recetas, arrastraba el
# runtime de gcc de Alpine hacia dentro de CADA build que lo declarara — harkaq lo cazó como la
# única deuda IRREDUCIBLE del primer barrido (brotli). Medido: NEEDED pasó de
# [libstdc++.so.6, libgcc_s.so.1, libc.so] a [libc.musl-x86_64.so.1] y brotli pasó a Hermetico ×3.
#
# CC=gcc/CXX=g++ (NO zig): el cmake mínimo que `bootstrap` compila con `zig c++` SEGFAULTEA al correr
# ("Problem while running initial CMake") — interacción libc++/musl de zig. Alpine mismo compila cmake
# con gcc; el toolchain trae gcc/g++ (añadidos para mrustc) y funcionan nativos dentro del sandbox
# (musl del devfs), así que se fuerzan por env en las fases. Es una herramienta del toolchain, no un
# input del 4/4 ⇒ el compilador da igual mientras el cmake resultante configure/genere bien.
name = "cmake"
version = "3.31.6"
license = "BSD-3-Clause"
[source]
tarball = "https://github.com/Kitware/CMake/releases/download/v3.31.6/cmake-3.31.6.tar.gz"
sha256 = "653427f0f5014750aafff22727fb2aa60c6c732ca91808cfb78ce22ddd9e55f0"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
[build.phases]
# bootstrap = configure de CMake. --parallel acelera el cmake mínimo. -- pasa flags al cmake final;
# CMAKE_USE_OPENSSL=OFF evita depender de openssl-dev (el bootstrap de rust no usa el https de cmake).
configure = "CC=gcc CXX='g++ -static-libstdc++ -static-libgcc' LDFLAGS='-static-libstdc++ -static-libgcc' ./bootstrap --prefix=/usr --parallel=\"$(nproc)\" -- -DCMAKE_BUILD_TYPE=Release -DCMAKE_USE_OPENSSL=OFF"
compile = "CC=gcc CXX='g++ -static-libstdc++ -static-libgcc' LDFLAGS='-static-libstdc++ -static-libgcc' make -j\"$(nproc)\""
install = "make install DESTDIR=/out"