NixOS es una distribución de Linux gratuita y de código abierto basada en el administrador de paquetes Nix puramente funcional . NixOS se compone de módulos y paquetes definidos en el proyecto nixpkgs.
NixOS utiliza un diseño inmutable y un modelo de actualización atómica. [5] Su uso de una configuración declarativa permite reproducibilidad y portabilidad. [6]
En 2003, Eelco Dolstra inició NixOS como un proyecto de investigación. [7] [8] Dolstra dice que el propósito del proyecto era lograr un sistema para la correcta implementación del software. [9] 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. [10]
NixOS publica versiones estables dos veces al año, a finales de mayo y finales de noviembre. [11] [12] [13]
En NixOS, todo el sistema operativo, incluido el kernel , las aplicaciones, los paquetes del sistema y los archivos de configuración , lo construye 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. [14]
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: [15]
{ bota . cargador . comida . dispositivo = "/dev/sda" ; sistemas de archivos . "/" . dispositivo = "/dev/sda1" ; servicios . sshd . habilitar = verdadero ; }
Después de cambiar el archivo de especificación, el sistema se puede actualizar usando 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 haya en el sistema.
NixOS tiene un enfoque transaccional para la gestión de la configuración, haciendo que los cambios de configuración, como las actualizaciones, sean atómicos . Por ejemplo, si una actualización a una nueva configuración se ve interrumpida por un corte de energía, el sistema seguirá en un estado consistente: arrancará con la configuración antigua o con la nueva. [dieciséis]
Si, después de una actualización del sistema, la nueva configuración no es deseada, se puede revertir usando un comando especial ( nixos-rebuild switch --rollback
). Cada versión de configuración del sistema aparece automáticamente en el menú de inicio 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. [17]
El modelo de configuración declarativa de NixOS facilita la reproducción de una configuración del sistema en otra máquina. Copiar el archivo de configuración en la máquina de destino y ejecutar el comando de actualización del sistema genera la misma configuración del sistema (kernel, aplicaciones, servicios del sistema, etc.), excepto las partes del sistema que no administra el administrador de paquetes, como los datos del 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 los archivos binarios prediseñados desde un servidor de caché cuando están disponibles. Es posible deshabilitar el caché binario y forzar la construcción desde la fuente usándolo --option substitute false
como argumento. Esto brinda la flexibilidad de un modelo de gestión de paquetes basado en código fuente, con la eficiencia de un modelo binario. [18]
El administrador de paquetes de 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 cambia el kernel, el administrador de paquetes se asegurará de que se reconstruyan los módulos externos del kernel. De manera similar, cuando se actualiza una biblioteca, se 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 múltiples 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 permitirían controlar el contenido de la salida de una derivación (como agregar impurezas al sandbox o usar un archivo que no es de confianza). sustituto). [ se necesita aclaración ] Sin esos parámetros, las rutas solo se pueden sustituir a partir de un sustituto en el que el sistema confíe o una compilación local protegida en la que se confíe implícitamente.
NixOS se basa en el administrador de paquetes Nix , que almacena todos los paquetes de forma aislada entre sí en el almacén de paquetes.
Los paquetes instalados se identifican mediante un hash criptográfico de todas las entradas utilizadas para su compilación. Cambiar las instrucciones de compilación de un paquete modifica su hash y eso dará como resultado que se instale un paquete diferente en el almacén de paquetes. Este sistema también se utiliza para administrar archivos de configuración, asegurando que las configuraciones más nuevas no sobrescriban las más antiguas.
Una implicación de esto es que NixOS no sigue el estándar de jerarquía del sistema de archivos . Las únicas excepciones son que /bin/shse crea un enlace simbólico a la versión de bash en la tienda de Nix (por ejemplo /nix/store/s/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-bash-4.3.43/
, ), y aunque NixOS tiene un /etcdirectorio para guardar 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 como /nix/store/s2sjbl85xnrc18rl4fhn56irkxqxyk4p-sshd_config
. No utilizar 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, [19] 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 funcionó igual que cualquier otra distribución de Linux. Configurar NixOS no es para principiantes y no creo que NixOS esté destinado a ser utilizado como un sistema operativo de escritorio de uso general. Pero lo que NixOS hace es brindarnos un campo de juego útil para examinar el administrador de paquetes de Nix y creo que esta es una tecnología muy interesante que merece una mayor exploración y adopción por parte de distribuciones adicionales.
Una revisión de 2022 de NixOS 21.11 "Porcupine" en la revista Full Circle concluyó:
En general, NixOS Gnome 21.11 impresiona por ser serio, limpio y elegante. Si eres fanático del escritorio Gnome sin modificaciones, aquí encontrarás muchas cosas que te gustarán. La desventaja de esta distribución es la pronunciada curva de aprendizaje para la gestión de paquetes, incluidas las actualizaciones y similares. No importa de qué distribución vengas, tendrás mucho que aprender para poder hacer que Nix funcione bien en la línea de comandos. [20]
NixOS 22.11 "Raccoon" revisado por Liam Proven en The Register :
En comparación con los informes de NixOS de hace sólo 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 pulido, pero desde una perspectiva inicial no tenemos una base previa con la que comparar. Esta no es en absoluto una distribución tradicional, ni siquiera un Unix tradicional, pero funciona y podemos ver su atractivo. [21]