diff --git a/docs/licencias-evidencia.tsv b/docs/licencias-evidencia.tsv index 22e39a06..d32520c7 100644 --- a/docs/licencias-evidencia.tsv +++ b/docs/licencias-evidencia.tsv @@ -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") diff --git a/docs/licencias-pendientes.tsv b/docs/licencias-pendientes.tsv new file mode 100644 index 00000000..5a868cce --- /dev/null +++ b/docs/licencias-pendientes.tsv @@ -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. +# +# paquetepor 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) diff --git a/scripts/licencias-fuente.py b/scripts/licencias-fuente.py index 74f2376c..0018c24d 100755 --- a/scripts/licencias-fuente.py +++ b/scripts/licencias-fuente.py @@ -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# paquetepor 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__":