BookinglyTech News
Software

omnibin mete los 881.933 binarios de nixpkgs en tu PATH sin instalar nada

Un sistema de archivos FUSE resuelve cualquier binario publicado por nixpkgs entre 2013 y 2026 y lo sirve bajo demanda desde cache.nixos.org.

2 min de lecturaLobsters0 vistas

omnibin es un sistema de archivos FUSE que coloca en tu $PATH cada binario que nixpkgs ha publicado en su historia. No instala nada, no compila nada y no ocupa un byte en disco hasta que un proceso lee un archivo. Está en GitHub y su autor también lo empaqueta como imagen de Docker.

La pieza que lo hace posible ya estaba ahí. Hydra deja un archivo .ls junto a cada narinfo de cache.nixos.org: es un JSON que describe el contenido del paquete. Ese metadato es el índice que necesita un sistema FUSE para bajar el NAR y desempacararlo bajo demanda. Del otro lado está nixpkgs-multiverse, que resuelve cualquier par (atributo, versión) al store path que Hydra construyó. Juntos responden a la pregunta "dónde está python3@3.6.2" sin instalarlo. El autor recorrió todos los .ls en menos de doce minutos.

Los números: ls /omnibin/bin lista 51.468 binarios de primer nivel, uno por ejecutable, el de la versión más nueva. En el árbol hay 881.933; las versiones antiguas siguen resolviendo por nombre versionado, solo que no aparecen en el listado. python3 apunta a 3.14.6 y python3@3.6.2 trae el CPython de 2017. Hay paquetes de 2013 a 2026.

El precio de tenerlo todo

El primer acceso se paga: 2,7 segundos para bajar el NAR y desempacarlo. El segundo es inmediato, 0,035 segundos, porque el store path ya está presente. En una máquina con el store caliente esa penalización se diluye.

Para consultar qué hay sin recorrer el árbol está /omnibin/index.db, un SQLite con atributo y versión, y el CLI omnibin which. omnibin which --all python3 devuelve 610 versiones. El README del montaje existe justo para decirle a lo que esté explorando el sistema de archivos que deje de hacer stat sobre 881.933 entradas y pregunte a la base de datos.

Fuera de Nix también funciona. La imagen de Docker arranca con --device /dev/fuse y --cap-add SYS_ADMIN, y permite ejecutar gcc@10.2.0 o python3@3.6.2 dentro de un contenedor. Para NixOS hay módulo: services.omnibin.enable = true, y se acaba el curar environment.systemPackages a mano.

Lo interesante no es el truco, es la pregunta que deja: si todo el catálogo está disponible al instante, qué queda de la gestión de paquetes tal y como la entendemos. Para un agente que necesita ejecutar herramientas sin ensuciar la máquina, un árbol así es un entorno listo desde el primer arranque. El coste real es ese primer acceso de 2,7 segundos.