Commit Graph
5 Commits
Author SHA1 Message Date
Sergio ba1fb2d3a8 licencias: 95% (1114/1164) — la evidencia sale del tarball pineado, offline
`licencias.sh --sembrar` escribe desde una tabla curada a mano y `licencias-desambiguar.sh` resuelve
`-only` vs `-or-later` preguntándole a la búsqueda de código de GitHub. Los dos dejan fuera lo mismo:
lo que nadie curó y lo que no vive en GitHub.

Pero `work/tarballs/` indexa cada tarball por su sha256, así que el árbol EXACTO que la receta pinea
ya está en disco: la declaración del propio autor, en el commit que construimos, sin red. De las 76
sin licencia, 55 tenían su tarball cacheado y 25 salieron con evidencia citable.

`scripts/licencias-tarball.py` la busca en tres niveles: la declaración del autor (`Cargo.toml`,
`meson.build`), un único fichero en `LICENSES/` (REUSE, que usa KDE), y el texto del COPYING más la
CONCESIÓN buscada en las cabeceras de los fuentes — excluyendo COPYING/LICENSE, porque el apéndice
de la GPL trae literalmente «or (at your option) any later version» y buscarla ahí da siempre
positivo siendo plantilla. Es la regla que ya fijó `licencias-desambiguar.sh`, aplicada al árbol
pineado en vez de a GitHub.

La primera versión resolvía 40, y CUATRO estaban mal. Las dejo escritas porque son la forma del
error, no accidentes:

  · `socat` salía BSD-2 por su `COPYING.OpenSSL`, que es la excepción, no la licencia. Un `COPYING`
    a secas gana ahora a cualquier sufijado.
  · `pigz` salía Apache-2.0 por `zopfli/COPYING`: la licencia de una pieza VENDORIZADA leída como la
    del contenedor. Sólo se mira la raíz.
  · `openssh` salía MIT porque su `LICENCE` es un compendio de cuatro y me quedaba con la primera
    que pegara. Si el texto trae varias, no hay veredicto: lo compone un humano.
  · `nano` salía GPL-3.0-**or-later** citando el «either version 2» de su `aclocal.m4` — plantilla de
    autotools, no del proyecto, y encima de otra versión. Ahora la cita tiene que venir de un fichero
    del autor Y hablar de la misma versión mayor que el COPYING.

Y dos bugs míos que producían el mismo daño en silencio: la marca de BSD-3 era «Neither the name of»,
que libpcap y libzip no usan («The names of the authors may not be used to endorse») ⇒ se declaraban
BSD-2; y el mayor de versión lo sacaba de `"GPL-3.0".rsplit("-",1)[0][-1]`, que da «L», así que la
comprobación de coherencia rechazaba TODA cita válida.

La validación final no es una regex: un identificador vale si tenemos su texto en `licenses/`. La
obligación legal es acompañar el binario del TEXTO, así que un SPDX que no podemos entregar no
adelanta nada y sí crea una afirmación que no se sostiene. Eso es lo que atrapa el «GPL2+» que meson
deja escribir en `gsd-schemas` y `libgdm`, que no es un SPDX sino taquigrafía.

Nada se sembró a ojo: cada línea de `docs/licencias-evidencia.tsv` lleva la cita que la decidió, y
las 50 que quedan salen listadas con lo que SÍ se encontró en vez de rellenarse.

Comprobado que no se invalida nada: los 26 ArtifactHash afectados son idénticos antes y después
(`license` no está en `hash_inputs`) — medido, no supuesto.
2026-09-05 15:34:35 +00:00
sergioandClaude Opus 4.8 4e9b6327ed recetas: libinput, fcft y foot sellan — mtdev con -fPIC y fuente git en la familia foot
Las tres estaban en deuda por TRES causas distintas, encadenadas de modo que cada una tapaba a la
siguiente:

1. libinput moría con "no suitable Python interpreter found", un mensaje de AUTOTOOLS siendo libinput
   meson puro: el que fallaba era su dep `libevdev` (arreglado en el commit anterior declarando
   make/python3).
2. Destapado eso, el muro real de libinput era
   "relocation R_X86_64_32S ... recompile with -fPIC" apuntando a `libmtdev.a`: libinput enlaza ese
   archivo estático DENTRO de libinput.so, y libtool sólo compila los objetos estáticos con -fPIC si
   se lo pedís. `mtdev` ahora configura con `--with-pic`.
3. fcft y foot fallaban con sha256 mismatch: el `/archive/<tag>.tar.gz` de codeberg lo genera la
   forge AL VUELO, así que sus bytes dependen de la versión de git/gzip del servidor. El pin se
   murió solo cuando codeberg actualizó su tooling — no es corrupción: hoy baja de forma estable,
   pero con OTRO hash (esperado c0d8d485…, real b0c0f4a5…). Re-pinear arreglaría hoy y volvería a
   romperse; pasan a fuente GIT por commit, que es inmune (ADR 0006).
   OJO: los dos tags son ANOTADOS ⇒ el sha que devuelve `git ls-remote <tag>` es el objeto tag, no
   el commit. Van los `^{}`.

Verificado: las seis (libinput, fcft, foot, mtdev, libevdev, utf8proc) SELLADAS, y el binario de
foot es ELF dinámico con NEEDED = sólo libc.so, sin fugas del rootfs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 18:15:07 -04:00
sergioandClaude Opus 4.8 87634f3196 matar-gcc: libevdev + mtdev migradas a zig-cc (generan la lib con zig)
Las 2 'sin confirmar' del balance: el smoke-test no las verificaba por ser libs
sin binario, pero generan la lib con zig (libevdev.so, libmtdev.a). Migradas.

mtdev queda COMPLETAMENTE de-Alpinizado: config.sub soberano (patch de esta
sesión) + zig compiler ⇒ cero dependencia de Alpine. Era la única deuda de
soberanía del barrido harkaq y ahora está cerrada por entero.

Total matar-gcc: 29 recetas C migradas. Quedan 18 compiler=gcc (4 matraca-C
dura + 11 Rust + 3 no medidas).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 15:33:50 -04:00
sergioandClaude Opus 4.8 a1ab8774c5 harkaq: mtdev — deuda de config.sub CERRADA con patch soberano (+ límite del modelo descubierto)
El único caso de deuda de soberanía del barrido: mtdev copiaba el config.sub/guess
del autoconf de ALPINE (/usr/share/autoconf/build-aux/) porque el suyo (1.1.6) no
conoce *-musl. harkaq lo cazó como lectura no declarada del rootfs.

CERRADO con recipes/mtdev-config-sub-musl.patch: 11 líneas, +`-musl*` a la
whitelist de OS del config.sub DEL PROPIO TARBALL. Ahora es input soberano
(hasheado con la receta), sin leer Alpine. Se quitó el `cp /usr/share/autoconf/...`
del configure. Verificado: mtdev construye (b3:47708e40) sin tocar /usr/share/autoconf.

Método (con un tropiezo honesto): casi afirmo que el `cp` era espurio porque el
config.sub en work/sources/mtdev daba exit 0 con musl — pero ese source estaba
MUTADO por un build previo (el cp lo había reemplazado por el de Alpine). El
tarball ORIGINAL fresco NO conoce musl (exit 1). Casi valido sobre un source
contaminado; me salvó chequear el exit code, no el output.

DESCUBIERTO AL CERRARLO: mtdev tenía DOS deudas de Alpine, no una. También usa
`compiler = "gcc"` (gcc de Alpine, no zig). Bajo la jaula la política deniega
/usr/bin/gcc (sonda esperada) y el configure da "C compiler cannot create
executables". Es parte de matar-gcc (kernel, cmake, mtdev), frente aparte.

LÍMITE DEL MODELO (nuevo, documentado en needs-review): harkaq clasifica gcc como
"sonda esperada" SIEMPRE, así que marca la fase Hermetico — pero para una receta
compiler=gcc, gcc es ESENCIAL y el build no compila sin él. harkaq no distingue
"gcc sondeado (ignorable)" de "gcc = el compilador". Caso límite real del
clasificador; no invalida el cierre de config.sub (producción no usa la jaula).

make declarado en mtdev (deuda declarable restante). config.sub fuera de
needs-review; queda anotado el gcc-compilador.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 08:04:03 -04:00
sergioandClaude Opus 4.8 7f11f2ed53 Etapa G: stack de entrada para mirada-compositor — libinput + libudev-zero + libevdev + mtdev
mirada-compositor (smithay, default features) enlaza en build input-sys/libudev-sys/drm-sys/
gbm-sys/libseat-sys. drm/gbm/libseat ya están (libdrm/mesa/seatd). Faltaban:

- libudev-zero 1.0.4: libudev SIN udevd (lee /sys y /dev directo) — encaja con la filosofía
  no-systemd de tawasuyu (arje es el init). Alternativa pesada: eudev.
- mtdev 1.1.6: multitouch. config.sub viejo no conoce *-musl ⇒ se reemplaza por el moderno del
  sandbox (autoconf build-aux) antes de configurar.
- libevdev 1.13.4: wrapper de ioctls evdev.
- libinput 1.27.1 (meson): -Dlibwacom=false (sin tablets Wacom), sin debug-gui/tests/docs.

Los cuatro sellados. xkbcommon NO hace falta como build-dep (smithay usa xkbcommon-dl = dlopen);
sí en runtime.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 06:26:34 -04:00