Introducción a Flatpak

Flatpak es una tecnología para construir, distribuir, instalar, y lanzar aplicaciones. Está orientada principalmente al escritorio Linux, aunque también puede ser usada como base para la distribución de aplicaciones en otros contextos, tales como sistemas embebidos.

Flatpak ha sido diseñado e implementado con una cantidad de objetivos:

  • Permitir que las aplicaciones puedan ser instaladas en cualquier distribución Linux.

  • Proporcionar entornos consistentes a las aplicaciones, para facilitar las pruebas y reducir errores.

  • Desacoplar las aplicaciones del sistema operativo, para que no dependan de versiones específicas de cada distribución.

  • Permitir que las aplicaciones agrupen sus propias dependencias, de forma que puedan usar bibliotecas que no estén provistas por una distribución de Linux, y así puedan depender de versiones específicas o incluso versiones emparchadas de alguna biblioteca.

  • Incrementar la seguridad de los escritorios Linux, aislando aplicaciones en sandboxes.

Flatpak hace que sea fácil sacar partido de estas características. Si aún no lo ha hecho, se recomienda que pruebe el ejemplo de hola mundo como una forma de ponerse en marcha.

Puede encontrar más información sobre Flatpak en flatpak.org.

Cómo funciona

Flatpak puede entenderse a través de un pequeño número de conceptos clave. Éstos también ayudan a explicar la diferencia con los paquetes de software tradicional.

_images/diagram.svg

Runtimes

Los runtimes proporcionan las dependencias básicas que las aplicaciones usan. Hay varios runtimes disponibles, desde el más mínimo (pero más estable) Freedesktop, a runtimes más grandes producidos por escritorios como GNOME o KDE. La página de runtimes en flatpak.org proporciona una vista general de los runtimes disponibles actualmente.

Cada aplicación debe ser construida contra un runtime, y este runtime debe ser instalado en el sistema host para que la aplicación se pueda lanzar. Los usuarios pueden tener instalados múltiples runtimes diferentes al mismo tiempo, inclusive distintas versiones del mismo runtime.

Truco

Cada runtime puede pensarse como un sistema de archivos /usr. De hecho, cuando se lanza una aplicación, su runtime está montado en /usr.

Bibliotecas agrupadas

Si una aplicación requiere alguna dependencia que no esté en su runtime, puede ser agrupada junto con la aplicación misma. Esto permite que las aplicaciones usen dependencias que no están disponibles en la distribución, o que usen una dependencia en una versión distinta de la instalada en el host.

SDKs (Kits de desarrollo de software)

Un SDK es un runtime que incluye las partes ‘devel’ que no son necesarias al momento de lanzar la aplicación, tales como herramientas de construcción y empaquetado, archivos de cabecera, compiladores y debuggers. Cada aplicación se construye contra un SDK, que está apareado a un runtime. Este es el runtime que será usado por la aplicación al ser lanzada.

Extensiones

Una extensión es un agregado opcional a un runtime o aplicación. Son más comúnmente usados para separar de los runtimes a las traducciones y a la información de debug. Por ejemplo, org.freedesktop.Platform.Locale puede agregarse al runtime org.freedesktop.Platform para sumar traducciones.

Sandboxes

Con Flatpak, cada app es construida y lanzada en un entorno aislado. Por defecto, la aplicación sólo puede “ver” dos cosas: a sí misma y a su runtime. Se debe garantizar explícitamente el acceso a los archivos de usuario, la red, los sockets gráficos, subsistemas del bus y dispositivos. Como se describirá más adelante, Flatpak proporciona varias formas de hacerlo. El acceso a otras cosas, como por ejemplo a otros procesos, es deliberadamente imposible.

El comando flatpak

flatpak es el comando que se usa para instalar, desinstalar y actualizar runtimes y aplicaciones. También puede usarse para ver qué está instalado actualmente, y tiene comandos para construir y distribuir paquetes de aplicaciones. flatpak --help proporciona una lista completa de los comandos dispobibles.

La mayoría de los comandos flatpak son realizados a nivel de sistema por defecto. Para realizar un comando sólo para el usuario actual, use la opción --user. Esto permite, por ejemplo, que los runtimes y los paquetes de aplicaciones sean instaladas por cada usuario.

Para más información sobre los comandos de flatpak, vea la Referencia de comandos

Identificadores

Flatpak identifica cada aplicación, runtime y SDK usando un nombre único, que a veces se emplea como parte de una tripleta nombre/arquitectura/rama.

Nombre

Los nombres de Flatpak toman la forma de una dirección de DNS inversa, tal como com.compañia.App. El segmento final de esta dirección es el nombre del objeto, y la parte precedente es el dominio al que pertenece. Para poder prevenir conflictos entre nombres, este dominio debe corresponder a una dirección de DNS registrada. Esto significa que se debe usar el dominio de un sitio web, ya sea de una aplicación o de una organización. Por ejemplo, si la aplicación App tiene su propio sitio en app.com, su nombre Flatpak sería com.app.App. Múltiples aplicaciones pueden pertenecer al mismo dominio, tales como org.organización.App1 y org.organización.App2.

Si no cuenta con un dominio registrado para su aplicación, se puede usar un sitio web de terceros para obtener uno. Por ejemplo, Github permite la creación de páginas personales que pueden usarse para este propósito. En este caso, el espacio de nombres nombre.github.io puede usarse como la base de un identificador de aplicación io.github.nombre.App.

Si la aplicación proporciona un servicio de D-Bus, se espera que el nombre del servicio de D-Bus sea el mismo que el nombre de la aplicación.

Tripleta identificadora

Muchos comandos de flatpak sólo requieren el nombre de una aplicación, runtime o SDK. Sin embargo, en algunas circunstancias también es necesario especificar la arquitectura y la rama. Las ramas permiten especificar una versión en particular. Esto se hace usando la tripleta nombre/arquitectura/rama. Por ejemplo: org.gnome.Sdk/x86_64/3.14 o org.gnome.Builder/i386/master.

Bajo la alfombra

Flatpak usa una cantidad de tecnologías preexistentes. En general no es necesario estar familiarizado con ellas para poder usar Flatpak, pero en algunos casos esto podría ser útil. Incluyen:

  • La utilidad bubblewrap del Project Atomic, que hace que los usuarios sin privilegios puedan configurar y correr contenedores, usando características del kernel tales como:

    • Cgroups
    • Namespaces
    • Bind mounts
    • Seccomp rules
  • systemd para configurar cgroups para sandboxes

  • D-Bus, una forma bien establecida de proporcionar APIs de alto nivel a las aplicaciones.

  • El formato OCI de la Open Container Initiative, como un formato conveniente de transporte para paquetes de un solo archivo.

  • El sistema OSTree para el versionado y la distribución de árboles de archivos de sistema.

  • Metadatos Appstream, para permitir que las aplicaciones flatpak se vean bien en aplicaciones administradoras de software.