NixOS

NixOS
Información general
Tipo de programa distribución Linux
Desarrollador
  • Eelco Dolstra
  • Peter Simons
  • Thomas Tuegel
Lanzamiento inicial 2003
Licencia Licencia MIT
Información técnica
Plataformas admitidas
Sistema de gestión de paquetes Nix
Versiones
Última versión estable Uakari31 de mayo de 2024
Enlaces

NixOS es una distribución de Linux construida sobre el administrador de paquetes Nix. Utiliza configuración declarativa y permite actualizar de manera confiable el sistema.[1]​ Ofrece varios "canales" de paquetes oficiales[2][3]​, incluida la versión estable actual y la versión inestable que aún continúa en pruebas. NixOS tiene herramientas dedicadas a DevOps y tareas de implementación.[4][5]

Historia

[editar]

Eelco Dolstra inició NixOS como un proyecto de investigación en el año 2003.[6][7]​ Posteriormente, en 2015, se fundó Stichting NixOS con el objetivo de respaldar proyectos como NixOS que implementan el modelo de despliegue puramente funcional.[8]

Versiones

[editar]

NixOS publica actualizaciones dos veces al año.[9]​ Anteriormente ocurría en los meses de marzo y septiembre, pero actualmente, a partir del 21.05, NixOS apunta a mayo y noviembre.[10]​ Cada una de estas versiones tiene el formato "YY. MM", por ejemplo, "20.03" fue la versión lanzada en marzo de 2020. Cada versión de NixOS tiene un nombre, por ejemplo "Markhor" para la versión 20.03.

Características

[editar]
Captura de imagen del instalador gráfico de NixOS.

Modelo de configuración declarativa

[editar]

En NixOS, todo el sistema operativo (el kernel, las aplicaciones, los paquetes, los archivos de configuración, etc.) es creado por el administrador de paquetes de Nix a partir de una descripción en lenguaje funcional. Como consecuencia de esto, la creación de una nueva configuración no puede sobrescribir las configuraciones anteriores.[11]

Un sistema con NixOS se configura escribiendo en un archivo de configuración global la especificación de la funcionalidad que el usuario desea en su máquina. A continuación se puede ver un ejemplo de una configuración mínima de una máquina que ejecuta un demonio SSH:[12]

{
 boot.loader.grub.device = "/dev/sda";
 fileSystems."/".device = "/dev/sda1";
 services.sshd.enable = true;
}

Una vez el archivo de configuración haya sido cambiado, el sistema se puede actualizar usando el comando nixos-rebuild switch . Este comando hace todo lo necesario para aplicar la nueva configuración, incluida la descarga y compilación de paquetes, así como también la generación de archivos de configuración.

Actualizaciones confiables

[editar]

Dado que los archivos Nix son puros y declarativos, evaluarlos siempre producirá el mismo resultado, independientemente de los paquetes o archivos de configuración que haya en el sistema. Por lo tanto, actualizar un sistema es tan confiable como reinstalarlo desde cero.

Actualizaciones atómicas

[editar]

NixOS tiene un enfoque transaccional para la gestión de la configuración al realizar cambios de configuración, como actualizaciones atómicas. Esto significa que si se interrumpe la actualización a una nueva configuración, el sistema aún permanecerá en un estado de consistencia: se iniciará con la configuración anterior o nueva. En otros sistemas, una máquina puede terminar en un estado de inconsistencia y es probable que ya no arranque.[13]

Reversiones

[editar]

Si luego de una actualización del sistema, la nueva configuración no es la esperada, es posible revertir el cambio usando un comando especial ( nixos-rebuild switch --rollback ). Cada versión de configuración del sistema aparece de forma automática en el menú de inicio del sistema. Si la nueva configuración falla o presenta algún tipo de problema al iniciar, se puede seleccionar una versión anterior. Las reversiones son operaciones ligeras que no implican la restauración de archivos a partir de copias.

Configuraciones de sistema reproducibles

[editar]

El modelo de configuración declarativa que presenta NixOS facilita la replicación de una configuración particular en otras máquinas. Copiando el archivo de configuración en la máquina de destino y ejecutando el comando de actualización del sistema, genera la misma configuración del sistema (núcleo, aplicaciones, servicios del sistema, etc.), exceptuando por las partes del sistema que no son administradas por el administrador de paquetes, los datos del usuario son un ejemplo de esto.

Modelo basado en fuente con caché binario

[editar]

El lenguaje de compilación Nix que utiliza NixOS especifica cómo compilar paquetes desde el origen. Esto hace más fácil que el sistema se adapte a las necesidades del usuario. Sin embargo, debido a que la compilación desde la fuente es un proceso lento, el administrador de paquetes descarga de manera automática los binarios preconstruidos de un servidor de caché cuando estén disponibles. Esto brinda la flexibilidad de un modelo de administración de paquetes basado en fuente con la eficiencia de un modelo binario.[14]

Consistencia

[editar]

El administrador de paquetes de Nix se asegurará que el sistema en ejecución sea consistente con la especificación lógica del sistema, esto significa que reconstruirá todos los paquetes que deban ser reconstruidos. Por ejemplo, si se cambia el kernel, el administrador de paquetes se asegurará de que se reconstruyan todos los módulos externos del kernel. De forma similar, cuando una biblioteca es actualizada, se asegura de que los paquetes del sistema utilicen esta nueva versión, incluso los paquetes vinculados de forma estática a la misma.

Gestión de paquetes multiusuario

[editar]

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 sus propios paquetes. Nix permite también la coexistencia de múltiples versiones de un mismo paquete, por lo tanto, distintos usuarios pueden tener distintas versiones de un mismo paquete instaladas en sus respectivos perfiles. Si dos usuarios instalan la misma versión de un paquete, solo será creada o descargada una sola copia. El modelo de seguridad de Nix garantiza que esto sea seguro porque solo los usuarios en los cuales la configuración del sistema confía de forma explícita pueden usar parámetros de compilación que les permitirían controlar el contenido de la salida de una derivación (como agregar impurezas a la caja de arena o usar un sustituto no confiable). Sin estos parámetros, las rutas solo pueden sustituirse por un sustituto confiable para el sistema o una compilación de espacio aislado local en la que se confíe implícitamente.

Implementación

[editar]

NixOS se basa en el administrador de paquetes Nix, quien guarda en el almacén de paquetes todos los paquetes aislados entre sí.

Los paquetes instalados se identifican mediante un código hash único proveniente de todas las entradas utilizadas para su compilación. Al cambiar las instrucciones de compilación de un paquete, modifica su hash dando como resultado un paquete diferente el cual será instalado en el almacén de paquetes. Este sistema es también usado para administrar los archivos de configuración, garantizando que las configuraciones más nuevas no sobrescriban las más antiguas.

Esto implica que NixOS no siga el estándar de jerarquía del sistema de archivos. Las únicas excepciones son enlaces simbólicos /bin/sh a la versión de bash en la tienda Nix (como se muestra a continuación: /nix/store/s/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-bash-4.3.43/ ); A pesar de que NixOS tiene un directorio /etc para guardar los archivos de configuración de todo el sistema, la mayor parte de los archivos que están en este directorio son enlaces simbólicos a archivos generados en /nix/store como /nix/store/s2sjbl85xnrc18rl4fhn56irkxqxyk4p-sshd_config . El no usar directorios globales como /bin es una parte de lo que permite que coexistan múltiples versiones de un mismo paquete.

Recepción

[editar]

Jesse Smith, al revisar NixOS 15.09 para DistroWatch Weekly[15]​ escribió:

I very much like the way NixOS takes the worry out of upgrading packages by placing each change in its own "generation" and I found, from the end user's point of view, NixOS worked just the same as any other Linux distribution. Setting up NixOS is not for beginners, and I do not think NixOS is intended to be used as a general purpose desktop operating system. But what NixOS does do is give us a useful playground in which to examine the Nix package manager and I think this is very interesting technology which deserves further exploration and adoption by additional distributions.

DistroWatch Weekly tiene también una revisión de NixOS 17.03 escrita por Ivan Sanders.[16]

Una revisión de NixOS 21.11 "Porcupine", la cual fue realizada en 2022 en la revista Full Circle concluyó:

Overall NixOS Gnome 21.11 impresses as serious, neat and elegant. If you are a fan of the unmodified Gnome desktop, then you will find a lot to like here. The downside of this distribution is the steep learning curve for package management, including updates and the like. No matter which distribution you come from, you will have much to learn to be able to make Nix work well for you on the command-line."[17]

Referencias

[editar]
  1. «DistroWatch.com: NixOS». Distrowatch.com. Consultado el 19 de septiembre de 2015. 
  2. «Nix channels - NixOS Wiki». wiki.nixos.org. Consultado el 10 de febrero de 2022. 
  3. «NixOS Infra Status». status.nixos.org. Consultado el 10 de febrero de 2022. 
  4. «NixOps - The NixOS Cloud Deployment Tool». Nixos.org. Consultado el 19 de septiembre de 2015. 
  5. «svanderburg/disnix». Nixos.org. Consultado el 19 de septiembre de 2015. 
  6. Dolstra, Eelco (2003). «Integrating Software Construction and Software Deployment». Lecture Notes in Computer Science 2649: 102-117. ISBN 978-3-540-14036-8. doi:10.1007/3-540-39195-9_8. Archivado desde el original el 21 de abril de 2019. 
  7. The Purely Functional Software Deployment Model (Tesis). 
  8. «Stichting NixOS Foundation». Nixos.org. Consultado el 19 de septiembre de 2015. 
  9. «Governance». Nixos.org. Archivado desde el original el 16 de agosto de 2020. Consultado el 28 de agosto de 2020. 
  10. «Nix RFCS (Request for Comments)». GitHub. 17 de diciembre de 2021. 
  11. Dolstra, Eelco; Hemel, Armijn (2007). Purely Functional System Configuration Management. Archivado desde el original el 6 de julio de 2019. 
  12. «About NixOS». Nixos.org. Consultado el 19 de septiembre de 2015. 
  13. van der Burg, Sander; Dolstra, Eelco; de Jonge, Merijn (2008). Atomic Upgrading of Distributed Systems. Archivado desde el original el 15 de enero de 2019. 
  14. Dolstra, Eelco (2005). Secure Sharing Between Untrusted Users in a Transparent Source/Binary Deployment Model. Archivado desde el original el 26 de septiembre de 2019. 
  15. DistroWatch Weekly, Issue 637, 23 November 2015
  16. DistroWatch Weekly, Issue 712, 15 May 2017
  17. Hunt, Adam (28 de octubre de 2022). «Review - NixOS». Full Circle magazine. Archivado desde el original el 28 de octubre de 2022. Consultado el 28 de octubre de 2022. 

Enlaces externos

[editar]