NixOS: el sistema operativo que tus colegas deberían conocer

Y si te dijera que existe un Linux donde la configuración no se rompe, los entornos de desarrollo son reproducibles, y puedes replicar tu máquina entera con un solo archivo?

Se llama NixOS. Y sí, es tan revolucionario como suena.

El problema

Llevo años administrando servidores Linux. Ubuntu, Debian, algo de Alpine. Y siempre es lo mismo: instalas un paquete, y tres meses después no recuerdas por qué. Cambias una línea en nginx.conf y dos actualizaciones después, alguien la sobrescribe. Tienes 4 proyectos PHP y cada uno necesita una versión distinta, y no quieres 4 contenedores Docker para eso. Tu servidor de producción y tu máquina de desarrollo nunca son exactamente iguales.

Docker soluciona parte del problema. Ansible/Puppet otra parte. Pero ninguna solución ataca la raíz: el sistema operativo en sí no es declarativo ni reproducible.

Hasta ahora.

La solución

NixOS es una distribución Linux basada en Nix, un gestor de paquetes puramente funcional. Olvida apt install, yum install, o pacman -S. En NixOS, todo se configura desde un solo archivo: /etc/nixos/configuration.nix.

¿Que quieres instalar Nginx, PHP 8.3, MySQL, y Redis? Pones la configuración, ejecutas nixos-rebuild switch, y el sistema se transforma al estado exacto que describiste. Si algo falla, el sistema vuelve a la configuración anterior automáticamente.

Por qué es revolucionario

Configuración igual a código. Tu configuration.nix es un archivo que puedes versionar en Git, compartir entre máquinas, y reproducir exactamente.

Múltiples versiones del mismo paquete sin conflictos. ¿PHP 7.4 para un proyecto legacy y PHP 8.3 para el nuevo? Ambos, sin problemas. ¿MySQL 5.7 y MySQL 8.0 a la vez? También. No son parches — es el diseño fundamental de Nix.

Rollbacks automáticos. Cada cambio guarda la configuración anterior. Si algo sale mal, seleccionas la entrada anterior del GRUB y vuelves exactamente a cómo estaba. No necesitas Timeshift, ni snapshots manuales, ni acordarte de lo que cambiaste.

Entornos de desarrollo reproducibles. Con nix-shell defines un entorno con todas las dependencias de tu proyecto, sin instalarlas globalmente. Compartes el archivo con tu equipo y todos tienen exactamente el mismo entorno. Adiós a «en mi máquina funciona».

Despliegues deterministas. Una build hecha hoy es idéntica a la misma build dentro de un año. Las dependencias se referencian por hash criptográfico, no por nombre de paquete.

La contrapartida

No es perfecto. La curva de aprendizaje es real — la sintaxis de Nix es funcional y declarativa, diferente a todo lo que hayas visto. La documentación oficial ha mejorado pero tiene lagunas. Algunos paquetes no están en nixpkgs y toca empaquetarlos manualmente. Pero una vez que lo entiendes, no quieres volver atrás.

Veredicto

NixOS no es para todos. Si solo quieres instalar Ubuntu y hacer apt upgrade, sigue siendo una opción válida. Pero si alguna vez has pensado «tiene que haber una manera mejor de gestionar esto» — la hay.

Lo uso en mi portátil desde hace meses. No he tenido que reinstalar. No he tenido un «no sé por qué esto se rompió». Cuando actualizo, si algo falla, vuelvo atrás con una tecla.

Eso, para mí, es revolucionario.

NixOS #Linux #DevOps #InfraestructuraComoCodigo #PHP #SelfHosted

¿Ya conocías NixOS? ¿Lo has probado? Cuéntame en comentarios si te animaste a instalarlo o si tienes dudas.

José Antonio Álvarez — Senior PHP Developer que pasa tanto tiempo configurando servidores como escribiendo código.

joalweingartt