licencias: la cola de pendientes también se escribe — «lo que falta y por qué» es dato

Las 33 que quedan sólo existían en la salida del script, o sea que se perdían al cerrar la terminal.
Para quien tiene que decidirlas —y son decisiones legales, no mecánicas— «qué falta y POR QUÉ no se
puede afirmar» es tan dato como los veredictos. `docs/licencias-pendientes.tsv` las deja listadas con
su motivo: cuáles traen varios ficheros de licencia que dicen cosas distintas (gmp, ffmpeg, clang18,
llvm18, los `gi-*`), cuáles tienen un LICENSE que no reconozco y con qué frase empieza (fuse3, lsof),
y cuáles no traen nada en el árbol (boost, pigz, sqlite-shared).

Al revés que `licencias-evidencia.tsv`, ésta se REGENERA entera en cada corrida. No es un registro de
lo que se probó sino una foto de lo que queda, y una pendiente resuelta tiene que DESAPARECER de acá
—si se acumulara, la lista de trabajo mentiría hacia arriba para siempre.
This commit is contained in:
Sergio
2026-09-05 20:18:21 +00:00
parent d7d9cf8fd2
commit 058162c6d3
3 changed files with 50 additions and 3 deletions
+2 -2
View File
@@ -32,6 +32,7 @@ mtdev MIT COPYING (texto de MIT)
nano GPL-3.0-or-later COPYING + concesión en NEWS: …Finally, nano is now licensed under the GNU GPL version 3 or later, and its documentat…
nghttp2 MIT COPYING (texto de MIT)
pcre2-shared BSD-3-Clause LICENCE.md (texto de BSD-3-Clause)
perl-xml-parser Artistic-2.0 LICENSE es el texto íntegro de "The Artistic License 2.0" (8937 bytes, Copyright 1998-2000 Larry Wall y Clark Cooper)
portal-probe MIT el repo es el propio hammer: LICENSE (MIT License) + Cargo.toml: license = "MIT"
scdoc MIT COPYING (texto de MIT)
seatd MIT meson.build: license: 'MIT'
@@ -40,6 +41,5 @@ sourceview-hello LGPL-2.1-or-later meson.build: license: 'LGPL-2.1-or-later'
speexdsp BSD-3-Clause COPYING (texto de BSD-3-Clause)
tea MIT LICENSE (texto de MIT)
tllist MIT meson.build: license: 'MIT'
wpa_supplicant BSD-3-Clause COPYING dice "the project has chosen to use only the BSD license option for future distribution" y remite al README, que trae las 3 cláusulas clásicas (incl. "Neither the name(s) ... endorse or promote")
when Artistic-1.0-Perl OR GPL-1.0-or-later LICENSE: "This free software is copyleft licensed under the same terms as Perl, or, at your option, under version 2 of the GPL license" — «los mismos términos que Perl» es esa disyunción, y la opción GPL-2 ya queda cubierta por GPL-1.0-or-later
perl-xml-parser Artistic-2.0 LICENSE es el texto íntegro de "The Artistic License 2.0" (8937 bytes, Copyright 1998-2000 Larry Wall y Clark Cooper)
wpa_supplicant BSD-3-Clause COPYING dice "the project has chosen to use only the BSD license option for future distribution" y remite al README, que trae las 3 cláusulas clásicas (incl. "Neither the name(s) ... endorse or promote")
Can't render this file because it contains an unexpected character in line 19 and column 88.
+32
View File
@@ -0,0 +1,32 @@
# licencias-pendientes.tsv — lo que NO alcanza para afirmar una licencia, y por qué.
# Lo regenera entero scripts/licencias-fuente.py en cada corrida: es la foto de lo
# que queda, no un registro. Los veredictos van en licencias-evidencia.tsv.
#
# paquete<TAB>por qué no se puede afirmar
boost sin COPYING ni declaración en el árbol
cargo-audit sin COPYING ni declaración en el árbol
clang18 la raíz dice 3 licencias distintas (Apache-2.0 en LICENSE.TXT, BSD-3-Clause en LICENSE.TXT, MIT en LICENSE.TXT): la expresión la compone un humano
ffmpeg la raíz dice 4 licencias distintas (GPL-2.0 en COPYING.GPLv2, GPL-3.0 en COPYING.GPLv3, LGPL-2.1 en COPYING.LGPLv2.1, LGPL-3.0 en COPYING.LGPLv3): la expresión…
fuse3 LICENSE existe pero no reconozco su texto — empieza: "The following files may be used under the terms of the GNU Lesser"
gi-foreign-girs la raíz dice 2 licencias distintas (GPL-2.0 en COPYING.GPL, LGPL-2.0 en COPYING.LGPL): la expresión la compone un humano
gi-foreign-typelibs la raíz dice 2 licencias distintas (GPL-2.0 en COPYING.GPL, LGPL-2.0 en COPYING.LGPL): la expresión la compone un humano
gi-girepository-typelib la raíz dice 2 licencias distintas (GPL-2.0 en COPYING.GPL, LGPL-2.0 en COPYING.LGPL): la expresión la compone un humano
gsd-schemas la raíz dice 2 licencias distintas (GPL-2.0 en COPYING, LGPL-2.1 en COPYING.LIB): la expresión la compone un humano
hwdata GPL-2.0 ambigua · sin concesión fuera del COPYING
libgdm el autor declara «GPL2+», que no es un SPDX del que tengamos texto en licenses/ (meson.build: license: 'GPL2+')
libical la raíz dice 2 licencias distintas (LGPL-2.1 en LICENSE.LGPL21.txt, MPL-2.0 en LICENSE.MPL2.txt): la expresión la compone un humano
llvm18 la raíz dice 3 licencias distintas (Apache-2.0 en LICENSE.TXT, BSD-3-Clause en LICENSE.TXT, MIT en LICENSE.TXT): la expresión la compone un humano
lsof COPYING existe pero no reconozco su texto — empieza: "Copyright 2002 Purdue Research Foundation, West Lafayette,"
openssh la raíz dice 2 licencias distintas (BSD-3-Clause en LICENCE, MIT en LICENCE): la expresión la compone un humano
pigz sin COPYING ni declaración en el árbol
sqlite-shared sin COPYING ni declaración en el árbol
vulkan-headers REUSE con varias licencias: Apache-2.0,MIT
xz-shared la raíz dice 4 licencias distintas (0BSD en COPYING.0BSD, GPL-2.0 en COPYING.GPLv2, GPL-3.0 en COPYING.GPLv3, LGPL-2.1 en COPYING.LGPLv2.1): la expresión la co…
amp fuente git (probá --fetch)
cargo-binstall fuente git (probá --fetch)
duplicacy fuente git (probá --fetch)
gmp tarball no cacheado (probá --fetch)
leptonica tarball no cacheado (probá --fetch)
libcanberra tarball no cacheado (probá --fetch)
tzdata fuente git (probá --fetch)
waybackurls fuente git (probá --fetch)
Can't render this file because it contains an unexpected character in line 10 and column 62.
+16 -1
View File
@@ -57,6 +57,7 @@ import tomllib
RAIZ = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
CACHE = os.path.join(RAIZ, "work", "tarballs")
SALIDA = os.path.join(RAIZ, "docs", "licencias-evidencia.tsv")
COLA = os.path.join(RAIZ, "docs", "licencias-pendientes.tsv")
# Cada licencia se reconoce por una frase que no aparece en las demás. El texto se NORMALIZA
# (espacios colapsados) antes de buscar, porque el mismo texto viene con saltos de línea distintos
@@ -545,7 +546,21 @@ def main():
print(f"\n==> sin tarball que mirar: {len(sin_tar)}")
for n, c in sin_tar:
print(f" {n:28s} {c}")
print(f"\n==> escrito {os.path.relpath(SALIDA, RAIZ)} · NADA se tocó en recipes/")
# La cola de lo que NO se pudo afirmar también se escribe. Vivía sólo en la salida del script,
# o sea que se perdía al cerrar la terminal: para el humano que tiene que decidir, «lo que falta
# y por qué» es tan dato como los veredictos. Ésta SÍ se regenera entera en cada corrida —al
# revés que la de evidencia, que acumula— porque es una foto de lo que queda, no un registro de
# lo que se probó: una pendiente resuelta tiene que DESAPARECER de acá.
with open(COLA, "w") as fh:
fh.write("# licencias-pendientes.tsv — lo que NO alcanza para afirmar una licencia, y por qué.\n")
fh.write("# Lo regenera entero scripts/licencias-fuente.py en cada corrida: es la foto de lo\n")
fh.write("# que queda, no un registro. Los veredictos van en licencias-evidencia.tsv.\n")
fh.write("#\n# paquete<TAB>por qué no se puede afirmar\n")
for n, c in sorted(set(pendientes)) + sorted(set(sin_tar)):
fh.write(f"{n}\t{una_linea(c)}\n")
print(f"\n==> escrito {os.path.relpath(SALIDA, RAIZ)} y {os.path.relpath(COLA, RAIZ)}"
f" · NADA se tocó en recipes/")
if __name__ == "__main__":