Files
hammer/recipes/incoming-gnome/libusb.toml
T
sergioandClaude Opus 5 2c2ee951d6 licencias: resolver -only vs -or-later CON LA CITA — y tres «pruebas» que no probaban nada
Los identificadores obsoletos (`GPL-2.0`, `LGPL-2.1`, `AGPL-3.0`) no dicen si el proyecto
concede «sólo esta versión» o «ésta o cualquier posterior», y eso decide con qué se puede
combinar el paquete y bajo qué términos puede redistribuirlo quien lo reciba.

NO SE PUEDE MIRAR EL COPYING, que es la trampa evidente: el texto de la GPL es IDÉNTICO en
los dos casos —es la licencia, no la concesión— y encima su apéndice «cómo aplicar la
licencia» contiene literalmente «or (at your option) any later version», así que buscarla
ahí da SIEMPRE positivo y parece evidencia siendo plantilla. Misma trampa que la regla del
`.a` no-PIC, donde grep contaba reubicaciones de `.debug_*`. La concesión vive en las
cabeceras de los fuentes y en el README; ahí se busca, excluyendo los ficheros de licencia.

SE GUARDA LA CITA, no sólo el veredicto: fichero + frase exacta que decidió. Una licencia es
una afirmación legal y quien la revise tiene que poder ver POR QUÉ dice lo que dice sin
repetir el trabajo.

Y eso pagó de inmediato: de las 12 primeras resoluciones, TRES eran evidencia inválida y
sólo se vieron porque estaba la cita. Cada una de una clase distinta:
 · caligula   — la frase salía de `checks/headless/expected.iso`, un FIXTURE DE TEST;
 · libnl      — de `include/linux-private/linux/seg6.h`, una cabecera del KERNEL vendorizada.
                La licencia del kernel no es la de libnl;
 · lm-sensors — declarado GPL-2.0 y la cita decía «version 2.1 of the License», que es la
                LGPL. La frase era real pero no sostenía lo que se le atribuía.

Las tres clases quedan filtradas en el script: ficheros de licencia, rutas de test/fixture, y
código vendorizado; más una comprobación nueva de que **la cita hable de la misma versión que
la licencia declarada**.

Sembradas las 9 auditadas (13 ficheros; algunas viven en varias colas). Ambiguas: 55 → 41.
Las 40 sin evidencia quedan listadas y siguen contadas — la mayoría son Go y la familia
cosmic, donde la frase no aparece fuera del COPYING.

Hashes verificados: 0 movidos.

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

36 lines
1.8 KiB
TOML

# libusb 1.0.30 — acceso a dispositivos USB desde espacio de usuario. Entra al corpus por una cadena
# larga y poco obvia: mutter → colord → libgusb → libusb. Autotools, estático.
#
# --with-pic, y NO es cosmético: colord construye libcolord.so/libcolorhug.so aunque se le pase
# -Ddefault_library=static (su meson pide shared_library explícito), y meter un .a sin PIC dentro de
# un .so lo rechaza el linker — «relocation R_X86_64_TPOFF32 ... cannot be used with -shared» y
# «recompile with -fPIC». Mismo remedio y misma razón que en recipes/libffi.toml, que lo aprendió
# con Mesa/libwayland-server. PIC es superset: el .a sigue sirviendo para enlazar ejecutables.
# (libgusb no lo necesita: meson compila los estáticos con b_staticpic=true por defecto.)
#
# --disable-udev: libusb puede enumerar y hacer hotplug por dos caminos, netlink+libudev o sysfs a
# secas. El corpus tiene libudev-zero, pero su hotplug es justamente lo que ese proyecto NO
# implementa completo; el camino sysfs no depende de nadie y alcanza de sobra para lo que llega hasta
# acá (colord listando sensores de calibración que este perfil ni siquiera enciende). Menos aristas
# en el cierre, y sin el riesgo del choque eudev/libudev-zero por el mismo .pc.
name = "libusb"
version = "1.0.30"
license = "LGPL-2.1-or-later"
[source]
tarball = "https://github.com/libusb/libusb/releases/download/v1.0.30/libusb-1.0.30.tar.bz2"
sha256 = "fea36f34f9156400209595e300840767ab1a385ede1dc7ee893015aea9c6dbaf"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "static"
[build.phases]
configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-shared --enable-static --with-pic --disable-udev'
compile = 'make'
install = 'make DESTDIR=/out install'
[deps]
build = ["make"]