Último recurso mecánico, `scripts/licencias-texto.sh`: para las 60 recetas donde la API de
GitHub devuelve NOASSERTION (el repo TIENE un LICENSE pero licensee no lo reconoce: texto
retocado, encabezado propio, dos licencias en un fichero), baja el texto y lo clasifica acá.
34 identificadas — 16 MIT, 10 Apache-2.0, 7 BSD-2-Clause, 1 BSD-3-Clause.
SÓLO PERMISIVAS, Y NO ES PEREZA. MIT, Apache-2.0, BSD, ISC, MPL-2.0 y Unlicense se
reconocen por frases inconfundibles y NO tienen variantes -only/-or-later ⇒ reconocer el
texto da el SPDX completo.
La familia GPL se deja al humano A PROPÓSITO, y la razón es sutil: el COPYING de la GPL es
IDÉNTICO tanto si el proyecto es «sólo v3» como «v3 o posterior» — lo que las distingue vive
en las cabeceras de los fuentes. Y encima el propio COPYING incluye, en su apéndice «cómo
aplicar la licencia», la frase «or (at your option) any later version», así que buscarla da
SIEMPRE positivo y parecería evidencia siendo texto de plantilla. Es exactamente la trampa
de la regla del `.a` no-PIC, donde grep contaba reubicaciones de .debug_* y mentía.
Comprobado a mano un caso que daba mala espina: el LICENSE de `conftest` empieza
«Conftest — Write tests against your config files / Copyright (C) 2019 …», que es el formato
típico de una cabecera GPL. Leído entero, dice «Licensed under the Apache License, Version
2.0». La clasificación era correcta; la sospecha, barata.
Hashes verificados sobre las 36 tocadas: idénticos.
Quedan 88, ya sin vía mecánica: los repos donde ni la API ni el texto deciden, la familia
GPL sin desambiguar, y tarballs de sitios propios (gmplib, xiph, sr.ht, codeberg…).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sin una `configure` explícita hammer auto-detecta CMake (utf8proc trae CMakeLists.txt además del
Makefile) y genera `cmake -S . -B _build …`. Sellaba en el laptop —cuyo rootfs Alpine trae cmake— y
moría en el worker con `cmake: not found`, porque su rootfs NO lo trae: los dos rootfs no son
iguales (291 binarios vs 279). El build real es el Makefile; la salida no es declarar cmake sino no
pedirlo.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
`libinput` fallaba con "no suitable Python interpreter found" — un mensaje de AUTOTOOLS, y libinput
es meson puro: el que moría no era libinput sino su dep `libevdev`.
Causa raíz: el rootfs Alpine del worker NO trae python3; el del laptop SÍ. `libevdev` declaraba
sólo `pkgconf` pero su configure de autotools pide un intérprete Python y su compile es `make`, o
sea vivía de prestado del rootfs. Sellaba en el laptop y moría en el worker, arrastrando a libinput.
`utf8proc` es el mismo caso al desnudo: NO declaraba NADA y sus dos fases son `make`.
Es exactamente la deuda declarable del SDD 16 §harkaq: el store ya provee ambos ⇒ una línea en
`[deps]`. Se declara en vez de engordar el rootfs del worker porque así construyen en CUALQUIER
máquina, que es el punto; parchear el worker dejaría la receta igual de mentirosa.
Radio de re-sellado medido: 2 recetas (libevdev, utf8proc). El resto de la cadena afectada
(libinput, fcft, foot, mirada-*) ya estaba sin sellar.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Cierra el userland foundational: foot (terminal Wayland) + su cadena de libs → canónicas + repo
firmado. incoming-clib queda VACÍO (todo el base-system promovido). Front (d) COMPLETO a nivel build.