NixOS es una distribución Linux libre y de código abierto basada en el gestor de paquetes Nix . NixOS utiliza un diseño inmutable y un modelo de actualización atómico. [6] Su uso de un sistema de configuración declarativo permite reproducibilidad y portabilidad. [7]
NixOS se configura mediante módulos componibles y se basa en paquetes definidos en el proyecto Nixpkgs. Las recetas y configuraciones de paquetes se escriben en el "lenguaje Nix" especialmente diseñado que se incluye con el administrador de paquetes Nix.
En 2003, Eelco Dolstra inició Nix como un proyecto de investigación. [8] [9] Dolstra dice que el propósito del proyecto era lograr un sistema para la correcta implementación de software. [10] Sus influencias incluyeron a Eelco Visser , quien había supervisado su doctorado en la Universidad de Utrecht . [11] En 2006, Armijn Hemel presentó NixOS como resultado de su tesis de maestría en Utrecht. [12]
En 2015, se fundó la Fundación NixOS en los Países Bajos, con el objetivo de apoyar proyectos como NixOS que implementan el modelo de implementación puramente funcional. [13]
NixOS publica versiones estables dos veces al año, alrededor de fines de mayo y fines de noviembre. [14] [15] [16]
En NixOS, el sistema operativo completo (incluido el núcleo , las aplicaciones, los paquetes del sistema y los archivos de configuración ) se crea mediante el administrador de paquetes Nix a partir de una descripción en el lenguaje Nix. La creación de una nueva versión no sobrescribirá las versiones anteriores. [17]
Un sistema NixOS se configura escribiendo una especificación de la funcionalidad que el usuario desea en su máquina en un archivo de configuración global (normalmente ubicado en /etc/nixos
). La siguiente es una especificación mínima de una máquina que ejecuta un demonio SSH: [18]
{ boot . loader . grub . device = "/dev/sda" ; sistemasdearchivos . "/" . device = "/dev/sda1" ; servicios . sshd . enable = true ; }
Después de cambiar el archivo de especificaciones, el sistema se puede actualizar mediante el nixos-rebuild
comando. Esto hace todo lo necesario para crear la nueva versión del sistema, incluida la descarga e instalación de paquetes y la generación de archivos de configuración.
Dado que los archivos Nix son puros y declarativos , evaluarlos siempre producirá el mismo resultado, independientemente de qué paquetes o archivos de configuración estén en el sistema.
NixOS tiene un enfoque transaccional para la gestión de la configuración, lo que hace que los cambios de configuración, como las actualizaciones, sean atómicos . Por ejemplo, si una actualización a una nueva configuración se interrumpe por un corte de energía, el sistema seguirá estando en un estado consistente: se iniciará en la configuración antigua o en la nueva. [19]
Si, después de una actualización del sistema, la nueva configuración no es la deseada, se puede revertir a una versión anterior mediante un comando especial ( nixos-rebuild switch --rollback
). Todas las versiones de la configuración del sistema aparecen automáticamente en el menú de arranque del sistema. Si la nueva configuración falla o no arranca correctamente, se puede seleccionar una versión anterior. Las reversiones son operaciones ligeras que no implican la restauración de archivos a partir de copias. [20]
El modelo de configuración declarativa de NixOS facilita la reproducción de una configuración de sistema en otra máquina. Al copiar el archivo de configuración en la máquina de destino y ejecutar el comando de actualización del sistema, se genera la misma configuración del sistema (núcleo, aplicaciones, servicios del sistema, etc.), excepto las partes del sistema que no administra el administrador de paquetes, como los datos de usuario.
El lenguaje de compilación Nix utilizado por NixOS especifica cómo compilar paquetes desde el código fuente. Esto facilita la adaptación del sistema a las necesidades del usuario. Sin embargo, como la compilación desde el código fuente es un proceso lento, el administrador de paquetes descarga automáticamente binarios precompilados desde un servidor de caché cuando están disponibles. Es posible deshabilitar el caché binario y forzar la compilación desde el código fuente utilizando --option substitute false
como argumento. Esto brinda la flexibilidad de un modelo de administración de paquetes basado en el código fuente, con la eficiencia de un modelo binario. [21]
El administrador de paquetes Nix garantiza que el sistema en ejecución sea coherente con la especificación lógica del sistema, lo que significa que reconstruirá todos los paquetes que deban reconstruirse. Por ejemplo, si se modifica el núcleo, el administrador de paquetes se asegurará de que se reconstruyan los módulos externos del núcleo. De manera similar, cuando se actualiza una biblioteca, garantiza que todos los paquetes del sistema utilicen la nueva versión, incluso los paquetes vinculados estáticamente a ella.
No se necesitan privilegios especiales para instalar software en NixOS. Además del perfil de todo el sistema, cada usuario tiene un perfil dedicado en el que puede instalar paquetes. Nix también permite que coexistan varias versiones de un paquete, por lo que diferentes usuarios pueden tener diferentes versiones del mismo paquete instaladas en sus respectivos perfiles. Si dos usuarios instalan la misma versión de un paquete, solo se creará o descargará una copia. El modelo de seguridad de Nix garantiza que esto sea seguro, porque solo los usuarios en los que la configuración del sistema confía explícitamente pueden usar parámetros de compilación que les permitan controlar el contenido de la salida de una derivación (como agregar impurezas al sandbox o usar un sustituto que no sea de confianza). [ aclaración necesaria ] Sin esos parámetros, las rutas solo se pueden sustituir desde un sustituto en el que confíe el sistema o una compilación local en sandbox que sea de confianza implícita.
NixOS se basa en el administrador de paquetes Nix , que almacena todos los paquetes de forma aislada unos de otros en el almacén de paquetes.
Los paquetes instalados se identifican mediante un hash criptográfico de todos los datos de entrada utilizados para su compilación. Al cambiar las instrucciones de compilación de un paquete se modifica su hash, lo que dará como resultado que se instale un paquete diferente en el almacén de paquetes. Este sistema también se utiliza para administrar los archivos de configuración, lo que garantiza que las configuraciones más nuevas no sobrescriban las antiguas.
Una implicación de esto es que NixOS no sigue el estándar de jerarquía de sistemas de archivos . Las únicas excepciones son que /bin/shse crea un enlace simbólico a la versión de bash en el almacén de Nix (por ejemplo, /nix/store/s/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-bash-4.3.43/
), y si bien NixOS tiene un /etcdirectorio para guardar los archivos de configuración de todo el sistema, la mayoría de los archivos en ese directorio son enlaces simbólicos a archivos generados en /nix/store, como /nix/store/s2sjbl85xnrc18rl4fhn56irkxqxyk4p-sshd_config
. No usar directorios globales como /bines parte de lo que permite que coexistan múltiples versiones de un paquete.
Jesse Smith, al revisar NixOS 15.09 para DistroWatch Weekly en 2015, [22] escribió:
Me gusta mucho la forma en que NixOS elimina la preocupación de actualizar paquetes al colocar cada cambio en su propia "generación" y descubrí que, desde el punto de vista del usuario final, NixOS funcionaba igual que cualquier otra distribución de Linux. La configuración de NixOS no es para principiantes y no creo que NixOS esté pensado para usarse como un sistema operativo de escritorio de propósito general. Pero lo que sí hace NixOS es brindarnos un campo de juego útil en el que examinar el administrador de paquetes Nix y creo que esta es una tecnología muy interesante que merece una mayor exploración y adopción por parte de otras distribuciones.
Una revisión de 2022 de NixOS 21.11 "Porcupine" en la revista Full Circle concluyó:
En general, NixOS Gnome 21.11 impresiona por su seriedad, limpieza y elegancia. Si eres fanático del escritorio Gnome sin modificaciones, encontrarás muchas cosas que te gustarán aquí. La desventaja de esta distribución es la pronunciada curva de aprendizaje para la administración de paquetes, incluidas las actualizaciones y similares. No importa de qué distribución provengas, tendrás mucho que aprender para poder hacer que Nix funcione bien para ti en la línea de comandos. [23]
Liam Proven analiza NixOS 22.11 "Raccoon" en The Register :
En comparación con los informes sobre NixOS de hace apenas dos o tres años, descubrimos que era muy sencillo instalarlo y ponerlo en funcionamiento. Esto sugiere que las herramientas están madurando bien y alcanzando un cierto nivel de refinamiento, pero desde una perspectiva de primera vez no tenemos una base de referencia previa con la que comparar. No se trata en absoluto de una distribución tradicional, ni siquiera de un Unix tradicional, pero funciona y podemos ver su atractivo. [24]
Reseña de NixOS 23.11 "Tapir" realizada por Jesse Smith en DistroWatch :
NixOS es una joya poco común, ya que no creo que haya tenido ningún error mientras lo estaba usando. La distribución era estable, funcionaba bien con mi hardware y no tuve ningún problema mientras lo ejecutaba. Creo que vale la pena probar NixOS, especialmente si eres un administrador de sistemas y quieres implementar (o mantener) distribuciones idénticas en varias máquinas. [25]