nixpkgs-multiverse: un único flake con todas las versiones históricas de Nixpkgs

Fuentes: nixpkgs-multiverse: every version that ever existed

El desarrollador fzakaria ha presentado nixpkgs-multiverse, un flake de Nix que expone en un solo punto todas las versiones de paquetes que han existido en Nixpkgs desde 2017. La idea surge de un problema habitual entre usuarios de NixOS: cuando un paquete se actualiza y rompe herramientas dependientes, fijar el commit exacto de Nixpkgs que contenía la versión deseada exige mantener varios inputs, que se descargan de forma eager aunque no se usen. La medición del autor muestra que cinco pins de Nixpkgs sin usar añaden unos 26 segundos de latencia en la evaluación, alrededor de 5 segundos por cada input descargado y materializado en balde.

nixpkgs-multiverse resuelve esto con dos archivos JSON —revisions.json y versions.json— que suman unos 5,18 MB y cubren 1.393 revisiones e indexan 289.521 pares (atributo, versión). El flake no declara inputs y recupera cada revisión de forma perezosa mediante builtins.fetchTree fijada por narHash, sólo cuando algún output la referencia. Para seleccionar las revisiones se apoya en el bucket S3 de nix-releases, que lista las commits realmente construidas y cacheadas por Hydra, incluyendo releases oficiales y bumps de nixos-unstable.

Gracias a la función at, es posible obtener una revisión concreta por release, por fecha o por hash de commit. Combinado con la extensibilidad de Nix, todo el proyecto cabe en unas 200 líneas de Nix y los JSON asociados. Los costes de evaluación crecen por revisión tocada y no por paquete, y parsear los datos cuesta unos 0,20 segundos. Se trata de una capa de conveniencia sobre la propia arquitectura de Nix, sin replicar binarios ni alojar infraestructura adicional.