Los administradores de paquetes proporcionan una forma de empaquetar, distribuir, instalar y mantener aplicaciones en un sistema operativo. Con las modernas aplicaciones de escritorio, servidor e IoT del sistema operativo Linux y los cientos de distribuciones diferentes que existen, se hace necesario alejarse de los métodos de empaque específicos de la plataforma a los métodos independientes de la plataforma. Esta publicación explora 3 herramientas de este tipo, AppImage, Snap y Flatpak, que apuntan a ser el futuro de la implementación y administración de software en Linux. Al final resumimos algunos hallazgos clave.
1. AppImage
AppImage sigue un concepto llamado “One app = one file” (Una aplicación = un archivo). Esto debe entenderse como una AppImage que es un “archivo” independiente regular que contiene una aplicación con todo lo que necesita para ejecutarse en dicho archivo. Una vez que se hace ejecutable, la AppImage se puede ejecutar como cualquier aplicación en una computadora simplemente haciendo doble clic en ella en el sistema de archivos del usuario.
Es un formato para crear software portátil para Linux sin requerir que el usuario instale dicha aplicación. El formato permite a los desarrolladores originales del software (desarrolladores ascendentes) crear una versión independiente de la plataforma y distribución (también llamada binario independiente de la distribución) de su aplicación que básicamente se ejecutará en cualquier versión de Linux.
AppImage ha existido por mucho tiempo. Klik , un predecesor de AppImage, fue creado por Simon Peter en 2004. El proyecto se cerró en 2011 después de no haber pasado la etapa beta. Simon creó un proyecto llamado PortableLinuxApps al mismo tiempo y el formato fue recogido por unos pocos portales que ofrecen software para usuarios de Linux. El proyecto fue renombrado nuevamente en 2013 a su nombre actual AppImage y se ha mantenido un repositorio en GitHub (enlace del proyecto) con todos los últimos cambios al mismo desde 2018.
Escrito principalmente en C y con la licencia MIT desde 2013, AppImage está actualmente desarrollado por The AppImage project. Es una forma muy conveniente de usar aplicaciones como lo demuestran las siguientes características:
- AppImages puede ejecutarse en prácticamente cualquier sistema Linux.
- La filosofía de un archivo, una aplicación significa que la experiencia del usuario es simple y elegante, ya que los usuarios solo necesitan descargar y ejecutar un archivo que satisfaga sus necesidades para usar la aplicación.
- No se requiere acceso de root.
- Sin efecto en el sistema operativo central.
- Un desarrollador puede hacer una AppImage para una versión particular de su aplicación. Cualquier versión actualizada se realiza como una AppImage diferente.
- Lleva tus aplicaciones a donde vaya. Como se mencionó anteriormente, las AppImages son archivos archivados de todos los archivos que requiere una aplicación y se pueden usar sin instalar ni preocuparse por la distribución que utiliza el sistema.
- Además, AppImageKit permite a los usuarios de todos los orígenes crear sus propias AppImages a partir de aplicaciones que ya tienen o para aplicaciones a las que su desarrollador original no les proporciona una AppImage.
AppImage ahora es compatible de forma nativa con una variedad de distribuciones como Ubuntu, Debian, openSUSE, CentOS, Fedora, etc. y otras pueden configurarlo según sus necesidades. AppImages también se puede ejecutar en servidores con funcionalidad limitada a través de las herramientas CLI incluidas.
[/epcl_button]
2. Snappy | Snap
Snappy es un sistema de implementación de software y administración de paquetes como AppImage o cualquier otro administrador de paquetes para esa instancia. Originalmente está diseñado para el ahora desaparecido sistema operativo Ubuntu Touch. Snappy permite a los desarrolladores crear paquetes de software para usar en una variedad de distribuciones basadas en Linux. La intención inicial de crear Snappy y desplegar “snaps” en sistemas basados en Ubuntu es obtener un formato único unificado que pueda usarse en todo, desde dispositivos IoT hasta sistemas informáticos completos que ejecutan alguna versión de Ubuntu y, en un sentido más amplio, Linux.
El desarrollador principal detrás del proyecto es Canonical, la misma compañía que pilotea el proyecto Ubuntu. Si usas Arch o Debian o openSUSE, te resultará fácil instalar el soporte para el administrador de paquetes usando comandos simples en el terminal como se explica más adelante en esta sección.
Snappy tiene los siguientes componentes importantes que conforman todo el sistema administrador de paquetes.
- Snap: es el formato de archivo de los paquetes en sí. Las aplicaciones individuales que se implementan utilizando Snappy se denominan “Snaps“.
- Snapcraft: es la herramienta que permite a los desarrolladores hacer instantáneas (snaps) de sus aplicaciones.
- Snapd: es el demonio de fondo que mantiene todas las instantáneas instaladas en tu sistema. Se integra en el entorno de escritorio y gestiona todos los archivos y procesos relacionados con el trabajo con snaps.
- Snap Store: es una especie de galería en línea que permite a los desarrolladores cargar sus snaps en el repositorio.
El componente snapd está escrito principalmente en C y Golang, mientras que el framework Snapcraft está construido usando Python. Aunque ambos módulos usan la licencia GPLv3, debe tenerse en cuenta que snapd tiene un código patentado de Canonical para sus operaciones del lado del servidor y solo el lado del cliente se publica bajo la licencia GPL.
Al profundizar en los detalles más finos del administrador de paquetes Snappy, se puede observar lo siguiente:
- Los snaps como se indicó anteriormente son exhaustivos y contienen todos los archivos necesarios (dependencias) que la aplicación necesita para ejecutarse. Por lo tanto, los desarrolladores no necesitan hacer diferentes snaps para las diferentes distribuciones a las que apuntan.
- Los paquetes rápidos están diseñados para admitir actualizaciones transaccionales.
- Un punto clave de diferencia entre las instantáneas y las AppImages es cómo manejan las diferencias de versión. Al usar AppImages, las diferentes versiones de la aplicación tendrán diferentes AppImages que te permitirán usar simultáneamente 2 o más versiones diferentes de la misma aplicación al mismo tiempo. Sin embargo, usar snaps significa ajustarse al sistema de actualización transaccional o delta.
- Amplio soporte de las principales distribuciones de Linux y los principales desarrolladores, incluidos Google, Mozilla, Microsoft, etc.
- Snapd, la herramienta de integración de escritorio, permite tomar “snaps” del estado actual de todas las snaps instaladas en el sistema.
- Los snaps están diseñados para ser protegidos durante la operación. Esto proporciona una capa de seguridad y aislamiento muy necesaria para los usuarios.
Por otro lado, las snaps son ampliamente criticadas por centrarse en el modus operandi de Canonical. La mayoría de los compromisos con el proyecto son por parte de empleados o contratistas de Canonical y otros contribuyentes deben firmar un formulario de autorización (CLA).
[/epcl_button]
3. Flatpak
Al igual que Snap/Snappy mencionado anteriormente, Flatpak también es una herramienta de implementación de software que tiene como objetivo facilitar la distribución y el uso del software en Linux. Flatpak se conocía anteriormente como “xdg-app” y se basaba en el concepto propuesto por Lennart Poettering en 2004. La idea era contener aplicaciones en un entorno seguro virtual que permitiera utilizar aplicaciones sin la necesidad de privilegios de root y sin comprometer la seguridad de los sistemas. Alex comenzó a jugar con Klik (que se pensaba que era una versión anterior de AppImage) y quería implementar mejor el concepto. Alexander Larsson quien en ese momento estaba trabajando con Red Hat escribió una implementación llamada xdg-app en 2015 que actuó como un precursor del formato Flatpak actual.
Flatpak salió oficialmente en 2016 con el respaldo de Red Hat, Endless Computers y Collabora. Flathub es el repositorio oficial de todos los paquetes de aplicaciones Flatpak.
Dirigido principalmente a las tres implementaciones de escritorio populares FreeDesktop, KDE y GNOME, el framework Flatpak está escrito en C y funciona con una licencia LGPL. Se puede acceder al repositorio de mantenimiento a través del enlace de GitHub aquí.
A continuación se mencionan algunas características de Flatpak que lo diferencian. Ten en cuenta que las funciones que Flatpak comparte con AppImage y Snappy se omiten aquí.
- Integración profunda en entornos de escritorio Linux populares como GNOME y KDE para que los usuarios puedan simplemente usar Flatpaks usando herramientas de gestión de software gráfico en lugar de recurrir al terminal.
- Compatibilidad directa: los Flatpaks se crean desde cero teniendo en cuenta el núcleo del sistema operativo y los tiempos de ejecución.
- Sandboxing con Bubblewrap: las snaps también están protegidas por defecto, ya que se ejecutan de forma aislada del resto de las aplicaciones que se ejecutan mientras estás usando tu computadora
- Flatpak admite la distribución descentralizada de aplicaciones de forma nativa, sin embargo, el equipo detrás de Flatpak todavía mantiene un repositorio central en línea de aplicaciones/Flatpaks llamado Flathub.
- Acceso modular a través del sandbox. Aunque esta capacidad tiene un gran costo potencial para la integridad del sistema, el marco Flatpak permite que se creen canales a través de la sandbox para el intercambio de información específica desde la sandbox al sistema host o viceversa.
Sin embargo, uno de los aspectos más criticados de Flatpak es su propia función sandbox. Sandboxing es cómo los administradores de paquetes como Snappy y Flatpak implementan características de seguridad importantes. El sandboxing esencialmente aísla la aplicación de todo lo demás en el sistema, lo que solo permite el intercambio de información definido por el usuario desde dentro del sandbox hacia el exterior. La falla con el concepto es que la caja de arena no puede ser inherentemente inexpugnable. Los datos tienen que transferirse eventualmente entre los dos dominios y los simples comandos de Linux pueden simplemente eliminar la restricción de la caja de arena, lo que significa que las aplicaciones maliciosas podrían saltar de dicha caja de arena.
[/epcl_button]
4. Diferencias: AppImage vs Snap vs Flatpak
La tabla adjunta a continuación resume todos los hallazgos anteriores en una comparación concisa y técnica de los tres frameworks.
Característica | AppImage | Snappy | Flatpak |
---|---|---|---|
Característica única | No es una tienda de aplicaciones o repositorio, simplemente pone un formato de empaque para la distribución de software. | Liderado por Canonical (la misma compañía que Ubuntu), presenta un repositorio central de aplicaciones y una contribución activa de Canonical. | Cuenta con una tienda de aplicaciones llamada FlatHub, sin embargo, las personas aún pueden alojar paquetes y distribuirlos. |
Objetivo del sistema | Escritorios y servidores. | Equipos de escritorio, servidores, dispositivos IoT, dispositivos integrados, etc. | Escritorios y funciones limitadas en servidores. |
Bibliotecas / dependencias | Sistema base Tiempos de ejecución opcionales, bibliotecas y otras dependencias empaquetadas. | Sistema base o mediante complementos o se puede empaquetar. | GNOME, KDE, Freedesktop incluido o personalizado. |
Desarrolladores | Impulsado por la comunidad dirigido por Simon Peter. | Corporativo impulsado por Canonical Ltd. | Comunidad impulsada por el equipo de flatpak respaldado por la empresa |
Escrito en | C. | Golang, C y Python | C. |
Versión inicial | 2004 | 2014 | 2015 |
Sandboxing | Puede ser implementado. | 3 modos: estricto, clásico y devmode con diferentes capacidades de confinamiento. Se ejecuta de forma aislada. | Aislado pero utiliza archivos del sistema para ejecutar aplicaciones de forma predeterminada. |
Plataforma de sandboxing | Firejail, AppArmor, Bubblewrap. | AppArmor. | Bubblewrap. |
Instalación de aplicaciones | No es necesario. Actuará como disco auto montado. | Instalación usando snapd. | Instalado utilizando herramientas de cliente flatpak. |
Ejecución de la aplicación | Se puede ejecutar después de configurar el bit de ejecución. | Utilizando herramientas integradas de escritorio. Ejecuciones aisladas con recursos definidos por el usuario. | Debe ejecutarse usando el comando flatpak si se usa CLI. |
Privilegios de usuario | Se puede ejecutar sin acceso de usuario root. | Se puede ejecutar sin acceso de usuario root. | Se requiere selectivamente. |
Aplicaciones de alojamiento | Puede ser alojado en cualquier lugar por cualquiera. | Tiene que ser alojado con servidores Canonical que son propietarios. | Puede ser alojado en cualquier lugar por cualquiera. |
Ejecución portátil desde ubicaciones que no son del sistema | Sí. | No. | Sí, después de configurar el cliente flatpak. |
Repositorio central | AppImageHub. | Snap Store. | Flathub. |
Ejecutando múltiples versiones de la aplicación | Posible, cualquier número de versiones simultáneamente. | Una versión de la aplicación en un canal. Tiene que configurarse por separado para más. | Sí. |
Actualización de aplicaciones | Usando el comando CLI AppImageUpdate o mediante una herramienta de actualización integrada en AppImage. | Requiere snapd instalado. Admite la actualización delta, se actualizará automáticamente. | Se requiere flatpak instalado. Actualización usando el comando de actualización flatpak. |
Tamaños de paquete en disco | La aplicación permanece archivada. | La aplicación permanece archivada. | El lado del cliente no está comprimido. |
Aquí hay una larga comparación tabular de las características de AppImage vs. Snap vs. Flatpak. Ten en cuenta que la comparación se realiza desde una perspectiva de AppImage.
[/epcl_button]
5. Conclusión
Si bien estas tres plataformas tienen mucho en común entre sí y su objetivo es ser un enfoque agnóstico de la plataforma, ofrecen diferentes niveles de competencias en algunas áreas. Si bien los Snaps pueden ejecutarse en una variedad de dispositivos, incluidos los integrados, AppImages y Flatpaks están diseñados pensando en el usuario de escritorio. AppImages de aplicaciones populares por otro lado tenían tamaños de embalaje superiores y portabilidad mientras que Flatpak realmente brilla con su compatibilidad hacia adelante cuando se usa en un conjunto y se olvida del sistema.
Si hay alguna falla en esta guía, háganos saber en la sección de comentarios a continuación. Actualizaremos la guía en consecuencia.
¡Listo! ¡Y básicamente es esto! Sin complicaciones y de forma muy rápida. Sigue visitando nuestro blog y encontrarás más trucos que te harán todo más sencillo. No olvides COMPARTIR el artículo y darle Like a nuestra fanpage de Facebook y/o suscribirte al canal de YouTube.