Ecosistema Nix
El Núcleo del ecosistema Nix es un conjunto de tecnologías diseñado para compilar de forma reproducible paquetes y sistemas, así como para configurarlos y administrarlos de manera declarativa junto con sus dependencias. Esto se consigue trasladando el paradigma funcional del ámbito de los programas al de los sistemas mediante un lenguaje específico de dominio (DSL), dinámico, funcional y de evaluación diferida, denominado lenguaje Nix, que permite definir compilaciones reproducibles.
Además, existen numerosas aplicaciones (Ecosistema Extendido Nix) desarrolladas por la comunidad de Nix que utilizan y respaldan estas tecnologías del nucleo.
Ecosistema Oficial
| Componente | Manual | Descripción | Uso | Licencia |
|---|---|---|---|---|
| NixOS | NixOS Manual | Una distribución de Linux cuyos todos los componentes se compilan con Nix, lo que permite la gestión declarativa y reproducible de la configuración de todo el sistema, además de actualizaciones y reversiones atómicas. | Configure escritorios, servidores y clústeres de forma declarativa. | MIT |
| Nixpkgs | Nixpkgs Manual | El mayor repositorio de paquetes de Nix y módulos de NixOS mantenido por la comunidad; las versiones oficiales de NixOS se publican aquí. | Comparta paquetes de Nix y módulos para NixOS | MIT |
| Hydra | Hydra Manual | Un sistema de compilación continua basado en Nix. | Infraestructura de compilación de integración continua | GPL-3.0 |
| Nix | Nix Manual | Un gestor de paquetes que interpreta expresiones de Nix para definir compilaciones reproducibles y almacena el resultado en la store de Nix utilizando una dirección basada en el hash del árbol de dependencias. Esto evita el «infierno de las dependencias» y permite instalar varias versiones de un mismo paquete, así como realizar reversiones. | Compilaciones reproducibles y administración de paquetes en Linux y Darwin. | LGPL-2.1 |
|
NixOS
Una distribución de Linux y un sistema de configuración basado en Nixpkgs. | |
|
Nixpkgs
Un amplio repositorio de paquetes mantenido por la comunidad. |
Hydra
Un sistema de compilación continua basado en Nix. |
|
Nix
Un sistema de compilación puro y funcional. | |
Uso de NixOS
Los usuarios instalan la distribución NixOS en sus equipos como cualquier otra distribución de Linux. Consultan los paquetes disponibles y las opciones de configuración en Nixpkgs a través de https://search.nixos.org y de esta wiki. Utilizan el lenguaje Nix para describir de forma declarativa, en un archivo de texto, qué paquetes de software deben instalarse y cómo debe configurarse el sistema. Ejecutan dos programas de línea de comandos en una terminal para transformar el sistema en el sistema descrito. Luego utilizan el sistema como cualquier otro sistema Linux.
Desarrollo de NixOS
Los desarrolladores de NixOS trabajan principalmente en Nixpkgs. El desarrollo del propio NixOS abarca tres grandes áreas, además de otras de menor tamaño (aunque no menos importantes). Las áreas principales son el empaquetado, el sistema de módulos y la documentación.
- El empaquetado se realiza en Nixpkgs y no es exclusivo de NixOS ni siquiera de plataformas basadas en Linux. Los mantenedores de paquetes que no son exclusivos de NixOS (como las herramientas necesarias para ejecutar la propia distribución) suelen encargarse de múltiples plataformas, aunque esto no es un requisito estricto.
- El sistema de módulos es la forma en que se configuran principalmente los servicios que se ejecutan en NixOS. Esta área abarca desde configuraciones de "bajo nivel", como archivos de unidades de systemd o la provisión de configuraciones personalizadas del kernel, hasta la generación de archivos de configuración para servicios específicos. El sistema de módulos es la principal forma en que los usuarios configuran NixOS y se encuentra en el subdirectorio
nixos/de Nixpkgs.
- La documentación está integrada en gran medida en los datos del sistema de empaquetado y de módulos, aunque también se incluyen archivos Markdown independientes en el repositorio de Nixpkgs. La documentación también abarca el mantenimiento del sitio web, la Wiki y otros aspectos del ecosistema más amplio. Las dos primeras categorías consisten casi exclusivamente en código del lenguaje Nix escrito en archivos de texto, mientras que la última es una combinación de código Nix, archivos Markdown y diversos formatos adicionales.
Todas las contribuciones a Nixpkgs, independientemente de si afectan a NixOS o no, están sujetas a revisión por pares antes de ser integradas en Nixpkgs. Muchos paquetes, junto con documentación y materiales adicionales como imágenes ISO o archivos tar, se compilan previamente en Hydra para reducir el tiempo de actualización para los usuarios de NixOS.
Esas tres categorías son las más grandes en cuanto a volumen de contribuciones; sin embargo, muchos mantenedores también participan en actividades relacionadas con la fundación de NixOS, como el mantenimiento de la infraestructura sobre la que se ejecutan el sitio web, Hydra y otras herramientas, o el desarrollo de herramientas necesarias para NixOS.
| Tipo de desarrollo | Ubicación del desarrollo | Ejemplos |
|---|---|---|
| Empaquetado independiente de la plataforma | Nixpkgs | paquete coreutils , stdenv framework, paquete Libreoffice |
| Herramientas independientes de la plataforma | Nixpkgs y varios repositorios | implementación upstream/default de Nix (CppNix), código fuente de Hydra, bot de integración de Nixpkgs |
| Herramientas de NixOS | mayormente Nixpkgs | Código fuente de nixos-rebuild-ng, ISOs de instalación de NixOS |
| NixOS Sistema de Módulos | Nixpkgs | Configuración del gestor de pantalla, configuración de bases de datos MySQL (y derivadas) |
| Insfraestructura | Infraestructura de esta Wiki, infraestructura de NixOS | |
| Documentación | Esta Wiki, documentación de stdenv, configuración IPv6 de NixOS (visible en la sección IPv6 del manual de NixOS), Guía de contribución de Nixpkgs | |
| Organización Técnica | NixOS RelEng, Nix and NixOS RFCs | |
| Otros | Ilustraciones de NixOS, discurso de NixOS (y relacionados), Fundación NixOS |
Ver también: github.com/NixOS/org Repositorio de la Organización Nix