¿Qué es NIX (NIX)?

Píldoras Nix
Contenidos
Si no quieres depender de glibc, seguro que encuentras una libc alternativa. Esta podría ser musl, diet, o cualquier libc alternativa (incluso bionic en principio). También es muy probable que quieras una estática, para que puedas simplemente soltarlas y desplegarlas.
Usando muslc, estás bastante limitado por las syscalls que proporciona el kernel. Por lo tanto, en un linux muy muy viejo, podría tener problemas. También hay algunos problemas si se utiliza, por ejemplo, el paquete dns de hackage con muslc en los sistemas que estropearon su disposición del sistema de archivos, ver https://github.com/kazu-yamamoto/dns/pull/166
He tenido bastante éxito con ghc-musl + stack + cabal. El proyecto en sí se construye usando stack (cuando sólo se construye en el host), pero con stack2cabal pude conseguir que Cabal construyera el proyecto dentro del contenedor ghc-musl. (No puedo recordar exactamente por qué no pude conseguir Stack trabajando dentro del contenedor). Un poco desordenado en general, pero funciona.
Si necesitas más librerías, está a sólo un “apk add” de distancia – asumiendo por supuesto que las librerías están empaquetadas para Alpine Linux. (No puedo recordar exactamente cuál estoy usando, pero creo recordar que había algunas cosas LDAP y SASL allí, así que cosas decentemente avanzadas).
¿Para qué sirve NixOS?
NixOS es una distribución GNU/Linux que utiliza Nix como gestor de paquetes y de configuración. Cada archivo de configuración se describe como una derivación, y tu sistema es una derivación que depende de todas las aplicaciones y archivos de configuración que hayas especificado.
¿Cómo funciona Nix?
Este medicamento se utiliza para tratar los piojos, unos insectos diminutos que infestan e irritan el cuero cabelludo. Pertenece a una clase de medicamentos conocidos como piretrinas. La permetrina actúa paralizando y matando a los piojos y sus huevos (liendres).
¿Quién utiliza Nix?
Nix ha salido de la “fase de experimento científico”, pero sigue evolucionando. Sin embargo, muchas empresas utilizan Nix en producción hoy en día, por ejemplo, Target, Replit y Shopify. Aunque la complejidad de Nix puede ser desalentadora, sospecho que miraremos atrás dentro de 20 años y nos preguntaremos cómo nos las arreglábamos sin él.
Tutorial Nix
Antes de tocar Haskell, me sentía bastante conocedor del uso de CMake para mis proyectos de C++. Mi mente comenzó a expandirse cuando empecé a aprender tanto la programación funcional como las herramientas que trabajan declarativamente. Espero que este post sea una buena introducción al mundo de Nix para principiantes.
Típicamente cuando se trabaja con Haskell, se usa algo como Stack o Cabal para declarar dependencias y construir el proyecto. Esto funciona muy bien la mayor parte del tiempo, pero a veces se sienten como la espina que me hace reconsiderar el uso de Haskell.
Empecé con Stack ya que es lo que la mayoría de los tutoriales te hacen instalar cuando eres principiante (con buena razón también, ya que es muy agradable). Sin embargo, antes de Stack existía Cabal, que es mucho más sencillo que Stack y se centra en resolver dependencias. Stack introduce cosas como mejores plantillas de proyecto, caché de paquetes construidos y finalmente el uso de Stackage para extraer dependencias.
Cuando mencionamos ‘cabal’ en realidad hay dos cosas a las que nos podemos estar refiriendo: la librería o la herramienta de construcción cabal-install. La biblioteca es utilizada por Stack para ayudar a resolver las dependencias, mientras que cabal-install es reemplazada por Stack. cabal-install extrae las dependencias directamente de Hackage mientras que Stack las extrae de Stackage. Stackage supera a Hackage en uso porque los paquetes son curados para asegurar que las dependencias funcionen entre sí (Hackage Estable).
Manual Nix
Este artículo utiliza URLs desnudas, que son poco informativas y vulnerables a la putrefacción de enlaces. Por favor, considere la posibilidad de convertirlas en citas completas para garantizar que el artículo siga siendo verificable y mantenga un estilo de citación coherente. Hay varias plantillas y herramientas disponibles para ayudar en el formateo, como Reflinks (documentación), reFill (documentación) y Citation bot (documentación). (Agosto 2022) (Aprende cómo y cuándo eliminar este mensaje de plantilla)
Nix es un gestor de paquetes multiplataforma que utiliza un modelo de despliegue puramente funcional en el que el software se instala en directorios únicos generados mediante hashes criptográficos. También es el nombre del lenguaje de programación de la herramienta. El hash de un paquete tiene en cuenta las dependencias, lo que se afirma que elimina el infierno de dependencias,[2] como alternativa a la solución típica de instalar varias versiones de dependencias al mismo tiempo. Este modelo de gestión de paquetes anuncia paquetes más fiables, reproducibles y portables[3][4].
Los paquetes Nix se definen a través de un lenguaje de programación funcional perezoso diseñado específicamente para la gestión de paquetes. Las dependencias se rastrean directamente en este lenguaje a través de un formato intermedio llamado “derivaciones”. Un entorno Nix realiza un seguimiento automático de las referencias, lo que permite que los paquetes no utilizados sean recolectados cuando ningún otro paquete dependa de ellos. A costa de mayores requisitos de almacenamiento, se garantiza que todas las actualizaciones en Nix sean atómicas y capaces de retroceder eficientemente. Esto también permite a varios usuarios instalar software de forma segura en el mismo sistema sin privilegios de administrador.
Entorno de desarrollo Nix
NixOS es una distribución Linux construida sobre el gestor de paquetes Nix. Utiliza configuración declarativa y permite actualizaciones fiables del sistema.[5] Se ofrecen varios “canales” de paquetes oficiales[6][7], incluyendo la versión Estable actual y la versión Inestable que sigue los últimos desarrollos. NixOS cuenta con herramientas dedicadas a DevOps y tareas de despliegue[8][9].
En 2003, Eelco Dolstra comenzó NixOS como un proyecto de investigación.[10][11] En 2015, se fundó la Stichting NixOS con el objetivo de apoyar proyectos como NixOS que implementan el modelo de despliegue puramente funcional.[12]
NixOS publica versiones dos veces al año[13] Esto solía ocurrir alrededor de marzo y septiembre, pero a partir de la 21.05, NixOS tiene como objetivo mayo y noviembre[14] Cada número de versión 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, como “Markhor” para la versión 20.03.
En NixOS, todo el sistema operativo -el núcleo, las aplicaciones, los paquetes del sistema, los archivos de configuración, etc.- es construido por el gestor de paquetes Nix a partir de una descripción en un lenguaje de construcción funcional. Esto significa que la construcción de una nueva configuración no puede sobrescribir configuraciones anteriores[15].