Paquete universal
# Paquete universal

Un paquete universal, también llamado paquete independiente de distribución, es un tipo de paquete de software de Linux que, en contraste con los paquetes nativos (rpm, deb, eopkg, pkg.tar.xz, pkg.tar.gz,... ), contienen en sí mismos todo el software del que dependen y son independientes de la distribución concreta. Habitualmente se ejecutan dentro de entornos aislados sin afectar al sistema sobre el que se ejecutan (sandbox).

Hoy día la independencia de la distribución, por lo que se llaman universales, no se cumple en su totalidad. Los sistemas existentes de paquetes universales sirven para muchas distribuciones pero todavía hay distribuciones en las que no son aplicables.

Por su propia naturaleza permiten tener fácilmente diferentes versiones de software o ciertas bibliotecas, lo cual es más difícil de lograr cuando todo su software usa la misma versión de una biblioteca o paquete.

## Formatos

Los formatos de paquetes universales más importantes hoy día son:

* Snap. Creado por Canonical, empresa desarrolladora de Ubuntu. Los paquetes son gestionados por el demonio snapd. Requiere un repositorio centralizado, el de Canonical (Snap Store). Permite empaquetar cualquier tipo de aplicación. Los paquetes se ejecutan dentro de AppArmor aunque se pueden ejecutar fuera del sandbox. Es el sistema de paquetes universales más popular y el que tiene más paquetes.
* Flatpak. Creado por desarrolladores de Fedora/RedHat. Los paquetes son gestionados por Flatpak client-side tools. Cualquiera puede crear su propio repositorio. El repositorio oficial es FlatHub. No permite empaquetar cualquier tipo de aplicación (Ej. servicios del sistema y paquetes del kernel). Los paquetes se ejecutan dentro de Bublewrap y no se permite la ejecución fuera de él.
* AppImage. Fue el primero que se creó. Puede ejecutar sin instalación con solo ejecutar el paquete. Cualquiera puede crear su propio repositorio. El repositorio oficial es AppImageHub. No permite empaquetar cualquier tipo de aplicación (Ej. servicios del sistema y paquetes del kernel). Los paquetes se pueden ejecutar dentro de AppArmor, Bublewrap o Firejail aunque también se pueden ejecutar fuera del sandbox.

## Limitaciones

Los sistemas actuales de paquetes universales tiene varias limitaciones:

* Realmente no son independientes de la distribución.
* Al incluir todas las dependencias los paquetes son más grandes. Además,la misma dependencia podría incluirse en varios paquetes, mientras que los paquetes binarios usarían todos la misma dependencia que solo necesita instalarse en el sistema una vez.
* Se han convertido, especialmente Snap, en una forma de instalar programas privativos sin que sean detectados por el administrador.

Por estas limitaciones este tipo de paquetes están perdiendo popularidad.

