AppImage, Snap y Flatpak…. ¿todos o ninguno?

¿Que eso de AppImage, Snap y Flatpak?¿a mi en que me afecta?¿Es necesario que utilice alguno de esos formatos?¿Los tengo que utilizar todos?¿Cual es el mejor entre AppImage, Snap y Flatpak?¿No puedo quedarme como estoy?

Seguro si utilizas alguna distribución Linux, y probablemente aunque no la utilices también, habrás oído o leído sobre AppImage, Snap y Flatpak. Y es que, en estos últimos tiempos estamos viendo movimientos hacia alguno de estos formatos de distribuir aplicaciones.

En particular Ubuntu abandera snap y de hecho, en su última versión 18.04, ya distribuye algunas aplicaciones directamente en paquetes snap. Por otro lado, Flatpak va de la mano de Red Hat, si bien, no es la única compañía que está detrás de este formato. Por último, AppImage no está soportada por ninguna empresa.

AppImage, Snap y Flatpak

AppImage, Snap y Flatpak

Uno de los problemas actuales en el mundo GNU/Linux es la fragmentación. Fragmentación no solo en lo que a distribuciones se refiere, si no también a entornos de escritorio y por supuesto a la distribución de aplicaciones.

Así existen diferentes formatos en los que se distribuyen las aplicaciones dependiendo de la distribución que utilices. Así por ejemplo, Debian y derivados utilizan .deb, mientras que Red Hat utiliza .rpm. No son los únicos formatos, hay mas, por supuesto…

Para resolver este problema surgen diferentes iniciativas, entre las que se encuentran AppImage, Snap y Flatpak. Vamos a adentrarnos en cada una de ellas. Y para no entrar en favoritismos lo haremos por orden de antigüedad.

AppImage

AppImage es un formato que surge para distribuir aplicaciones en Linux sin la necesidad de instalarlo, y sin necesidad de tener permisos de administrador para su ejecución. Pero no solo esto, sino que se trata de permitir su funcionamiento con independencia de la distribución Linux en la que se ejecute.

Esta forma de distribuir aplicaciones se lanzó por primera vez bajo el nombre de klik, para ser renombrada en 2.011 a PortableLinuxApps y en 2.013 a AppImage que es como lo conocemos ahora.

Una de las características mas significativas de AppImage con respecto a los otros dos formatos, es que no la aplicación no se instala. El archivo AppImage es una imagen de la aplicación, de forma que cuando la ejecutamos se monta en el sistema de archivos en el espacio de usuario. Tan solo tienes que dar permisos de ejecución y hacer doble clic sobre el.

AppImage, no tiene una tienda de aplicaciones desde donde descargarlas. Lo cierto, es que tal y como he explicado, puedes descargarla desde cualquier sitio, darle permisos de ejecución, y ponerla en marcha. Sin embargo, existe un lugar donde encontrar y descargar unos cientos de aplicaciones, se trata de AppImageHub.

Tal como sucede con los otros formatos, se trata de una solución completamente autónoma. Es decir, incluye todas las librerías necesarias para que funcione por si solo.

Uno de los problemas con los que podemos encontrarnos con AppImage es que no se integra con el entorno de escritorio, lo cual es una ventaja o un inconveniente. Sin embargo, opcionalmente, podemos utilizar un demonio, appimaged, que permite de forma sencilla integrar las aplicaciones AppImage con el sistema. Este demonio, se encarga de poner las aplicaciones AppImage en los menús, registrar los tipos MIME, iconos, etc, y todo ello al vuelo. Lo único que necesitarás es descargarlo, pero como digo es algo totalmente opcional.

Por otro lado, para la actualización de aplicaciones, también necesitarás de otro AppImage, en particular de AppImageUpdate. Esta herramienta se encarga de revisar las AppImage que tienes instaladas y actualizarlas en el caso de que exista una actualización.

Snap

Al igual que sucede con Flatpak, los paquetes Snap son gestionados por una herramienta. En este caso, la herramienta es snapd, y es la encargada del despliegue y gestión de paquetes y aplicaciones. Esta herramienta está disponible en varias distribuciones (con mas o menos suerte) y por tanto permite el uso de estos paquetes en estas distribuciones. Y digo que esta disponible con mas o menos suerte, porque depende del grado de aceptación de cada una de las distribuciones, como veremos mas adelante. Respecto a este formato, ya escribí un artículo en su momento, que te recomiendo que leas, Que son los paquetes snap, tiendas y situación actual.

En diciembre de 2.014 Mark Shuttleworth anuncia snappy, cuya primera versión se libera esa mismo mes.

Los snaps no depende de ninguna tienda de aplicaciones. Se pueden obtener de cualquier fuente, descargados e instalados.

A diferencia de Flatpak, con Snap, no solo tienes aplicaciones de escritorio sino también, aplicaciones de línea de comandos como al igual que servicios.

Flatpak

Flatpak surge como idea en 2.013 y es en 2.014 cuando se publica un artículo sobre este formato, que originalmente se llamó xdg-app. Sin embargo, la primera versión se liberó en Julio de 2.016. Se desarrolló como parte del proyecto freedesktop.org.

Flatpak es una herramienta que nos permite desplegar, gestionar y virtualizar aplicaciones en entornos de escritorio Linux. Flatpak está diseñado para funcionar en sesiones de escritorio, en tanto en cuanto utiliza servicios proporcionados por la sesión, como puede ser dbus. Proporciona un entorno aislado del sistema, y donde las aplicaciones que utilizan Flatpak necesitan aprobación de permisos para utilizar determinado hardware o acceder a determinados archivos.

Aunque inicialmente, Flatpak fue implementada por desarrolladores unidos a la comunidad GNOME, la realidad, es que este formato no está atado a ningún escritorio en particular. De hecho, el objetivo principal, de este formato es el de facilitar que el desarrollador pueda construir sus aplicaciones utilizando cualquier librería y lenguaje de programación que quiera.

En febrero de 2.017 algunas de las aplicaciones mas populares en el universo Linux, ya estaban disponibles en este formato, como pueden ser Blender, Gimp o LibreOffice. Actualmente puedes encontrar cientos de aplicaciones disponibles para instalar, utilizando esta tecnología en FlatHub.

Al igual que sucede con el resto de formatos, la ventaja de Flatpak respecto a la forma tradicional de distribuir paquetes, es que con un solo formato, puedes instalar tu aplicación en cualquier distribución. A esto, le tenemos que unir la ventaja de que el desarrollo y prueba de una aplicación es independiente de la distribución e idéntico al que el usuario tendrá.

Eso si, Flatpak, instala una serie de runtime para que los puedan utilizar las aplicaciones. Y en el caso de que alguna dependencia no se encuentre en esos runtime, siempre lo puedes empaquetar en tu aplicación.

Adopción de formatos entre AppImage, Snap y Flatpak

En en diferentes artículos del desarrollador de KDE Markus Slopianka nos da una visión de la situación. En particular, he actualizado su trabajo a Julio de 2.018, indicando las versiones adoptadas por cada una de las distribuciones. Además lo he completado con AppImage, que no está incluido en sus artículos originales, de forma que ahora podemos ver los tres formatos AppImage, Snap y Flatpak en la misma tabla. Para ello, me he basado en que tuvieran appimaged, que es el demonio que permite la integración con el entorno de escritorio. Con todo ello, a continuación puedes encontrar el resumen con los enlaces de la situación en el momento de escribir el artículo,

AppImage Flatpak Snap
Arch Linux No disponible 0.99.2 No disponible
Debian No disponible 0.99.2 2.30
Fedora No disponible 0.99.2 2.33.1
Gentoo No disponible 0.10.4 2.15.2
Mageia No disponible 0.10.3 No disponible
openSUSE 9 0.11.8 2.33.1
RHEL/CentOS No disponible 0.8.8 No disponible
Ubuntu No disponible 0.11.7 2.32.9

Como puedes ver, el soporte a AppImage, en lo que a integración se refiere, no está incluido en ninguna distribución salvo OpenSUSE. Aunque siempre es posible bajarse el AppImage de appimaged. Si bien, y esto es mi opinión, no creo que sea la mejor solución, en cuanto a experiencia de usuario. Creo que esto debería estar integrado en la propia distribución para ayudar al usuario, sobre todo al mas novel, con el uso de aplicaciones.

Por otro lado, en cuanto Flatpak y Snap, la adopción es bastante irregular, en lo referente a versiones, tanto en Flatpak como en Snap. Si bien es cierto que está mas generalizada la adopción de Flatpak por las distribuciones. De todas formas, ten en cuenta que esto es una fotografía de la situación en la que escribí este artículo, es posible, que hoy cuando tu lo estés leyendo sea completamente distinta.

Por otro lado, me llama la atención que haya distribuciones que tenga una versión superior de snapd a la del propio Ubuntu.

Comparativa de características entre AppImage, Snap y Flatpak

A continuación encontrarás una comparativa entre los diferentes formatos. Esta comparativa está basada en la original realizada por AppImage en GitHub. En esta comparativa no se incluyen todas las características del original, y algunas están modificadas, adaptándolas el momento de escribir este artículo.

General

Característica AppImage Snap Flatpak
Aplicaciones de escritorio Si Si Si
Herramientas de terminal Si Si Si
Servicios Si SI No
Aplicación correcta de temas Si No No
Librerías y dependencias En la propia imagen En la propia imagen o con complementos Uso de runtimes de las librerías principales
Soporte Ninguno Canonical Red Hat y otros

Confinamiento

Característica AppImage Snap Flatpak
Sin confinamiento Si Si No
Puede utilizar diferentes confinamientos Si No (solo AppArmor) No (solo Bubblewrap)

Instalación o ejecución

Característica AppImage Snap Flatpak
Ejecutable Si No . Necesita instalación No . Necesita instalación
Sin root Si No. Necesita root para instalar. No. Necesita root para instalar.
Ejecutable desde comprimido Si Si No

Distribución de aplicaciones

Característica AppImage Snap Flatpak
Repositorio central AppImageHub SnapCraft FlatHub
Necesita repositorio No No No
Repositorios individuales No Si Si
Multiples versiones en paralelo Si Si Si

Actualizaciones

Característica AppImage Snap Flatpak
Mecanismo de actualización AppImageUpdate Repositorio Repositorio
Actualizaciones incrementales Si Si Si
Autoactualizaciones Si No No

Tamaño en disco

Característica AppImage Snap Flatpak
Aplicación en disco comprimida Si Si No
LibreOffice 6.0.0 200 MB 200 MB 659 MB

Estas son algunas de las características del artículo original que he indicado anteriormente. Como he comentado, algunas están actualizadas y he omitido otras. Aunque creo que lo mas importante e interesante para ti, está recogido en las características que has podido leer mas arriba.

Conclusiones

Lo que voy a comentar a continuación es mi opinión, que por supuesto, puedes compartir o no. Esta opinión está avalada por mi experiencia en el uso de las tres tecnologías, y por la información que he utilizado para escribir el artículo que estás leyendo.

El problema de la fragmentación de formatos

No estoy a favor de ninguna de las tres tecnologías, AppImage, Snap y Flatpak, y en caso de decantarme por una de ellas sería por AppImage. Y no estoy a favor, porque creo que la forma en la que se crean y distribuyen las aplicaciones actualmente es la mas adecuada, ya sean archivos .deb, .rpm. Y digo que es la manera mas adecuada, en tanto en cuanto, aprovechas las librerías que ya están instaladas en el equipo del usuario, para lo que haces uso de las dependencias. Es decir, se fomenta compartir el uso de librerías. Cualquiera de las tecnologías comentadas, te obliga a empaquetar tu aplicación con el resto de librerías que necesita, creando un paquete significativamente voluminoso. Evidentemente, el problema de esto, son las dependencias y las versiones. Sin embargo, actualmente yo no he tenido problemas, al menos en Ubuntu y Linux Mint, de no poder instalar una aplicación de las que utilizo habitualmente por problemas de dependencias.

Por supuesto, si recurrimos a repositorios de terceros, es muy posible que tengamos estos problemas. Sin embargo, esto es un problema de versionitis, de querer utilizar lo último de lo último, cuando en la mayor parte de los casos, no aprovechamos ni el 80% de las posibilidades que una aplicación nos ofrece. De verdad ¿has probado todos los filtros de GIMP o Inkscape?¿Utilizas el control de versiones de LibreOffice o los estilos?…

Por otro lado, necesitas instalar aplicaciones adicionales para que todo esto sea gobernable tanto en Snap como en Flatpak. En AppImage, al menos de inicio no, pero si quieres una mejor experiencia de usuario, necesitarás instalar el paquete de integración con el escritorio, al menos. Con todo ello, tenemos además unos servicios que están corriendo en segundo plano, y por supuesto consumiendo recursos. Lo cual, en máquinas potentes, no tiene importancia, pero, sin embargo, en máquinas con recursos limitados, puede llegar a ser un problema.

Evidentemente, teniendo en cuenta que las máquinas que utilizamos cada vez son mas potentes y con discos duros cada vez mayores, un forma de resolver el problema de la fragmentación de formatos, gastando mas recursos. Para evitar que tengas un problema de dependencias las metemos todas en el paquete, hacemos correr un demonio para el funcionamiento, otro para las actualizaciones… Y al final de todo, seguimos con el mismo problema de fragmentación de formatos, AppImage, Snap y Flatpak.

¿De verdad que no hay una forma mas simple y elegante de resolver el problema?

Muy bien, pero ¿por que formato me decanto?¿AppImage, Snap y Flatpak?

Yo actualmente, voy a seguir como hasta ahora, es decir utilizando paquetes .deb, eso si desde repositorio. Preferentemente desde los repositorios oficiales de Ubuntu, pero en caso de que no pueda ser, desde repositorios personales PPA. Aunque, eso si, sin perder de vista, ninguna de, las tres tecnologías, AppImage, Snap y Flatpak.

En el caso de que alguna aplicación no esté disponible para Ubuntu, me decantaré primeramente por AppImage, puesto que actualmente no tengo instalado Snap en mi equipo. Y llegado el momento, y si no queda mas remedio me decantaría seguidamente por Snap, por ser lo que fomenta la distribución que utilizo.

Desde mi punto de vista, prefiero AppImage, porque no me obliga a instalar nada mas, ni necesito un demonio funcionando en segundo plano. A menos, claro, que quiera la integración con el sistema o el tema de las actualizaciones.

Como he comentado, actualmente no tengo instalado Snap en mi equipo, por dos razones. Por un lado, porque demora el arranque del equipo y por el otro, consume recursos, aunque no estemos utilizando ninguna aplicación.

Teniendo en cuenta que todas las aplicaciones que necesito están en los repositorios oficiales o en repositorios personales, PPA. Voy servido.

Esto es lo que hago yo, y lo que yo te recomendaría si me preguntaras… Sin embargo, esta es la grandeza del software libre, no existe un solo camino, sino que existen diferentes caminos y soluciones para cada usuario…


Más información,