22 de febrero de 2015

Snappy Ubuntu Core, una manera diferente de gestionar paquetes

Ubuntu anunció hace un tiempo otra versión de Ubuntu: Snappy Ubuntu Core, una especie de equivalente al sistema base de Debian que presenta un nuevo sistema de gestión de software. Su objetivo inicial era presentarlo como plataforma para la nube, más concretamente como plataforma para usar el célebre Docker y así reaccionar frente a CoreOS, que se ha puesto de moda como distro favorita para usar Docker.

Hace alrededor de un mes, Canonical anunció que también promocionarían Snappy Ubuntu Core para la "internet de las cosas" (horripilante expresión que, como ya habrán notado, está de moda), es decir, para sistemas del estilo de Raspberry Pi. La reducción del tamaño, consumo energético y coste de estos sistemas hacen posible empotrar estos sistemas en casi cualquier cosa, y como la flexibilidad de un sistema operativo complejo es infinitamente mayor que el firmware de los circuitos integrados, se prevé que en pocos años empecemos a encontrar estos sistemas en todos lados.

Lo diferente e interesante de Ubuntu Snappy, desde el punto de vista del ecosistema linuxero, es que se deshace por completo del sistema de gestión de paquetes APT. Con toda la literalidad de la expresión. El sistema de gestión de software es el corazón de la identidad de una distro, por lo que estamos ante un cambio importantísimo, y para mi sorpresa muy poco comentado. El cambio es hacia Snappy, un nuevo sistema de gestión de paquetes muy curioso. Snappy es, en concepto, parece ser una imitación y evolución del "updateservicectl" de CoreOS. Técnicamente, es una confluencia de varias tendencias tecnológicas, desde APT al aislamiento de aplicaciones de los teléfonos.


Snappy

Al igual que APT, Snappy (invocado mediante el comando "snappy") consta de repositorios de software. A diferencia de APT, los paquetes no son tal como solemos concebir los paquetes. Existe un paquete llamado "ubuntu-core" que contiene, literalmente, todo el sistema de Snappy Ubuntu Core. Todo. Nada de cientos de paquetes separados, sólo uno para todo el sistema base (es decir, la dirección opuesta a la fisión en infinidad de paquetes que vemos en Debian). Tras el sistema base, existen los "frameworks". Uno de los frameworks posibles es "docker", y es fácil imaginar a "gtk", "qt" o "kde" como ejemplos de otros frameworks que se añadan en el futuro. La finalidad de los frameworks es extender el sistema base.

Luego tenemos las aplicaciones. La diferencia fundamental entre frameworks y aplicaciones es que las aplicaciones están aisladas entre si mediante virtualización con contenedores, y tienen restringido el acceso al sistema de archivos, a la red, a listados de procesos que muestren otros procesos. Una de las consecuencias inmediatas de esta organización es que desaparece el concepto de dependencias al que estamos acostumbrados. Nada de cientos, miles de paquetes, cada uno con una librería, cada uno con su versión, cada uno con sub-dependencias. En Snappy Ubuntu Core, el paquete de sistema y los paquetes de framework son sólo un paquete cada uno, y las aplicaciones sólo pueden depender de frameworks.

La última gran diferencia de este sistema es el carácter transaccional y reversible de las actualizaciones, especialmente las del sistema. Gracias a un extraño sistema con dos particiones, copiado de CoreOS, las actualizaciones de paquetes del sistema se hacen a la partición que no se está utilizando en ese momento, y al arrancar se utiliza la partición con el sistema nuevo. Con "snappy rollback" se puede volver a utilizar la versión anterior del sistema. En el caso de las aplicaciones, se instalan varias aplicaciones en /app/nombredelaapp/1.2.3, y hay un enlace simbólico en /app/nombredelaapp/current a la versión que se desea utilizar.

Por último, destacar el enrevesado proceso de ensamblado de las particiones al arrancar. Las particiones que contienen el sistema son de sólo lectura, no se permite su modificación. Eso hace que sea necesario dedicar una partición extra en la que se almacenan las modificaciones o añadidos a /var o /etc. Es también en esa partición donde se instalan las aplicaciones, y donde se crean los directorios de usuario. Naturalmente, esos juegos de particiones no resultan en un sistema funcional por sí solos,  de ahí que al arrancar el sistema tenga que hacer un total de 28 montajes bind de la partición modificable a varias rutas en /etc y /var del sistema principal no modificable.



Consecuencias de Snappy

Snappy es muy interesante porque logra mezclar la muy razonable decisión de ejecutar todas las aplicaciones en entornos aislados, con los repositorios tradicionales linuxeros, al mismo tiempo que añade funciones que deberían ser estándar, y no meras opciones, en cualquier sistema de paquetes moderno (revertido de actualizaciones) y elimina aspectos de los repositorios linuxeros (miles de paquetes y laberintos de dependencias) que quizás deberíamos empezar a cuestionar.

El dilema que puede surgir frente a snappy es que Snappy puede considerarse como algo bueno. Y no sólo bueno: podría incluso considerarse una evolución de los sistemas de paquetes en Linux, algo superior. Y si Snappy es superior, y logra ser mejor que los sistemas de paquetes tradicionales, la evolución lógica sería que Canonical llegase a sustituir en un futuro (futuro no inmediato) a APT por Snappy, con consecuencias impredecibles. Es difícil prever qué pasará exactamente en el futuro (porque hay varios proyectos compitiendo por hacer lo mismo, como Gnome Apps), pero existe la posibilidad de que haya verdaderas revoluciones en las herramientas de gestión de software en el mundo Linux en los próximos años. Snappy bien puede ser sólo el comienzo de una nueva ola.

4 comentarios:

  1. Aun no me queda del todo claro lo que es Docker, y eso que he estado leyendo todo lo que cae en mis manos desde hace meses, hay muy poca documentación, pero gracias a esto entiendo un poco mejor.

    ResponderEliminar
    Respuestas
    1. https://linuxcontainers.org/

      https://es.wikipedia.org/wiki/LXC

      A ver si con esto sacas algo ;)

      Eliminar
  2. Tuxedoar3:01 p. m.

    Entiendo que una gran motivación detrás de Snappy o Docker, es deshacerse de la complejidad que implica distribuír una aplicación que funcione en muchas distribuciones, sin tener que armar un paquete distinto para cada una, como sucede actualmente.

    Lo que me hace ruido de estos modelos para gestionar aplicaciones, es que se perdería, según entiendo, la ventaja histórica de compartir librerías entre ellas. Comprendo que esto tiene la ventaja de poder olvidarse de un ocasional "infierno de las dependencias", pero tambien implica que cada aplicación será más pesada, cuando se distribuyan vía Docker o Snappy.

    Mi opinión es que puede llegar a ser muy útil para utilizar en casos puntuales, pero no sé si me gustaría como reemplazo al modelo de paquetes que se utiliza actualemente.

    Gracias.

    Saludos!.

    ResponderEliminar
  3. Tuxedoar3:33 p. m.

    Me olvidé de algo: la seguridad en los contenedores está muy cuestionada. Tambien se cuestiona de cosas como Docker, el peligro que implica descargar cosas sin ningún tipo de verificación de la firma, sin advertencia o previo aviso.

    Saludos.

    ResponderEliminar