> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
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.
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.
+#
+# 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)
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# 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__":