¿Te imaginas un sistema Linux donde cada actualización sea fácilmente reversible sin comprometer tus datos? ¿O donde la configuración de paquetes sea totalmente reproducible y aislada? Bienvenido al mundo de los sistemas inmutables, un enfoque cada vez más popular gracias a distribuciones como NixOS y Guix, unos sistemas que nos permiten tener un sistema más seguro a la hora de actualizarlo.
En este artículo exploraremos:
- El concepto de sistema inmutable y sus ventajas (rollback, reproducibilidad…).
- El gestor de paquetes Nix y su contraparte en Guix.
- Pasos prácticos para probar una instalación mínima de NixOS o GuixSD.
1. ¿Qué es un sistema inmutable en Linux?
Un sistema inmutable es aquel cuyo conjunto de archivos base y configuración están diseñados para no cambiar o cambiarse únicamente de forma controlada. Esto implica que la parte “mutable” (es decir, los datos de usuario o la configuración puntual) se separa del sistema base, permitiendo revertir cambios o actualizaciones con facilidad.
1.1 Ventajas principales
- Rollback sencillo: En sistemas inmutables, es posible volver a un estado anterior del sistema con solo indicarlo en el arranque o incluso al reiniciar el sistema.
- Reproducibilidad: Dado que las versiones de cada paquete y configuración se definen de forma declarativa, podemos reproducir el mismo entorno en diferentes máquinas o en el futuro. Esto es similar al funcionamiento de, por ejemplo, Docker.
- Menor propensión a errores: Al no “tocar” el sistema base de forma arbitraria, se evitan conflictos entre paquetes o librerías.
- Entornos aislados: Cada actualización y paquete se almacenan de manera separada (en “store” o “profiles”), evitando la sobreescritura de versiones anteriores.
1.2 Ejemplos de sistemas inmutables
- NixOS: Distribución que gira en torno al gestor de paquetes Nix y un fichero de configuración declarativo (
configuration.nix
). - Guix/GuixSD: Proyecto GNU que toma la filosofía de Nix, pero implementada 100% en software libre de la FSF y con el lenguaje Guile Scheme para las definiciones.
- Otros ejemplos: Fedora Silverblue o openSUSE MicroOS también usan la idea de inmutabilidad, aunque con tecnologías diferentes (OSTree, Btrfs, etc.).
2. Nix y Guix: Gestores de Paquetes Declarativos
Lo más característico de NixOS y Guix es su gestor de paquetes. Ambos permiten instalar software en rutas únicas (hash del paquete en disco), evitando la sobreescritura de versiones.
2.1 Gestor de paquetes Nix
- Store y perfiles: Nix instala cada paquete en
/nix/store
con un hash único. Luego, tu usuario crea un “perfil” que apunta a esos paquetes instalados. - Declaratividad: Podemos definir el sistema o un entorno de usuario en un archivo
.nix
, describiendo exactamente la versión de cada paquete. - Rollback: Si una actualización falla, Nix conserva la generación anterior, lo que facilita revertir.
- Reproducibilidad: Mismo archivo
.nix
, mismo resultado, sin importar la máquina (en la medida de lo posible).
Ejemplo de instalación con Nix
# Instalar un paquete de forma imperativa
nix-env -i firefox
# Buscar paquetes
nix-env -qaP | grep firefox
Pero la magia real está en declarar tu configuración y luego ejecutar nixos-rebuild switch
(en NixOS) o nix-env -i
en tu usuario.
2.2 Gestor de paquetes Guix
Guix se inspira directamente en Nix, pero usando Guile Scheme y bajo la sombrilla del proyecto GNU.
- Guix System: También llamado GuixSD, es la “distro” que adopta este gestor como base (similar a NixOS).
- Declaraciones en Scheme: Todo el sistema se configura con expresiones Scheme, donde defines servicios, paquetes, etc.
- Reproducibilidad extrema: Guix se compromete a la filosofía de software 100% libre, y cada derivación (paquete) se construye con scripts también libres.
- Rollbacks y perfiles: De igual forma, mantiene historiales de generaciones.
3. Pasos para instalar NixOS o GuixSD
Si te animas a experimentar o incluso instalar estas distribuciones de forma definitiva, ambos proyectos ofrecen ISOs de instalación. Veamos cómo hacerlo en cada distribución:
3.1 Cómo instalar NixOS
Descarga e instala la ISO: Visita el sitio oficial de NixOS para descargar la ISO de instalación. Hay dos opciones: con interfaz gráfica (Plasma o Gnome) o solamente la terminal. Para seguir la instalación, podemos seguir el tutorial general de instalación.
Configuration.nix: Tras la instalación (con la herramienta nixos-install
), personalizas configuration.nix
. Ahí definimos usuarios, servicios, paquetes. Por ejemplo:
{ config, pkgs, ... }: { imports = [ ./hardware-configuration.nix ]; boot.loader.grub.device = "/dev/sda"; networking.hostName = "mi-nix"; environment.systemPackages = with pkgs; [ vim firefox git ]; }
Rebuild: Cada vez que cambies la configuración, hay que ejecutar:
sudo nixos-rebuild switch
3.2 Cómo instalar GuixSD
Descarga e instala la ISO: Desde guix.gnu.org podemos descargar la imagen ISO. Para ver más detalles, tenemos las instrucciones desde su web oficial.
Instalación: Usa la herramienta guix system
para generar un sistema a partir de un archivo de configuración en Scheme.
Archivo de configuración: De forma similar a Nix, podemos definir servicios, paquetes, cuentas de usuario. Un ejemplo parcial (en Scheme) sería el siguiente:
(operating-system (host-name "mi-guix") (timezone "Europe/Madrid") (locale "es_ES.utf8") (bootloader (bootloader-configuration (bootloader grub-bootloader) (target "/dev/sda"))) (file-systems (list (file-system (mount-point "/") (device "/dev/sda1") (type "ext4")))) (packages (append (list (specification->package "vim") (specification->package "git")) %base-packages)))
Activar cambios: Tras editar el archivo, hay que aplicar los cambios:
guix system reconfigure /ruta/a/config.scm
Rollbacks: Guix mantiene generaciones de configuración, permitiendo revertir con el siguiente comando:
guix system roll-back
5. Otros Ejemplos de Inmutabilidad
Aunque NixOS y Guix son los referentes, existen otros proyectos que adoptan la filosofía inmutable de manera distinta:
- Fedora Silverblue: Usa OSTree para gestionar imágenes atómicas del sistema, con la capa de Flatpak para aplicaciones.
- openSUSE MicroOS: Emplea Btrfs y snapshots automáticos con cada actualización.
- Vanilla OS: Otro experimento inmutable basado en Ubuntu, con un gestor lateral (apx) para instalar paquetes sin romper la base.
Conclusiones
NixOS y Guix representan un cambio radical en cómo concebimos una distro Linux, apostando por la inmutabilidad y la reproducibilidad. Sus gestores de paquetes (Nix y Guix) son la clave para lograr rollbacks inmediatos sin riesgos, paquetes “limpios” en entornos aislados y configuraciones declarativas que facilitan la clonación exacta de sistemas.
Si te apasiona la idea de un sistema siempre listo para deshacer cambios y con cada paquete perfectamente versionado, no dudes en probar NixOS o Guix. Su curva de aprendizaje puede ser algo más pronunciada que la de distros convencionales, pero la recompensa es grande: control total y fiabilidad.