harkaq: primer barrido en la granja — la deuda irreducible de la muestra es perl (§4.10)
harkaq-farm-setup.sh: provisiona un worker para barrer (idempotente; gatea por
ABI>=7 y aborta si no llega — con la golden vieja el barrido daría SinEvidencia
en TODO). Deriva el runtime base DEL ROOTFS DEL WORKER, no copia el del laptop:
es por-rootfs (§4.3) y los sonames dependen de la versión de Alpine.
Barrido: 24 recetas, 14 con veredicto. Primer número crudo: 4 irreducibles (29%).
ERA FALSO, y por dos motivos propios:
1. GAP DE POLÍTICA. Los `list` salían sólo de los ancestros de la clausura ⇒ una
receta SIN deps (bash) no generaba ni uno y todo escaneo del árbol caía como
denegación (/usr/lib). Listar NO es leer: Landlock separa READ_DIR de
READ_FILE ⇒ la estructura del árbol es CONTRATO. Se puede `ls /usr/lib` sin
leer un solo fichero no declarado; la deuda es leer lo ajeno, no saber que
existe. Idem /var/tmp: con --tmp-overlay / es scratch descartable, como /tmp.
2. La heurística del catálogo es por NOMBRE y un fichero no se llama como su
paquete: /usr/bin/ranlib lo trae `binutils`, /usr/bin/diff lo trae
`diffutils`. El único que sabe la verdad es el STORE (conoce la lista de
ficheros de cada artefacto) — y el worker tiene 103 artefactos contra los
cientos del hub.
⇒ EL WORKER MIDE, EL HUB CLASIFICA. Misma separación que lector/clasificador: el
que tiene el privilegio —o los datos— hace lo mínimo. Reclasificado en el hub:
bash ranlib,/usr/lib,/var/tmp → nada (gap de política)
doas /usr/bin/diff → nada (diffutils lo provee)
ca-certificates /usr/bin/perl → /usr/bin/perl
curl /usr/bin/perl → /usr/bin/perl
RESULTADO: la deuda irreducible de toda la muestra es UN path — /usr/bin/perl
(2 de 14 = 14%). No hay recipes/perl.toml ni artefacto: deuda genuina y nombrada.
Todo lo demás era declarable (make ×10, ranlib→binutils, diff→diffutils).
Sigue por encima del <5% del §7, pero el perfil es el que importa: NO hay cola
larga de sorpresas. La deuda de un catálogo entero se resume en "declarar make" y
"no tenemos perl".
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -808,6 +808,39 @@ el silencio de un lector roto.
|
||||
|
||||
---
|
||||
|
||||
### 4.10 Barrido en la granja: la deuda irreducible de la muestra es **perl**
|
||||
|
||||
Primer barrido sobre la granja con ABI 7 (`harkaq-farm-setup.sh` + `fase2-barrido.sh`, 24 recetas,
|
||||
14 con veredicto — las 10 restantes son Go/Rust y cayeron en caché o fetch). El primer número
|
||||
crudo fue **4 irreducibles (29%)**. Era falso, y por dos motivos propios:
|
||||
|
||||
1. **Gap de política.** Los `list` salían sólo de los ancestros de la clausura ⇒ una receta **sin
|
||||
deps** (bash) no generaba ni uno, y todo escaneo del árbol caía como denegación (`/usr/lib`).
|
||||
Listar no es leer: Landlock separa `READ_DIR` de `READ_FILE`, así que **la estructura del árbol
|
||||
es contrato** — se puede `ls /usr/lib` sin leer un solo fichero no declarado. La deuda es leer
|
||||
lo ajeno, no saber que existe. (Idem `/var/tmp`: con `--tmp-overlay /` es scratch descartable,
|
||||
como `/tmp`.)
|
||||
2. **La heurística del catálogo es por NOMBRE**, y un fichero no se llama como su paquete:
|
||||
`/usr/bin/ranlib` lo trae `binutils`, `/usr/bin/diff` lo trae `diffutils`. El único que sabe la
|
||||
verdad es el **store**, porque conoce la lista de ficheros de cada artefacto — y el worker sólo
|
||||
tiene 103 artefactos contra los cientos del hub.
|
||||
|
||||
⇒ **El worker MIDE, el hub CLASIFICA.** Es la misma separación que lector/clasificador (§4.2): el
|
||||
que tiene el privilegio —o los datos— hace lo mínimo. Reclasificado en el hub:
|
||||
|
||||
| receta | crudo en el worker | real |
|
||||
|---|---|---|
|
||||
| bash | `ranlib`, `/usr/lib`, `/var/tmp` | — (gap de política) |
|
||||
| doas | `/usr/bin/diff` | — (`diffutils` lo provee) |
|
||||
| ca-certificates, curl | `/usr/bin/perl` | **`/usr/bin/perl`** |
|
||||
|
||||
**Resultado: la deuda irreducible de toda la muestra es UN path — `/usr/bin/perl`** (2 de 14 =
|
||||
14%). No hay `recipes/perl.toml` ni artefacto en el store: es deuda genuina y nombrada. Todo lo
|
||||
demás era declarable — `make` ×10, `ranlib`→binutils, `diff`→diffutils.
|
||||
|
||||
Sigue por encima del <5% del §7, pero el perfil es el que importa: **no hay cola larga de
|
||||
sorpresas**. La deuda de un catálogo entero se resume en "declarar `make`" y "no tenemos perl".
|
||||
|
||||
### 4.9 Matar gcc: la última milla, cerrada
|
||||
|
||||
El primer barrido (§4.6) dejó **un solo** caso irreducible: brotli pidiendo
|
||||
|
||||
Reference in New Issue
Block a user