← Últimos Posts del Blog

🎵 Podcast en Spotify

Al considerar el Subsistema de Windows para Linux (WSL), la mayoría de los desarrolladores tienden a optar por distribuciones como Ubuntu o Fedora, dada su curva de aprendizaje casi nula y su amplia documentación y soporte comunitario. Sin embargo, para aquellos que buscan un entorno de trabajo más robusto, reproducible y declarativo, NixOS surge como una alternativa fascinante en WSL. Transforma WSL en un entorno que puede reconstruirse, clonarse y revertirse con un solo comando, manteniendo la misma funcionalidad de GUI, GPU y USB que Ubuntu y Fedora ofrecen en las versiones modernas de WSL.

La característica más distintiva de NixOS es su enfoque declarativo. Toda la configuración de una instalación de NixOS se especifica en un único archivo de texto, típicamente configuration.nix o un flake.nix que lo importa. Al ejecutar nixos-rebuild switch, el sistema operativo se construye directamente a partir del contenido de ese archivo. Esto elimina la dependencia de historial interactivo o comandos de paquetes recordados a medias, garantizando una reproducibilidad bit a bit. Una configuración puede reinstalarse en otra PC o en entornos de Integración Continua (CI) y resultar en una configuración idéntica. Además, el historial de Git puede registrar la adición, el autor y la razón de cada paquete. Este mismo enfoque puede aplicarse a diferentes plataformas, como WSL, un servidor bare-metal, una VM en la nube o macOS a través de nix-darwin. Una diferencia crucial es que puedes copiar el configuration.nix a cualquier máquina NixOS y replicar el sistema exacto con un solo comando de reconstrucción, sincronizando múltiples computadoras.

Otro beneficio técnico significativo es el proceso de actualizaciones atómicas. Cuando ajustas la configuración y ejecutas nixos-rebuild switch, Nix construye el nuevo estado del sistema en segundo plano. La transición al nuevo estado ocurre solo después de que todo está listo, previniendo actualizaciones parciales que podrían dejar la configuración en un estado roto. Si una actualización introduce un error, como una falla de controlador, es posible simplemente reiniciar en una "generación" anterior para corregir el problema. Incluso en WSL, NixOS mantiene un historial completo de los estados del sistema, versionando cada reconstrucción, lo que permite reversiones fáciles sin depuración o reinstalación – algo no ofrecido de forma nativa por apt o dnf en distribuciones WSL típicas.

La gestión de entornos de desarrollo se mejora drásticamente con las shells de desarrollo por proyecto de Nix. Para desarrolladores que trabajan en múltiples proyectos con dependencias en conflicto (por ejemplo, diferentes versiones de Node o bibliotecas de Python), Nix elimina la necesidad de contenedores Docker o de contaminar el sistema base. La herramienta nix develop te permite crear un entorno con exactamente las herramientas necesarias para ese proyecto específico, y nada persiste después de salir de la shell. Esto representa un gran cambio en comparación con el flujo de trabajo tradicional en Ubuntu o Fedora, donde se instalarían y desinstalarían paquetes, o se utilizarían herramientas como virtualenv y nvm para simular aislamiento.

La integración de NixOS con WSL es excepcionalmente fluida. Funciona a la perfección con todas las funcionalidades clave de WSL2. La versión más reciente de NixOS-WSL incluso incluye soporte nativo para systemd integrado de WSL, permitiendo la ejecución de servicios Linux en segundo plano sin la necesidad de trucos. Anteriormente, la ausencia de PID 1 y systemd en WSL era una limitación significativa. Ahora, una instancia de NixOS WSL se inicia con systemd como un sistema Linux regular, habilitando características como temporizadores y servicios activados por socket. La integración de hardware e interfaz de usuario (UI) también es perfecta; NixOS WSL ofrece una opción para usar el controlador gráfico OpenGL del host de Windows para la aceleración de GPU en aplicaciones Linux. Además, el acceso a los archivos de NixOS desde aplicaciones de Windows es directo, a través de la ruta \\wsl.localhost\NixOS.

Esta sinergia entre NixOS y WSL es particularmente potente para unificar entornos de desarrollo en diversas plataformas. Es posible ejecutar NixOS en un servidor Linux sin interfaz gráfica para implementaciones, y también usar Nix a través de Home Manager y nix-darwin en una Mac. Al emplear NixOS en WSL en una máquina Windows, tus configuraciones de desarrollo en Windows, servidores Linux y laptop macOS pueden permanecer sincronizadas con las mismas versiones exactas de software.

En resumen, NixOS en WSL ofrece un control sin precedentes sobre el entorno de desarrollo, transformándolo en algo totalmente reproducible, configurable a través de un único archivo declarativo, y resiliente a fallas de actualización debido a sus capacidades atómicas y de reversión. Para desarrolladores que buscan una configuración que puede replicarse fácilmente, auditarse mediante control de versiones y mantenerse consistente en diferentes máquinas y proyectos, NixOS en WSL es una herramienta poderosa y un paso adelante de los enfoques tradicionales. Ofrece una base sólida para construir un flujo de trabajo más eficiente y a prueba de fallos.