En esta entrevista aprenderás más sobre el gestor de paquetería Guix y la distribución GNU Guix de mano de un colaborador del proyecto llamado Ekaitz Zárraga

El mundo del software libre está lleno de pequeños proyectos que nacen y se desarrollan convirtiéndose después en un gran proyecto detrás del cual participan un gran número de personas que le dan soporte técnico, lo mejoran y lo mantienen en el tiempo.
Entre esos proyectos, hace tiempo que vengo leyendo cosas de Guix, un gestor de paquetes de software libre para sistemas GNU, y también con el tiempo se ha desarrollado una distribución «rolling release» de GNU/Linux que incluye Guix como sistema de paquetería (como no podía ser de otra manera) y el kernel libre linux-libre sin blobs privativos.
Pero a pesar de que por la red puedes encontrar información al respecto, no me termina de queda claro en qué consiste eso de Guix, así que lo mejor es buscar información de primera mano, y preguntar a alguien que sabe y que tiene la amabilidad de emplear un poco de su tiempo en contestarte.
Y para estos menesteres, no he encontrado a nadie mejor que a Ekaitz Zárraga un desarrollador que participa de alguna manera en el proyecto. Sus respuestas sin duda serán muy esclarecedoras y me (nos) ayudará a entender mejor qué es eso de Guix.
A Ekaitz lo podréis en el fediverso y también contactar con el, en la página web de su empresa ElenQ de i+D ética y comprometida con el software libre.
ElenQ Technology es una empresa de Investigación y Desarrollo. Lo que
significa que aprendemos para ti y te damos el conocimiento de vuelta de modo
que puedas usarlo de forma libre.
Empezamos con la entrevista, espero que os resulte tan interesante y aprendáis tanto como he aprendido yo con las respuestas de Ekaitz.
Victorhck: Hola Ekaitz, lo primero agradecerte tu tiempo por ofrecerte a responder a estas preguntas. La primera pregunta que hago, sirve para poner en contexto, así que, háblanos un poco sobre ti y cual es tu relación con el proyecto Guix.
Ekaitz: ¡Hola! Hace unos años un amigo mío me habló de Nix y NixOS, proyectos en los que Guix se basa, y me generó interés. Poco después lo probé como sistema de paquetería y desde hace unos años lo utilizo como distribución. Desde entonces participo activamente enviando paquetes y parches de vez en cuando, todo lo que puedo.
Por otro lado, trabajo en el sistema de Bootstrap (más adelante cuento qué es esto) de Guix para RISC-V. El último año (2022) recibí fondos de la organización NlNet para dedicarme profesionalmente a ello.
También soy un miembro activo de la comunidad, aunque no soy un experto en su funcionamiento, intento estar al día en la medida de lo posible.
Vhck: Como persona conocedora del proyecto, la primera pregunta sería ¿Cómo explicarías con tus palabras qué es eso de Guix a una persona como yo que ha leído varias cosas pero no tiene un concepto claro?
Ekaitz: Guix System es una distribución de GNU/Linux bastante especial, cuyo funcionamiento gravita entorno el sistema de paquetes Guix.
Las ideas detrás de Guix vienen de Nix (gestor de paquetes) y NixOS (la distribución en basada en el gestor de paquetes). Estas ideas son bastante innovadoras, una maravilla de la ingeniería de software.
Nix se define a sí mismo como un gestor de paquetes «funcional», en el sentido de la «programación funcional». Pero no sé cómo de agradable es esa definición para un ser humano normal.
Podemos decir que los paquetes instalados mediante estas herramientas se instalan de modo que puede volverse atrás (rollback) sin romper el sistema. Además, los paquetes de estas herramientas se describen de tal forma que son «replicables».
En las distribuciones clásicas como Debian o RedHat, los paquetes almacenan un conjunto de archivos ya compilados y unos metadatos que indican dónde deben instalarse. En Nix y en Guix los paquetes son una descripción de qué se debe hacer a partir del código fuente y las dependencias de un paquete para construir el programa final. Esta descripción está hecha de modo que en dos máquinas diferentes se produce exactamente el mismo resultado: el proceso se puede replicar independientemente del entorno.
La distribución además aporta una forma declarativa de describir las máquinas. Toda la configuración de la máquina se puede añadir en un archivo (los paquetes instalados, los usuarios, la configuración de red, etc.) que permite llevar la configuración a otras máquinas fácilmente pudiendo reproducir la configuración de una máquina en otras de forma sencilla. También, igual que con los paquetes, si actualizamos la máquina y falla, podemos volver atrás sin ningún problema.
Este concepto de la «replicabilidad» es fundamental para evitar casos como el clásico «it works in my machine» (funciona en mi máquina), y sobre todo primordial en entornos como la ciencia, donde poder replicar estudios científicos para comprobar sus resultados es cada vez más difícil.
Para poder aplicar estos conceptos (y algún otro) Nix y NixOS utilizan un lenguaje de programación propio (llamado Nix) que está basado en Haskell y es bastante complejo. Para simplificar esto, hace unos años (unos 10) Ludovic Courtès tuvo la brillante idea de sustituir el lenguaje Nix por Guile y crear así Guix. Una distribución y un gestor de paquetes que mantienen la misma esencia pero usan un lenguaje más cómodo para nosotros.
Vhck: Si Guix es un gestor de paquetes de software ¿Podría utilizarse este gestor en cualquier distribución de GNU/Linux, sustituyendo o conviviendo con el gestor propio de la distribución? Si es así ¿Cual serían los beneficios de usar Guix frente al gestor nativo?
Ekaitz: Sí, es posible instalar sólo el gestor de paquetes sobre tu distribución de GNU/Linux habitual.
Desde hace poco además, ¡es posible hacer apt install guix
en Debian!
Este gestor de paquetes aportaría las ventajas que he mencionado antes, poder volver atrás si algo se rompe y que los paquetes sean replicables, pero aporta también otras muy interesantes.
En Debian, por ejemplo, es difícil tener instaladas dos versiones de la misma librería, porque se pisan entre ellas. En Guix esto es pan comido.
Guix permite definir perfiles, que cada uno describe un set de paquetes disponibles. Al pasar de un perfil a otro, los paquetes disponibles cambian sin que ocurran colisiones.
Del mismo modo, es posible crear perfiles bajo demanda con el comando guix shell
, capaz de levantar una shell con el set de paquetes que le pidas. Esto es especialmente útil en proyectos de desarrollo de software, ya que te permite usar las dependencias de cada proyecto en éste, sin mezclarlas con tu sistema. Al salir de la shell, los paquetes usados como dependencias desaparecen, y no se mezclan con tu sistema.
Muchos gestores de paquetes de lenguajes de programación como npm
en JavaScript o pipenv
(o virtualenv
) en Python te aportan un sistema similar para gestionar entornos de desarrollo, pero Guix es mucho más potente, ya que no se limita a un lenguaje. Además, el hecho de que Guix sea replicable lo hace más potente que los lockfiles que estos sistemas utilizan.
Yo, como me dedico a la investigación y el desarrollo, trabajo en muchos proyectos al mismo tiempo y necesito poder levantar entornos de desarrollo rápidamente sin manchar mi sistema. Guix me lo regala.
La «replicabilidad» se puede combinar con la habilidad de Guix para viajar en el tiempo. Es posible «sacar una foto» del entorno de trabajo y compartirla en tu proyecto de software de modo que aunque pasen años cualquiera con Guix pueda volver a ese punto en el pasado y preparar un entorno de trabajo como si estuviera en tu ordenador. Los paquetes que usará serán idénticos a los que tú en su día instalaste: idénticos bit por bit.

Vhck: Además de un gestor de paquetes, el proyecto Guix también ha desarrollado una distribución de GNU/Linux que ofrece únicamente software libre y que está recomendada por la FSF dentro de su lista de distribuciones libres. Entiendo que usas Guix como distro en tu día a día ¿qué ventajas encuentras en Guix frente a otras distribuciones más conocidas? ¿La recomendarías a otras personas que estén familiarizadas con GNU/Linux y quieran probar algo nuevo?
Ekaitz: Guix es una distribución muy gratificante pero a veces difícil de usar. Para poder aplicar toda su magia tiene algunas limitaciones. Yo la recomendaría, pero hay que aprender algunos conceptos antes. La documentación está muy bien para esto.
Las ventajas que aporta son para mí geniales: nunca te va a pasar eso que pasa con Arch que actualizas y rompes cosas y ya no puedes volver atrás. Siempre vas a poder revertir los cambios. Es tan fácil como seleccionar tu configuración anterior en GRUB en el momento del arranque.
El hecho de poder configurar tu máquina en un archivo de texto es muy poderoso. La puedes gestionar con Git y así ves cómo vas avanzando y añadiendo cosas. Mi configuración está online por si queréis verla.
La replicabilidad de los paquetes también es una manera de asegurarte de que lo que instalas no está corrupto. Los repositorios de paquetes de Guix te entregan los paquetes ya compilados (lo que se conoce como substitutes) pero la distribución está basada en código fuente (como Gentoo). El gestor de paquetes siempre te da la opción de retar a los paquetes que te descargas ya compilados: los compilas tú mismo y compruebas si lo que descargarías es igual que cuando lo compilas tú. Así no te la juegan.
El tema de que Guix sea 100% software libre es muy guay pero a veces da problemas con el hardware, como puede pasar con Trisquel u otras distros. Hay gente (se llaman NonGuix) que ha creado un channel (un repositorio independiente) con drivers privativos por si queréis probarlo y tenéis miedo de
que no funcione en vuestra máquina.
Vhck: ¿Cual sería la característica (o grupo de características) particular de Guix que la diferencia de alguna manera del resto?
Ekaitz: Además de lo que he mencionado, en Guix se toma especialmente en serio el no
tener que confiar en nadie. Que todo sea transparente.
Aquí entra el concepto del bootstrapping, que es un tema en el que yo he estado trabajando.
Cuando instalamos una distribución de GNU/Linux como Debian, en el pincho USB se instalan un montón de binarios grandes: Bash, GCC, Python… ¿Pero esos binarios de dónde vienen?¿Podemos confiar en que hagan lo que dicen?
En Guix se ha reducido el número de binarios en los que se confía. Partimos desde código fuente y vamos compilando las cosas una a una, incluso los propios compiladores, para no tener que confiar en ellos. Es un proceso apasionante, y nos permite poder auditar todo desde el principio, sin tener que confiar en nadie.
Esto no tendría sentido sin todas las otras cosas bonitas que nos da Guix, siendo la fundamental la «reproducibilidad».
Sé que es un poco loco todo esto. Si queréis saber más tanto Jan Nieuwenhuizen (janneke) como yo mismo hemos hablado sobre esto en FOSDEM y tenéis la página del proyecto bootstrappable.org para saber más sobre el tema.
Vhck: ¿Guix la podríamos comparar a distros como Arch en lo relacionado a la hora de construir la distro en la que nos da libertad para construirla a nuestro gusto o a distros en las que ya vienen muchas cosas predeterminadas?
Ekaitz: Guix viene con prácticamente cero cosas.
Hay varias configuraciones por defecto que se pueden elegir y extender: desde entornos de escritorio como gnome (estamos trabajando en añadir KDE) a cosas mínimas para el lado de servidor.
Guix define un set de componentes en lo que se conoce como servicios (services) y cada uno te aporta una cosa. En función de los que añadas puedes tener un sistema más complejo o más simple: tú eliges.
Vhck: ¿Cual es la configuración de tu Guix? ¿Qué entorno de escritorio utilizas y a grandes rasgos cómo usas tu sistema?
Ekaitz: Yo tengo GNOME instalado en mi sistema porque KDE aún no está disponible del todo (pronto, ¡pronto!). Pero casi nunca entro en el GNOME, sino que lo utilizo para que me aporte un set de programas mínimamente útil.
Yo uso i3 y una terminal para casi todo. Soy bastante minimalista con el software que utilizo.
Mi configuración está online pero también os adelanto que no soy un ejemplo a seguir. Yo odio configurar cosas y se me da fatal (lo uno es la consecuencia de lo otro 🙂 ).
Usar Guix me ayuda a no tener que hacerlo a menudo y una vez funciona me aseguro que nada se
rompe.
Vhck: Personalmente ¿qué te enganchó de Guix? ¿Cómo empezaste a participar en el proyecto y en qué colaboras?
Ekaitz: Para mí lo más potente de Guix es poder usar entornos de trabajo aislados de mis sistema, incluso pudiendo usar contenedores para ello. Como te comentaba antes, necesito colaborar en muchos proyectos de software y poder evitar que sus dependencias colisionen con mi sistema es fundamental en mi trabajo.
Empecé porque me hablaron de Nix y a mí me gustaba Scheme, y siendo Guile el Scheme de GNU no podía evitar tirar por esta versión más amigable de Nix. Los Lisperos somos así.
El proyecto también me enganchó por su comunidad, que es muy agradable, y porque es fácil contribuir con paquetes o incluso mantener los tuyos propios.
Hoy en día colaboro mandando paquetes o actualizándolos, aunque también he colaborado creando un build system entero para Zig (que nos permitirá paquetizar software de Zig en el futuro) y he trabajado también, como te comentaba, en el proceso de Bootstrapping para RISC-V.
Vhck: De nuevo agradecerte tu tiempo por responder estas preguntas, la última palabra es tuya
Ekaitz: Es un placer. Yo estoy encantado de compartir cosas interesantes con los demás.
Si alguien tiene dudas o quiere empezar, que me busque en el fediverso, me escriba un email o me mencione en IRC en #guix
(libera.chat). No estoy demasiado activo en el IRC pero intentaré ayudar en lo que pueda.
¿Te ha gustado? ¿Has aprendido algo más o descubierto qué es eso de Guix? Quizás ahora sientas la necesidad de probar todas esas cualidades de Guix de las que nos habla Ekaitz en tu propia máquina y ¡quizás sea tu nueva distribución!
Agradecer de nuevo a Ekaitz el tiempo que ha empleado y sus conocimientos para una comunidad.

Gracias, muy interesante. Tengo que probarlo 🙂
Epa!
Gracias robotico por pasarte y comentar (se agradece)
Creo que Ekaitz ha explicado muy bien los conceptos!!
Saludos.