¿Qué es flatpak?
Es conveniente y merecido que Flatpak tenga un post especialmente dedicado a él, más allá de su interacción con polkit que dejamos planteado en el post anterior.
Brevísimo repaso histórico
En agosto de 2007 el desarrollador sueco Alexander Larsson lanza su primer intento de empaquetar aplicaciones con todas sus dependencias. A fines de 2014 comienza a trabajar en el proyecto xdg-app, el cual cambia de nombre a Flatpak en 2016.
¿Qué es Flatpak?
Flatpak es un sistema para compilar, distribuir y ejecutar aplicaciones. Las aplicaciones se pueden compilar y distribuir independientemente del sistema en que se usan, y al ejecutarse están aisladas del mismo hasta cierto punto.
Cada aplicación está en un sandbox, de manera predeterminada solamente puede acceder al contenido del mismo. Cada programa en flatpak tiene acceso a
-
~/.var/app/$FLATPAK_ID
, y$XDG_RUNTIME_DIR/app/$FLATPAK_ID
. - De manera limitada a llamadas del sistema.
- De manera limitada a la instancia de D-BUS.
Aun así, para ser realistas, las aplicaciones en general necesitan más permisos, en este caso se insta a los empaquetadores a que adviertan qué accesos necesitará la aplicación para que el usuario esté conciente de ello, tal como cuando se instala una app desde el Play Store de Android.
Flatpak ofrece un repositorio llamado Flathub. Nada impide que cualquier persona o proyecto (como es el caso de Fedora) tenga el suyo propio.
Flatpak usa OSTree (Fedora usa OCI) para distribuir y desplegar datos. OSTree es similar a Git pero está diseñado para hacer control de versiones de binarios y archivos grandes de datos. El uso de OSTree permite además que un mismo archivo sea usado por más de una misma aplicación, ahorrando de esta manera espacio en disco. Cada aplicación que se instala es almacenada en un repositorio local de control de versiones, y luego se mapea en el sistema de archivos local.
Los cambios entre las diferentes versiones de una aplicación se aplican en el filesystem mediante enlaces duros.
Por ejemplo, con el comando siguiente podemos ver log del último commit de una aplicación flatpak (Logseq): .
❯ ostree log --repo=/var/lib/flatpak/repo deploy/app/com.logseq.Logseq/x86_64/stable commit a54ee70b0ec9047c2083f77b9f9175e8e8edcac998e3be8d395009255a6a03f6 Parent: 8c36feebe7ea23654917f542eb5419b71426359a42165f53496c9d82049a6806 ContentChecksum: 4d06f4e875d0335f2ff1c7a30ffa5b200c9a3eb3aeb0b608588eadb045994b22 Date: 2024-06-09 07:22:27 +0000 Remove screenshot locale (8a160109) Name: com.logseq.Logseq Arch: x86_64 Branch: stable Built with: Flatpak 1.14.8 << History beyond this commit not fetched >>
En realidad el comando mostrado es de bajo nivel solamente a los efectos de mostrar ostree como software subyacente, para obtener información a más alto nivel, es conveniente usar directamente el comando flatpak para obtener información de la aplicación:
> flatpak info com.logseq.Logseq Logseq - Connect your notes and knowledge ID: com.logseq.Logseq Referencia: app/com.logseq.Logseq/x86_64/stable Arquitectura: x86_64 Rama: stable Versión: 0.10.9 Licencia: AGPL-3.0-or-later Origen: flathub Colección: org.flathub.Stable Instalación: system Instalada: 437,7 MB Tiempo de ejecución: org.freedesktop.Platform/x86_64/23.08 Sdk: org.freedesktop.Sdk/x86_64/23.08 Commit: a54ee70b0ec9047c2083f77b9f9175e8e8edcac998e3be8d395009255a6a03f6 Padre: 8c36feebe7ea23654917f542eb5419b71426359a42165f53496c9d82049a6806 Asunto: Remove screenshot locale (8a160109) Fecha: 2024-06-09 07:22:27 +0000
Comparación entre dnf, apt y flatpak
Flatpak está pensado para todo tipo de aplicaciones de escritorio y se esfuerza por ser tan neutral como sea posible en cuanto a los métodos que usa para compilar aplicaciones.
Además, flatpak proporciona actualizaciones atómicas, rollback y consistencia post-instalación.
El siguiente cuadro nos ayuda a ver las diferencias con los dos gestores populares de paquetes: dnf y apt.
Característica | DNF | APT | Flatpak |
---|---|---|---|
Distribución Principal | Fedora, RHEL, CentOS | Debian, Ubuntu | Varias distribuciones de Linux |
Formato de Paquete | RPM | DEB | OSTree, Flatpak Bundle |
Gestión de Dependencias | Manejo automático de dependencias | Manejo automático de dependencias | Manejo dentro del sandbox |
Aislamiento | No | No | Sí, aplicaciones ejecutadas en sandbox |
Instalación de Aplicaciones | Desde repositorios específicos del sistema | Desde repositorios específicos del sistema | Desde repositorios centralizados (Flathub) y repositorios personalizados |
Actualizaciones | dnf update |
apt update && apt upgrade |
flatpak update |
Permisos de Instalación | Requiere permisos de root | Requiere permisos de root | Puede instalarse sin permisos de root |
Compatibilidad entre Distros | Limitada a sistemas basados en RPM | Limitada a sistemas basados en DEB | Compatible con múltiples distribuciones |
Seguridad | Depende de la configuración del sistema | Depende de la configuración del sistema | Sandboxing y permisos controlados por portales |
Facilidad de Uso | Interfaz de línea de comandos | Interfaz de línea de comandos | Interfaz de línea de comandos y GUI |
Espacio de Disco | Compartido entre aplicaciones | Compartido entre aplicaciones | Deduplicación y compartición de runtimes |
Formato de Archivo Individual | No aplica | No aplica | Flatpak Bundle (.flatpak ) |
Desventajas | Depende de la política de la distro | Dependencia de la política de la distro | Las aplicaciones pueden tener un mayor tamaño inicial |
Compatibilidad con Aplicaciones Antiguas | Sí, con soporte de versiones específicas | Sí, con soporte de versiones específicas | Generalmente más adecuado para nuevas aplicaciones |
Desarrollo y Mantenimiento | Desarrollado por el proyecto Fedora | Desarrollado por el proyecto Debian | Desarrollado por el proyecto Flatpak, con apoyo de Red Hat y GNOME |
Adopción | Usado por muchas distribuciones y entornos de escritorio | Usado principalmente en Debian, Ubuntu y derivadas | Usado en diversas distribuciones, especialmente para aplicaciones portátiles |
Ejemplo de Comando de Instalación | dnf install gedit |
apt install gedit |
flatpak install flathub org.gnome.Gedit |
Inconvenientes para usuarios y desarrolladores de aplicaciones Linux
Si bien Linux mejoró significativamente en cuando a usabilidad y experiencia de usuario en los últimos años, hay obstáculos tanto para usuarios como para desarrolladores:
-
Una aplicación para un entorno de escritorio en Linux se debe empaquetar para que esté disponible (como Debian, Fedora, Ubuntu, Arch Linux, etc.), y asegurarse de que cumpla con los requisitos específicos de cada sistema de paquetes (deb, rpm, etc.). Esto requiere un esfuerzo considerable para mantener múltiples versiones y asegurarse de que cada paquete funcione correctamente en su respectiva distribución. Todo esto demanda o más tiempo o bien más gente idónea dedicada en la tarea de crear y mantener paquetes.
-
Si un usuario quiere usar aplicación que no está empaquetada en la distribución, tendrá que realizar algún paso extra, que van desde operaciones relativamente sencillas como bajar un ejecutable (darle permisos, ubicarlo en un directorio del PATH, etc.), hasta procedimientos bastante más complejos y fuera del interés y conocimiento de un usuario final como puede ser compilar el programa.
-
Una distribución de soporte a largo plazo como Debian Stable no posee versiones actualizadas de la mayoría de las aplicaciones. Por lo tanto un usuario tiene que elegir estabilidad a cambio de software un tanto anticuado.
Flatpak tiene como propósito justamente eliminar esas barreras. Gracias a Flatpak un usuario podrá instalar una aplicación como Logseq aun cuando no esté incluida en los repositorios de su distribución, o instalar una versión reciente de Kdenlive en Debian Stable.
En la actualidad existen distribuciones con la mirada puesta en la innovación que se benefician de Flatpak, por ejemplo:
Características de flatpak
Analicemos la app ONLYOFFICE en flatpak:
flatpak info org.onlyoffice.desktopeditors ONLYOFFICE Desktop Editors - Office productivity suite ID: org.onlyoffice.desktopeditors Referencia: app/org.onlyoffice.desktopeditors/x86_64/stable Arquitectura: x86_64 Rama: stable Versión: 8.0.1 Licencia: AGPL-3.0-only Origen: flathub Colección: org.flathub.Stable Instalación: system Instalada: 863,8 MB Tiempo de ejecución: org.freedesktop.Platform/x86_64/23.08 Sdk: org.freedesktop.Sdk/x86_64/23.08 Commit: c9f73db43c9639df65e597108eb4c685025fe484fde05f73f650d05f9ea28512 Padre: a38db7bbfaa18eda6d26e9d113ce850c077bf533d9ebf5aa7e34988a58b91b28 Asunto: Update version to 8.0.1 (#117) (a88ad400) Fecha: 2024-03-04 15:34:56 +0000
La aplicación ONLYOFFICE usa como runtime org.freedesktop.Platform/x86_64/23.08. El runtime org.freedesktop.Platform/x86_64/23.08 es un entorno estandarizado y versionado que provee FreeDesktop.org para ejecutar aplicaciones de escritorio en Linux. Incluye una colección de librerías y servicios comunes, que aseguran la compatibilidad y la estabilidad entre las diferentes distribuciones de Linux. Este runtime está compilado específicamente para arquitecturas de 64-bit y fue actualizado o liberado en agosto de 2023.
Los runtimes no dependen ni de una distribución ni de una versión en particular de una distribución. Y una aplicación instalada en flatpak será exactamente igual no importa si se instala en Debian o en Fedora. Una aplicación como GIMP, empaquetada como Flatpak, debería proporcionar la misma funcionalidad principal y experiencia de usuario tanto en Debian como en Fedora, dado que todas las dependencias y configuraciones críticas se gestionan dentro del contenedor Flatpak. Desde luego, hay diferencias potenciales: Si una aplicación Flatpak utiliza características específicas del sistema, como integraciones con servicios de notificación de escritorio, la forma en que estas integraciones funcionan puede variar ligeramente entre GNOME en Fedora y KDE en Debian.
Objeciones en cuanto a la seguridad
Han existido críticas severas a la seguridad de flatpak, en especial por el sitio anónimo Flatkill. El siguiente cuaddro es un resumen de los argumentos en contra y favor de Flatpak en cuanto a este tema:
Objeción de Seguridad | Descripción | Respuesta / Acción Tomada |
---|---|---|
Sandboxing Ineficaz | Muchas aplicaciones en Flathub tienen permisos amplios como filesystem=host o filesystem=home , lo que permite acceso completo al sistema de archivos del usuario. |
Flatpak ha mejorado la transparencia sobre los permisos de las aplicaciones y trabaja en fortalecer el modelo de sandboxing. Se han introducido portales para permitir el acceso controlado a los recursos del sistema. Flatpak Documentation |
Actualizaciones de Seguridad Retrasadas | Algunas aplicaciones y runtimes en Flatpak no reciben actualizaciones de seguridad oportunas, lo que deja a los usuarios expuestos a vulnerabilidades conocidas. | La herramienta flatpak-external-data-checker automatiza la verificación de fuentes externas y la generación de solicitudes de fusión cuando se encuentran actualizaciones. Al implementar f-e-d-c, los desarrolladores pueden asegurar que las aplicaciones en Flathub se mantengan actualizadas más fácilmente y de manera más eficiente, lo que reduce el tiempo de espera para las actualizaciones de los usuarios finales |
Integración Limitada del Escritorio | Problemas con la integración de aplicaciones Flatpak en escritorios Linux, como la falta de soporte para configuraciones de fuentes y temas de escritorio. | Se han mejorado los mecanismos de integración de escritorio, incluyendo mejor soporte para fuentes y temas en KDE y GNOME. Flatpak sigue trabajando en mejorar la compatibilidad con configuraciones del sistema host.) |
Explotación Local de Root | Riesgo de explotación de root local debido a aplicaciones Flatpak instaladas con permisos suid. | Flatpak utiliza nuevas APIs de libostree para rechazar cualquier archivo con permisos suid o de escritura mundial al instalar aplicaciones. |
Gestión de Permisos Confusa para el Usuario | Los usuarios pueden ser engañados por íconos y descripciones que indican un falso sentido de seguridad sobre las aplicaciones sandboxed. | Flatpak ha mejorado la interfaz de usuario para mostrar de manera más clara los permisos que solicita cada aplicación, ayudando a los usuarios a tomar decisiones informadas sobre las aplicaciones que instalan. |
¿Cómo hace flatpak para no pedirle a un usuario de un grupo administrativo que se autentique nuevamente?
En el post anterior vimos como funciona polkit. Flatpak se vale de polkit para facilitar la instalación de paquetes por parte de usuarios con permisos administrativos. Basta con mirar el archivo /usr/share/polkit-1/rules.d/org.freedesktop.Flatpak.rules
.
polkit.addRule(function(action, subject) { if ((action.id == "org.freedesktop.Flatpak.app-install" || action.id == "org.freedesktop.Flatpak.runtime-install"|| action.id == "org.freedesktop.Flatpak.app-uninstall" || action.id == "org.freedesktop.Flatpak.runtime-uninstall" || action.id == "org.freedesktop.Flatpak.modify-repo") && subject.active == true && subject.local == true && subject.isInGroup("wheel")) { return polkit.Result.YES; } return polkit.Result.NOT_HANDLED; }); polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.Flatpak.override-parental-controls") { return polkit.Result.AUTH_ADMIN; } return polkit.Result.NOT_HANDLED; });
Este archivo tiene dos reglas:
- Permite a los usuarios del grupo "wheel", que están loogoueados localmente y tienen una sesión activa instalar, desinstalar, y modificar aplicaciones y repositorios sin autenticación adicional.
- No se pueden pasar por arriba de los controles parentales sin autenticarse con una cuenta de usuario administrativa.
Para ambos casos, si las condiciones no se cumplen, el resultado dependerá de otras reglas o de la regla predeterminada.
Para terminar...
Flatpak elimina barreras y obstáculos tanto para desarrolladores como para usuarios finales. Para los primeros, significa les ofrece la posibilidad de poner aplicaciones disposición de cualquier distribución de Linux. Para los segundos representa una mayor facilidad para obtener los programas que están necesitando.
Comentarios
Comments powered by Disqus