Nix es un administrador de paquetes multiplataforma para sistemas tipo Unix , y una herramienta para instanciar y administrar sistemas operativos tipo Unix , inventado en 2003 [4] por Eelco Dolstra.
El administrador de paquetes Nix emplea un modelo en el que los paquetes de software se instalan en directorios únicos con contenidos inmutables. Estos nombres de directorio corresponden a hashes criptográficos que tienen en cuenta todas las dependencias de un paquete, incluidos otros paquetes administrados por Nix. Como resultado, los nombres de los paquetes Nix identifican el contenido, ya que los paquetes con el mismo nombre habrán tenido las mismas entradas y la misma plataforma de compilación y, por lo tanto, el mismo resultado de compilación. [5]
Las recetas de paquetes para Nix están escritas en el "lenguaje Nix" especialmente diseñado, un lenguaje de programación declarativo, puramente funcional , de evaluación diferida y tipado dinámico . [6] Las características distintivas del lenguaje Nix son las cadenas con "contexto", la interpolación de cadenas, las rutas del sistema de archivos de primera clase y las "cadenas sangradas", que en combinación permiten expresar de forma concisa las dependencias entre los datos del sistema de archivos al especificar el contenido de nuevos archivos.
Las dependencias entre archivos, tal como se declaran en el lenguaje Nix, se rastrean automáticamente y se conservan en el "almacén Nix". [7] Los archivos nuevos en el almacén Nix se crean a través de "derivaciones". Una derivación es una estructura de datos persistente que especifica un ejecutable, argumentos y variables de entorno para su invocación (ver execve
), y otros archivos que se leerán desde el almacén Nix. Luego, el ejecutable se ejecuta en un entorno limitado que prohíbe el acceso a todo lo que no sean los archivos de entrada especificados explícitamente y solo permite escribir en la ruta de salida designada. Nix conserva la información de dependencia en los archivos de salida escaneando los hashes distintivos utilizados para los nombres de directorio de paquetes. [5]
El seguimiento automático de referencias garantiza la integridad de los paquetes, incluso cuando se transfieren entre máquinas. También permite la recolección de basura de paquetes no utilizados cuando ningún otro paquete depende de ellos. A costa de mayores requisitos de almacenamiento, se garantiza que todas las actualizaciones en Nix sean atómicas y capaces de una reversión eficiente . Los nombres de directorio únicos permiten instalar muchos paquetes con diferentes versiones de bibliotecas compartidas y se afirma que eliminan el llamado infierno de dependencias . [8] Esto también permite que varios usuarios instalen software de forma segura en el mismo sistema sin privilegios de administrador . Como resultado, el modelo de administración y despliegue de paquetes de Nix anuncia paquetes más confiables, reproducibles y portátiles. [5] [9]
Nix tiene soporte completo para Linux , macOS y WSL , y se puede instalar de forma segura junto con otro administrador de paquetes.
Nixpkgs es el repositorio de paquetes construido sobre el administrador de paquetes Nix. Según Repology , a julio de 2024 contiene más de 110.000 paquetes [10] y tiene una mayor cantidad de paquetes actualizados que cualquier otro repositorio de paquetes. [11] Las arquitecturas compatibles con Nixpkgs son x86_64-linux, aarch64-linux, x86_64-darwin y aarch64-darwin. Los paquetes para estas arquitecturas se construyen regularmente, utilizando un servicio de integración continua llamado Hydra, [12] y los resultados de estas compilaciones se cargan en un caché binario público. [13] Cuando Nix instala un paquete, verifica este caché y descarga el paquete binario para evitar compilarlo localmente.
Nixpkgs se desarrolla en un único repositorio Git en GitHub. [14] Además de los paquetes, también contiene el código fuente de NixOS .
NixOS [15] es una distribución de Linux que utiliza Nix para administrar toda la configuración del sistema, incluido el kernel de Linux. [16]
Nix se utiliza para el empaquetado y distribución de software en el experimento LHCb del CERN . [17] Nix es la base de las plataformas de desarrollo de software distribuido Replit [18] y Google IDX . [19]
En 2021, se anunció una reimplementación con el nombre de Tvix, [20] con los objetivos de modularidad, compatibilidad total con Nixpkgs y un rendimiento mejorado del evaluador. A partir de 2024, Tvix tiene un evaluador [21] y una implementación de la tienda, [22] aunque los autores no consideran que el proyecto aún sea estable o esté listo para su uso en producción. [23] [ Se necesita una fuente no primaria ] Tvix está escrito principalmente en Rust . [24]
En 2024, un equipo de voluntarios lanzó la primera versión de Lix, [25] [ se necesita código fuente no primario ] una bifurcación de Nix centrada en la corrección y la compatibilidad que utiliza el sistema de automatización de compilación Meson . El proyecto pretende reescribir gradualmente partes del código en Rust. [25]