El gestor de paquetes Nix puede compilar derivaciones de Guix, pese a que ambos se presentan como ecosistemas rivales. El blog técnico de Farid Zakaria lo demuestra con un experimento reproducible y, además, presenta la herramienta de código abierto guix-transfer, que automatiza la traducción de recetas de Guix a Nix.
Nix y Guix son dos sistemas de gestión de paquetes declarativos basados en compilaciones herméticas, en las que cada receta declara explícitamente fuentes, dependencias y variables de entorno. Guix, distribuido como software libre de GNU y escrito mayoritariamente en Scheme, forkó su daemon a partir del de Nix al inicio del proyecto, por lo que ambos comparten el mismo formato interno de derivación: ATerm. Guix, además, presume de un arranque íntegro desde una semilla binaria de 357 bytes.
En su entrada, el autor parte de una derivación trivial de Guix (Hello World) y la reconstruye con el binario nix-store apuntando a /gnu/store como directorio de almacenamiento, tras registrar la derivación en la base de datos SQLite de Nix. El procedimiento exige remontar /gnu/store en modo lectura-escritura dentro de un espacio de nombres de montaje privado con unshare --mount. Una vez ejecutado, el binario generado produce el esperado "Hello World".
Sobre esa base, Zakaria, con ayuda del asistente Claude, ha desarrollado guix-transfer, una herramienta CLI que realiza una traducción bottom-up de derivaciones de Guix a derivaciones de Nix. El programa carga el grafo completo de dependencias (228 derivaciones en el ejemplo del paquete hello), reescribe las rutas de /gnu/store a /nix/store y adapta builtins como "builtin:download" a sus equivalentes en Nix. La salida es un archivo .drv listo para procesar con nix-store.
En la práctica, esto permite aprovechar el catálogo de paquetes de Guix, incluidas sus semillas de arranque, desde un entorno Nix tradicional. El autor documenta un caso real: la reconstrucción completa de hello-2.12.2 con todas sus dependencias, una compilación de varias horas al construirse todo desde código fuente.
La pieza también señala fricciones técnicas, como los filtros seccomp de Nix que bloquean ciertas llamadas a chmod durante la descompresión de tarballs, solventadas con el flag --option filter-syscalls false. La conclusión es nítida: la "abominación" entre Guix y Nix es posible porque, bajo el capó, ambos comparten la misma máquina de entradas y salidas.
