GNU Guix ( / ɡ iː k s / [3] ) es un administrador de paquetes multiplataforma y una herramienta para crear instancias y administrar sistemas operativos similares a Unix, basado en el administrador de paquetes Nix con API de Guile Scheme y se especializa en proporcionar software exclusivamente gratuito. . [4] GNU Guix es el administrador de paquetes predeterminado de la distribución GNU Guix System Linux .
Lanzamiento estable | |
---|---|
Repositorio | |
Escrito en | Esquema de guile , C ++ ( núcleo Nix ) |
Licencia | GPLv3 + |
Sitio web | guix |
A diferencia de los administradores de paquetes tradicionales , Guix (como Nix) utiliza un modelo de implementación puramente funcional donde el software se instala en directorios únicos generados a través de hashes criptográficos . Las dependencias de cada software se incluyen dentro de cada hash. [5] [6] Esto resuelve el problema del infierno de la dependencia , [7] facilita actualizaciones y degradaciones, y hace que los paquetes sean portátiles y reproducibles . La realización de cálculos científicos en una configuración de Guix se ha propuesto como una respuesta prometedora a la crisis de replicabilidad . [8]
Los paquetes de Guix se definen a través de API funcionales de Guile Scheme diseñadas específicamente para la gestión de paquetes. Las dependencias se rastrean directamente en este lenguaje a través de valores especiales llamados "derivaciones" que son evaluados por el demonio de Guix de forma perezosa . Guix realiza un seguimiento de estas referencias automáticamente para que los paquetes instalados puedan recolectarse basura cuando ningún otro paquete depende de ellos. A costa de mayores requisitos de almacenamiento, se garantiza que todas las actualizaciones en Guix serán tanto atómicas como revertidas de manera eficiente. Esto también permite que varios usuarios instalen software de forma segura en el mismo sistema sin privilegios de administrador. Los requisitos de almacenamiento adicionales se traducen en un mayor uso de ancho de banda cuando se descargan sustitutos binarios en comparación con los administradores de paquetes tradicionales. Si el usuario elige construir todo desde la fuente, se requiere un espacio de almacenamiento y un ancho de banda aún mayores.
El desarrollo de GNU Guix está entrelazado con GNU Guix System (hasta Guix 1.0: Guix System Distribution [GuixSD]), [9] un sistema GNU completo instalable que utiliza el kernel Linux-libre y el sistema de inicio GNU Shepherd . [10] [11]
La función de reversión de Guix se hereda del diseño de Nix y no se encuentra en ninguno de los administradores de paquetes nativos de distribuciones populares de Linux como Debian y sus derivados, Arch Linux y sus derivados, ni en otras distribuciones importantes como Fedora. , CentOS u OpenSUSE. Sin embargo, el administrador de paquetes de Guix se puede utilizar en tales distribuciones y está disponible para Debian. [12]
El proyecto está coordinado a través de Internet por un equipo de voluntarios y está incorporado en la organización sin fines de lucro francesa Guix Europe con miembros de la comunidad. [13]
La tienda
Heredado del diseño de Nix, la mayor parte del contenido del administrador de paquetes se guarda en un directorio / gnu / store donde solo el demonio Guix tiene acceso de escritura. Esto se logra a través de montajes de enlace especializados, donde la Tienda como un sistema de archivos se monta de solo lectura , lo que prohíbe la interferencia incluso del usuario root, mientras que el demonio Guix vuelve a montar la Tienda como de lectura / escritura en su propio espacio de nombres privado. Guix habla con este demonio para construir cosas o buscar sustitutos que se guardan en la tienda. Se desalienta a los usuarios de tocar manualmente la tienda volviéndola a montar como modificable, ya que esto anula todo el propósito de la tienda.
Recolección de basura
Guix, como Nix, tiene instalaciones integradas de recolección de basura para ayudar a podar los artículos muertos de la tienda y mantener los vivos . [14]
Definiciones de paquete
Este es un ejemplo de una definición de paquete para hello-package:
( define-public hello ( package ( name "hello" ) ( version "2.10" ) ( source ( origin ( method url-fetch ) ( uri ( string-append "mirror: // gnu / hello / hello-" version ". tar.gz " )) ( sha256 ( base32 " 0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i " )))) ( build-system gnu-build-system ) ( sinopsis " Hola, mundo GNU: Un ejemplo de paquete GNU " ) ( descripción " GNU Hola "¡Hola, mundo! \" Y luego sale. Sirve como ejemplo de las prácticas de codificación estándar de GNU. Como tal, admite argumentos de línea de comandos, varios idiomas, etc. " ) ( página de inicio " https: // www.gnu.org/software/hello/ " ) ( licencia gpl3 + )))
Está escrito usando Guile. Las recetas del paquete se pueden inspeccionar fácilmente (ejecutando, por ejemplo, guix edit hello ) y cambiarse en Guix, lo que hace que el sistema sea transparente y muy fácil de piratear.
Actualizaciones transaccionales
Heredado del diseño de Nix, toda manipulación de los elementos de la tienda es independiente entre sí, y los directorios de la tienda comienzan con un hash codificado en base32 del código fuente de la derivación junto con sus entradas.
Perfiles
El paquete Guix utiliza generaciones de perfiles, que son una colección de enlaces simbólicos a elementos específicos de la tienda que comprenden lo que el usuario ha instalado en el perfil. Cada vez que se instala o elimina un paquete, se creará una nueva generación.
Por ejemplo, el perfil de un usuario que solo instaló GNU Hello contiene enlaces al elemento de la tienda que contiene la versión de hello instalada con el guix utilizado actualmente.
Por ejemplo, en la versión c087a90e06d7b9451f802323e24deb1862a21e0f de guix, esto corresponde al siguiente elemento: /gnu/store/md2plii4g5sk66wg9cgwc964l3xwhrm9-hello-2.10 (construido a partir de la receta anterior).
Además de los enlaces simbólicos, cada perfil que crea guix también contiene una unión de todos los manuales de información, páginas de manual, iconos, fuentes, etc. para que el usuario pueda navegar por la documentación y tener acceso a todos los iconos y fuentes instalados.
Los enlaces simbólicos predeterminados a las generaciones de perfiles se almacenan en / var / guix en el sistema de archivos.
Varios perfiles de usuario
El usuario puede crear cualquier número de perfiles invocando el paquete guix -p PROFILE-NAME COMMAND . A continuación, se creará un nuevo directorio con el nombre del perfil y los enlaces simbólicos de generación de perfiles en el directorio actual.
Retroceder
El paquete Guix permite la reversión instantánea a una generación de perfil anterior mediante el cambio del enlace simbólico a una generación de perfil anterior. [15] Los perfiles también se almacenan en la tienda, por ejemplo, este elemento es un perfil que contiene hello arriba: / gnu / store / b4wipjlsapvnijmbawl7sh76087vpl4n-profile (construido y activado al ejecutar guix install hello ).
Ambiente
El entorno Guix permite al usuario ingresar fácilmente a un entorno donde todos los paquetes necesarios para el desarrollo de software están presentes sin obstruir el perfil predeterminado del usuario con dependencias para múltiples proyectos. [dieciséis]
Por ejemplo, al ejecutar el entorno guix hello entra en un entorno desechable donde está presente todo lo necesario para compilar hello en guix (gcc, guile, etc.).
Entorno de desarrollo persistente
Si desea un entorno persistente con raíz de gc que no se recolecte como basura en la próxima ejecución de guix gc, puede crear una raíz:
Por ejemplo, ejecutando el entorno de guix --root = hello-root hello entra en un entorno donde todo lo necesario para compilar guix está presente (gcc, guile, etc.) y registrado como root en el directorio actual (mediante enlace simbólico a los elementos de la tienda) .
Paquete
El paquete Guix permite al usuario agrupar elementos de la tienda y enviarlos como una imagen binaria de la ventana acoplable, un tarball reubicable o un binario de squashfs. [17]
Grafico
El gráfico Guix permite al usuario ver diferentes gráficos de los paquetes y sus dependencias. [18]
Sistema Guix (sistema operativo)
El sistema GNU Guix usa Guix como su administrador de paquetes y sistema de configuración, similar a cómo NixOS usa Nix .
Historia
El Proyecto GNU anunció en noviembre de 2012 el primer lanzamiento de GNU Guix, un administrador de paquetes funcional basado en Nix que proporciona, entre otras cosas, API de Guile Scheme . [19] El proyecto fue iniciado en junio de 2012 por Ludovic Courtès, uno de los hackers de GNU Guile. [20] El 20 de agosto de 2015, se anunció que Guix se había portado a GNU Hurd . [21]
Lanzamientos
El proyecto no tiene un calendario de lanzamiento fijo y hasta ahora se ha lanzado aproximadamente cada 6 meses.
Versión | Anuncio | Arquitecturas compatibles | Paquetes |
---|---|---|---|
0.1 (alfa) | Courtès, Ludovic (18 de enero de 2013). "GNU Guix 0.1 lanzado (alfa)" . | i686, x86_64 | ~ 150 |
0,2 (alfa) | Courtès, Ludovic (12 de mayo de 2013). "GNU Guix 0.2 lanzado (alfa)" . | ~ 400 | |
0,3 | Courtès, Ludovic (17 de julio de 2013). "GNU Guix 0.3 lanzado" . | ~ 430 | |
0.4 | Courtès, Ludovic (27 de septiembre de 2013). "GNU Guix 0.4 lanzado" . | ~ 490 | |
0,5 | Courtès, Ludovic (11 de diciembre de 2013). "GNU Guix 0.5 lanzado" . | ~ 600 | |
0,6 | Courtès, Ludovic (9 de abril de 2014). "GNU Guix 0.6 lanzado" . | ~ 691 | |
0,7 | Courtès, Ludovic (25 de julio de 2014). "GNU Guix 0.7 lanzado" . | ~ 825 | |
0,8 | Courtès, Ludovic (18 de noviembre de 2014). "GNU Guix 0.8 lanzado" . | i686, x86_64, mips64el | ~ 987 |
0.8.1 | Courtès, Ludovic (29 de enero de 2015). "GNU Guix 0.8.1 lanzado" . | i686, x86_64, mips64el, armv7 | ~ 1151 |
0.8.2 | Courtès, Ludovic (14 de mayo de 2015). "GNU Guix 0.8.2 lanzado" . | ~ 1869 | |
0.8.3 | Courtès, Ludovic (22 de julio de 2015). "GNU Guix 0.8.3 lanzado" . | ~ 2048 | |
0.9.0 | Courtès, Ludovic (5 de noviembre de 2015). "GNU Guix 0.9.0 lanzado" . | ~ 2591 | |
0.10.0 | Courtès, Ludovic (29 de marzo de 2016). "GNU Guix & GuixSD 0.10.0 lanzado" . | ~ 3230 | |
0.11.0 | Courtès, Ludovic (3 de agosto de 2016). "GNU Guix & GuixSD 0.11.0 lanzado" . | ~ 3714 | |
0.12.0 | Wurmus, Ricardo (21 de diciembre de 2016). "GNU Guix & GuixSD 0.12.0 lanzado" . | ~ 4567 | |
0.13.0 | Courtès, Ludovic (22 de mayo de 2017). "GNU Guix & GuixSD 0.13.0 lanzado" . | i686, x86_64, mips64el, armv7, aarch64 | ~ 5407 |
0.14.0 | Courtès, Ludovic (7 de diciembre de 2017). "GNU Guix & GuixSD 0.14.0 lanzado" . | ~ 6618 | |
0.15.0 | Courtès, Ludovic (6 de julio de 2018). "GNU Guix & GuixSD 0.15.0 lanzado" . | ~ 7857 | |
0.16.0 | Courtès, Ludovic (6 de diciembre de 2018). "GNU Guix & GuixSD 0.16.0 lanzado" . | ~ 8715 | |
1.0.0 | Courtès, Ludovic (2 de mayo de 2019). "GNU Guix 1.0.0 lanzado" . | ~ 9712 | |
1.0.1 | Courtès, Ludovic (19 de mayo de 2019). "GNU Guix 1.0.1 lanzado" . | ~ 9771 | |
1.1.0 | Courtès, Ludovic (15 de abril de 2020). "GNU Guix 1.1.0 lanzado" . | i686, x86_64, armv7, aarch64 | ~ 13161 |
1.2.0 | Courtès, Ludovic (23 de noviembre de 2020). "GNU Guix 1.2.0 lanzado" . | ~ 15333 | |
1.3.0 | Courtès, Ludovic (11 de mayo de 2021). "GNU Guix 1.3.0 lanzado" . | i686, x86_64, powerpc64le, armv7, aarch64 | ~ 17262 |
Ver también
- Sistema GNU Guix
- Debian GNU / Hurd
- Comparación de distribuciones de Linux
- NixOS : un sistema operativo similar, que inspiró a GNU Guix [22]
Referencias
- ^ "GNU Guix 1.3.0 lanzado" . 11 de mayo de 2021 . Consultado el 11 de mayo de 2021 .
- ^ Ludovic Courtès (23 de noviembre de 2020). "GNU Guix 1.2.0 lanzado" . Consultado el 24 de noviembre de 2020 .
- ^ "Manual de referencia de GNU Guix" . www.gnu.org . Consultado el 23 de abril de 2018 .
- ^ Ludovic Courtès (2013). "Gestión de paquetes funcionales con Guix" . Madrid , España : European Lisp Symposium.
- ^ Dolstra, E., de Jonge, M. y Visser, E. "Nix: un sistema seguro y sin políticas para la implementación de software". En Damon, L. (Ed.), 18ª Conferencia de administración de grandes sistemas de instalación (LISA '04) , páginas 79–92, Atlanta, Georgia, EE. UU. USENIX, noviembre de 2004.
- ^ Dolstra, E. El modelo de implementación de software puramente funcional. Tesis doctoral, Facultad de Ciencias, Utrecht, Países Bajos. Enero de 2006. ISBN 90-393-4130-3 .
- ^ Prins, P., Suresh, J. y Dolstra, E., "Nix corrige el infierno de la dependencia en todas las distribuciones de Linux", archivado el 26 de diciembre de 2008 en Wayback Machine linux.com , el 22 de diciembre de 2008
- ^ Konrad Hinsen. `` Computación por etapas: la técnica que no sabías que estabas usando. '' Computación en ciencia e ingeniería 22, 99-103 (2020). doi: 10.1109 / MCSE.2020.2985508. https://hal.archives-ouvertes.fr/hal-02877319
- ^ "¿Cómo llamar a Guix?" (Lista de correo). gnu-system-discus. 2015-01-15.
- ^ Interfaz de programación (Manual de referencia de GNU Guix)
- ^ Guix: un nuevo administrador de paquetes y distribución GNU - Phoronix
- ^ https://tracker.debian.org/pkg/guix
- ^ "guix-europa" . git.savannah.gnu.org . Consultado el 16 de mayo de 2019 .
- ^ "Invocando guix gc" . gnu.org . Consultado el 16 de mayo de 2019 .
- ^ "Invocando paquete guix" . gnu.org . Consultado el 16 de mayo de 2019 .
- ^ "Invocando entorno guix" . gnu.org . Consultado el 16 de mayo de 2019 .
- ^ "Invocando paquete guix" . gnu.org . Consultado el 16 de mayo de 2019 .
- ^ "Invocación de gráfico guix" . gnu.org . Consultado el 16 de mayo de 2019 .
- ^ Courtès, Ludovic (23 de noviembre de 2012). "Presentación de GNU Guix" (lista de correo). gnu-system-discus.
- ^ Stallman, Richard (5 de junio de 2012). "Una distribución GNU" (lista de correo). gnu-system-discus.
- ^ Ragkousis, Manolis (20 de agosto de 2015). "[Actualización de GSoC] Portando Guix a GNU / Hurd" (lista de correo). guix-devel . Consultado el 20 de agosto de 2015 .
- ^ "Acerca de - GuixSD" . www.gnu.org . Consultado el 3 de mayo de 2018 .
enlaces externos
- Página web oficial
- Sistema Guix en DistroWatch
- Lista de paquetes de Guix