Files
sergioandClaude Opus 5 a6a9d59e4f licencias: 936 de 1141 (82%) — detección por evidencia, con sus dos imprecisiones declaradas
Esta mañana eran 0. Tras la tabla curada (228) y este paso, 936. Ninguna receta se
re-hasheó: verificado en 30 de las 708 tocadas, 30 hashes idénticos, 0 cambiados.

DE DÓNDE SALE EL DATO, Y POR QUÉ NO ES ADIVINAR. `scripts/licencias-detectar.sh` consulta
la API /repos/{o}/{r}/license de GitHub para las 673 recetas cuya fuente vive allí. Eso
devuelve el resultado de DETECTAR el fichero LICENSE que el repo tiene de verdad
(licensee), no una etiqueta escrita a mano en una web: es la misma evidencia que veríamos
abriendo el tarball, obtenida sin bajar 673 tarballs por un enlace de 8 Mbps. 610 con SPDX
definido; las 63 que GitHub marca NOASSERTION/other se DESCARTAN — un «no sé» de la fuente
se propaga como hueco, no se redondea a una licencia plausible.

Las familias no-GitHub van curadas por la URL DE FUENTE, que es la evidencia que el nombre
no da. Y ahí cometí el error simétrico al que este mismo fichero advertía: había puesto
`knighttime` entre las «herramientas Go» POR SU NOMBRE, y su tarball sale de
download.kde.org — es un Framework de KDE, LGPL. Descartar por nombre falla igual que
aceptar por nombre. Corregido en la cabecera.

LAS DOS IMPRECISIONES, contables con `licencias.sh --revisar` en vez de escondidas:

 1. SPDX OBSOLETOS Y AMBIGUOS (71 recetas). GitHub devuelve `GPL-3.0`, `LGPL-2.1`,
    `AGPL-3.0`… identificadores que SPDX declaró obsoletos PRECISAMENTE porque no
    distinguen `-only` de `-or-later`, y esa diferencia decide con qué se puede combinar el
    paquete. NO se normalizan a ciegas: mapear GPL-3.0 → GPL-3.0-or-later sería inventar el
    dato que falta. Quedan marcadas para resolver mirando el fuente.

 2. LICENCIAS DOBLES COLAPSADAS. La API devuelve UNA sola licencia y muchos proyectos Rust
    son «MIT OR Apache-2.0» (p.ej. `fd` quedó como Apache-2.0). No es falso —cumplir una de
    las opciones concedidas basta— pero es incompleto. Lo resuelve el cierre estructural:
    leer el campo `license` del Cargo.toml en la fase de fetch.

Y un fallo que habría escrito basura en silencio: `licencias-detectadas.tsv` tiene TRES
columnas (añade el owner/repo consultado, para poder auditar) y el sembrador leía dos, así
que la licencia se habría llevado pegado el slug — `license = "MIT<TAB>owner/repo"`, sin
que nada lo validara. Arreglado antes de sembrar.

Quedan 205 sin licencia y 71 por desambiguar.

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

83 lines
5.0 KiB
TOML

# cosmic-store — la tienda de aplicaciones. Quinta aplicación con ventana, y **la primera de la
# suite que choca de frente con que hammer es OTRA distro**: una tienda es una CARA de un gestor de
# paquetes, y el de abajo no es el suyo.
#
# ── LOS CUATRO BACKENDS, Y POR QUÉ SÓLO UNO SIRVE ACÁ ───────────────────────────────────────────
# `src/backend/` tiene cuatro, todos detrás de features (`mod.rs` los registra con `#[cfg(feature)]`):
#
# · `flatpak` — el de upstream. Pide `libflatpak` (GObject), o sea la cadena glib COMPARTIDA
# más ostree/libsoup/gpgme: la torre de C que esta campaña justamente no tiene.
# Se apaga, y con ella se van `gettext-sys` y los tres `*-sys` de glib del lock.
# · `packagekit` — es Rust puro (`packagekit-zbus`), pero necesita el DEMONIO PackageKit sirviendo
# `org.freedesktop.PackageKit` en el bus, que la imagen no tiene. Queda anotado
# como el camino natural el día que se quiera enchufar `.swm` de verdad: es el
# mismo patrón que `arje-logind-compat` —un shim de D-Bus— y no cuesta un solo
# `.so` de C.
# · `rpm-ostree` — irrelevante.
# · `pkgar` — **el único que arranca acá**, y no por casualidad: no habla con ningún demonio
# ni enlaza nada. `Pkgar::new()` construye un `AppstreamCache::system(…)` y lee
# el AppStream del sistema, o sea los `.metainfo.xml` que las propias recetas
# instalan en `/usr/share/metainfo`.
#
# ⚠ **ALCANCE HONESTO: esto NAVEGA, no INSTALA.** Con `pkgar` la tienda lista y describe lo que la
# imagen ya tiene —las entradas salen de los `.metainfo.xml` de cosmic-term/files/settings/edit— pero
# ninguna de sus operaciones está cableada al `.swm` de hammer (Etapa F). Es una vitrina del catálogo
# instalado, no un instalador. Enchufarlo de verdad es un frente propio, y el atajo es `packagekit`.
#
# ── `wgpu` APAGADA, como en todos los clientes ──────────────────────────────────────────────────
# Viene en `default`. Fuera: el árbol wgpu+naga+ash+glow+spirv a `codegen-units=1` desbordó el
# filesystem dos veces, y la imagen pinta con llvmpipe por software igual.
name = "cosmic-store"
version = "1.5.0"
license = "GPL-3.0"
[source]
tarball = "https://github.com/pop-os/cosmic-store/archive/epoch-1.5.0/cosmic-store-epoch-1.5.0.tar.gz"
sha256 = "5a1ed7f9e241b498592437f1d4bc125d39a6c743de15629148a2d27f4402610c"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
# Dinámico como todo cliente de la suite: `wayland-client` entra con la feature `dlopen` y un musl
# estático no la honra.
link = "dynamic"
[build.phases]
# `-p cosmic-store` y no `--workspace`: el otro miembro es `flathub-stats`, una herramienta de
# upstream para regenerar estadísticas de Flathub que no tiene sentido en esta imagen.
#
# La lista es la `default` MENOS `flatpak` y `wgpu`, MÁS `pkgar`. `xdg-portal` se deja aunque
# `flatpak` la encendía: es `libcosmic/xdg-portal`, zbus puro, y es lo que da el diálogo de ficheros.
compile = '''
printf '%s\n' '#!/bin/sh' 'for a do' 'case "$a" in --target=*) a=--target=x86_64-linux-musl ;; esac' 'set -- "$@" "$a"' 'shift' 'done' 'exec zig cc -mcpu=baseline "$@"' > "$PWD/.hammer-zig-cc"
chmod +x "$PWD/.hammer-zig-cc"
RF="-C linker=$PWD/.hammer-zig-cc -C target-feature=-crt-static"
rustc -vV | grep -q 'host: .*-alpine-' || RF="$RF -C link-self-contained=no"
export INSTALL_DIR=/usr/share APPID=com.system76.CosmicStore
CC="$PWD/.hammer-zig-cc" RUSTFLAGS="$RF" cargo build --release --locked --offline \
-p cosmic-store --no-default-features \
--features dbus-config,desktop-systemd-scope,logind,notify,pkgar,single-instance,wayland,xdg-portal
'''
install = '''
mkdir -p /out/usr/bin /out/usr/share/applications /out/usr/share/metainfo
cp target/release/cosmic-store /out/usr/bin/cosmic-store
chmod 755 /out/usr/bin/cosmic-store
cp target/xdgen/com.system76.CosmicStore.desktop /out/usr/share/applications/ 2>/dev/null || true
cp target/xdgen/com.system76.CosmicStore.metainfo.xml /out/usr/share/metainfo/ 2>/dev/null || true
for size in res/icons/hicolor/*; do
[ -d "$size" ] || continue
s=$(basename "$size")
if [ -f "$size/apps/com.system76.CosmicStore.svg" ]; then
mkdir -p "/out/usr/share/icons/hicolor/$s/apps"
cp "$size/apps/com.system76.CosmicStore.svg" "/out/usr/share/icons/hicolor/$s/apps/"
fi
done
'''
[deps]
# El juego fijo de todo cliente. `reqwest` entra con rustls; si el proveedor de cripto resuelve a
# `aws-lc-rs` habrá que sumar `cmake` y `perl` —`aws-lc-sys` es BoringSSL, C y ensamblador— pero eso
# es justamente lo que el lock NO permite decidir a priori: lista `aws-lc-sys` como POSIBLE. Se
# arranca sin declararlos y que el build diga.
build = ["libxkbcommon", "pkgconf", "libudev-zero", "libinput"]