CD DVD de Nova 2013

Mucho se discute dentro de la comunidad cubana de software libre sobre si Nova es una personalización de Ubuntu o una distribución en toda su concepción. La insistencia de los desarrolladores de este producto cubano en decir que es una distribución, no parece convencer a muchos de sus más firmes detractores que guiados por creencias personales o mero desconocimiento, afirman que Nova es un “Ubuntu con el tema de escritorio remplazado”, por citar una de las frases más suaves de las que emplean.

Independientemente de que es un hecho innegable que la mayor parte de los paquetes que integran los repos de Nova provienen “tal cuales” de los repos de Ubuntu – y de Debian, porque quizás muchos no sepan que hay muchísimos paquetes en Ubuntu que no han sido tocados por sus mantenedores y vienen “tal cuales” de la distro madre – existen razones para asegurar que Nova es una distribución en la plena acepción de la palabra.

¿Qué es un distribución de GNU/Linux?

La acepción más generalizada de qué cosa es una distribución de GNU/Linux plantea que es una construcción de un sistema operativo sobre el núcleo Linux, más las herramientas y bibliotecas de GNU, contando generalmente con un sistema de gestión de paquetes y usualmente compuesta por una gran colección de paquetes de software libre. Según Wikipedia, el software que integra un distribución es usualmente adaptado a esta y rara vez es desarrollado originalmente por sus mantenedores, salvo algunos componentes “pegamento” (glue components) como el instalador del sistema operativo. A esto se le suma que puede estar compilada para distintas arquitecturas de hardware y tipos de dispositivos u orientadas a un propósito específico (embebidos, supercomputadoras, clusters, …), o ser de propósito general.

¿Qué es una personalización de una distribución de GNU/Linux?

Pues no existe una definición exacta de qué cosa es una personalización de una distribución, pero todo el mundo sabe más o menos en qué consiste. Una personalización utiliza siempre el mismo repositorio de la distribución a personalizar, se centra más que todo en la estética y la experiencia de usuario, aunque puede incluir mejoras de rendimiento o funcionalidades mediante la selección de paquetes que se instalan por defecto en el sistema operativo. Rara vez se compila algo y las diferencias estructurales en cuanto al sistema que personalizan son mínimas.

nova-logo

Distribución vs Personalización

Entonces podemos ir resumiendo las características que diferencian a un distribución de una mera personalización.

Criterios Distribución Personalización
Repositorio Generalmente tiene su propio repositorio y una gran cantidad de paquetes mantenidos internamente. Casi todos los paquetes están en el repositorio de la distro origen que se personaliza y muy pocos son mantenidos por los “personalizadores”.
Compilación Se compila mucho. Rara vez se compila.
Selección de paquetes La selección de paquetes es un proceso activo que define la estructura y funcionamiento de la distribución. Se seleccionan algunos paquetes específicos para adaptar la experiencia de usuario o modificar alguna que otra funcionalidad muy específica.
Arquitecturas de Hardware Una distribución tiene libertad para escoger las arquitecturas de hardware que soportará debido a que compila su software. Sólo puede soportar las arquitecturas de hardware que soporte la distro origen que se personaliza.
Nivel de modificaciones en las funcionalidades En una distribución se modifican (o se pueden modificar) activamente las funcionalidades de los paquetes pues se generan a partir de código fuente. Las modificaciones generalmente se logran a través de la instalación o desinstalación de paquetes, y rara vez se modifica el funcionamiento de los mismos.

Pueden seleccionarse otros criterios, pero creo que con estos son suficientes para evaluar a Nova. Si crees que se deban incluir otros puedes enviarnos tus comentarios.

El repositorio de Nova

En base a los criterios anteriores veamos que tanto cumple Nova 2013 con unos o con otros. Empecemos por analizar el repositorio. Desde un inicio nos encontramos con que Nova tiene su propio repositorio, que a pesar de estar hecho para funcionar con el gestor de paquetes apt de Debian, tiene una estructura distinta, al estar compuesto por dos componentes o secciones, principal y extendido. En principal se guardan los paquetes mantenidos por sus desarrolladores y otros paquetes importantes que son necesarios para el correcto funcionamiento de la distribución, mientras que la sección extendido contiene paquetes no mantenidos oficialmente por Nova, sino heredados de Debian y Ubuntu.

Hagamos un análisis de los paquetes de principal. El versionado de los paquetes .deb sigue un estándar respetado por Ubuntu y por Nova, donde después de la versión que le pone el desarrollador original, los mantenedores especifican sus revisiones, donde el primer número establece las revisiones (modificaciones) que le ha hecho el mantenedor de Debian, luego puede venir la palabra ubuntu seguida de un número que representa las revisiones que le ha hecho el mantenedor de Ubuntu. Si el paquete es mantenido/revisado/modificado por Nova, viene luego la palabra nova seguida de un número. Por ejemplo, Nova 2013 se liberó con la versión 1.4-0ubuntu4.1nova1 de WINE, lo cual significa que el software es WINE 1.4, sin revisiones/parches de Debian (0), con las revisiones/parches de Ubuntu versionadas como 4.1, y una revisión/parche de Nova. Estas modificaciones sólo son posibles compilando el paquete con los parches de código fuente que sean pertinentes aplicados previamente. Para obtener el listado de paquetes de la sección principal de la arquitectura i386, se puede descargar el archivo Packages correspondiente con wget. En un terminal, corremos:

$ wget http://novarepo.uci.cu/nova/dists/2013/principal/binary-i386/Packages

Luego, con un poco de grep, podemos filtrar todas las versiones y de estas, las que contienen la palabra nova:

$ grep "Version:" Packages | grep nova

La lista devuelta es bastante extensa, mejor contemos sencillamente, con wc -l, cuantas versiones de paquetes hay allí que contienen la palabra nova:

$ grep "Version:" Packages | grep nova | wc -l

Son alrededor de 380 paquetes modificados por el equipo de Nova sólo en principal, sin contar quizás alguno que esté en extendido u otros que estén en el canal de actualizaciones. Además, tenga en cuenta que muchos paquetes nativos de Nova, es decir, que son creados desde cero por el proyecto, no llevan la palabra nova en su esquema de versionado, porque son paquetes propios. Ejemplo de estos es el paquete nova-keyring, que sólo contiene versión de desarrollo original, sin revisiones.

Nova cuenta con su propio sistema de gestión y construcción de repositorios con el cual compila todos sus paquetes, algo que le permite tener un alto grado de independencia con respecto a Debian y Ubuntu, las distros de las cuales se obtiene la mayoría de su código fuente.

El proceso de creación de una imagen del sistema operativo

La creación de imágenes de distribuciones de GNU/Linux basadas en .deb, se realizan con herramientas específicas que provee Debian. La primera de ellas es debootstrap, que permite crear un sistema base mínimo. A debootstrap, se le pasa la URL del repositorio, el nombre de la distribución, la versión o codename, y la arquitectura, entre otras posibles opciones. Lo interesante en este caso es que el debootstrap que viene con Debian o Ubuntu no sirve para crear una imagen base de Nova, porque no viene preparado para ello, es necesario obtener el debootstrap modificado por Nova que sí entiende qué hay que hacer cuando se le dice que cree una imagen base de Nova 2013. Una personalización partiría de la base Ubuntu o de Debian, así que esto es un punto de menos para la teoría de la personalización. Alguien pudiera pensar que el debootstrap de Nova, cuando se le pide que cree la base de Nova, crea una base idéntica a la de Ubuntu o Debian. No es así. Los paquetes que se instalan son los que han sido seleccionados por el proyecto Nova Base para ser la imagen base de las distintas variantes de Nova. Si se quiere comprobar las diferencias entre el sistema base de Nova y el de Ubuntu, el procedimiento que mostramos a continuación puede ayudar:

Primero nos descargamos e instalamos el debootstrap de Nova:

$ wget http://novarepo.uci.cu/nova/pool/principal/d/debootstrap/debootstrap_1.0.40~ubuntu0.4nova1_all.deb
$ sudo dpkg -i debootstrap_1.0.40~ubuntu0.4nova1_all.deb

Creamos un directorio de prueba en /tmp en el cual escribir las cosas de debootstrap, pero en realidad no crearemos ninguna imagen base, sólo le diremos que nos imprima los .deb que instalaría, tanto para Nova como para Ubuntu. Esas salidas las almacenamos en sendos archivos que luego comparamos con diff:

$ mkdir /tmp/target
$ debootstrap --print-debs --arch=i386 --components=main --no-check-gpg precise /tmp/target http://ubuntu.uci.cu/ubuntu 2>/dev/null | sed 's/ /\n/g' > precise-base-packages.txt
$ debootstrap --print-debs --arch=i386 --components=principal --no-check-gpg 2013 /tmp/target http://novarepo.uci.cu/nova 2>/dev/null | sed 's/ /\n/g' > nova2013-base-packages.txt
$ diff -u precise-base-packages.txt nova2013-base-packages.txt

En la lista que se muestra, los paquetes que tienen un “+” delante son los que pertenecen al sistema base de Nova y no al de Ubuntu, y los que tienen “-” son los que pertenecen al de Ubuntu y no al de Nova. Aunque hay paquetes comunes e incluso Nova incluye en su base paquetes que son nativos de Ubuntu, la selección de una base diferente ya dice mucho. Sobre esta se instala una selección de paquetes que es definida por uno de tres meta-paquetes: nova-desktop, nova-light, nova-server, cada uno correspondiente a cada una de las variantes de Nova que instalan como dependencias a los paquetes seleccionados para cada uno de esos proyectos, entre ellos un núcleo Linux y un entorno de escritorio específicos para cada una de estas variantes. Muchos de esos paquetes han sido modificados por los desarrolladores de Nova para adaptarlos a las necesidades cubanas, así que el nivel de selección y adaptación de los mismos obedecen a requisitos diferentes a los de Ubuntu o Debian, lo cual no quiere decir que la experiencia de usuario y funcionalidades sean radicalmente diferentes a las de todas las variantes de estas dos distribuciones, pero tampoco están completamente atadas a las decisiones de los desarrolladores o comunidades de las mismas.

Conclusiones

A pesar de que Nova reutiliza muchísimo código fuente, no está haciendo otra cosa que cumplir con un principio básico del software libre, la reutilización y no duplicación innecesaria de esfuerzos. La ganancia está en que al tener poder para la toma de decisiones en cuanto a la construcción de la distribución, sus desarrolladores pueden adaptar con facilidad el producto a los requisitos que exijan las instituciones cubanas y los usuarios que se decidan a usarlo.

Partiendo siempre de código fuente, este se puede auditar de distintas formas, ya sea utilizando herramientas automatizadas como la desarrollada por el proyecto Auditoría de Código Fuente (ACF) del Centro de Software Libre (CESOL) de nuestra Universidad de las Ciencias Informáticas (UCI), como por personas y entidades preocupadas por la seguridad informática.

La reutilización de código, la capacidad para la toma de decisiones, contar con herramientas propias que automatizan parte del proceso de desarrollo, la posibilidad de auditar el código fuente, son las premisas que sustentan las bases tecnológicas/filosóficas/sociológicas/políticas que definen la existencia de esta distribución cubana de GNU/Linux Nova: soberanía tecnológica, seguridad, sostenibilidad y socio-adaptabilidad más conocidas en nuestro entorno como las 4S.