Los paquetes universales —Snap y Flatpak— nacen para resolver un problema real: distribuir software con dependencias fijas sin depender de lo que el sistema base tenga disponible. En lugar de enlazar contra las bibliotecas del sistema, cada paquete lleva consigo todo lo que necesita. El precio que pagas es disco, RAM y complejidad operativa; la ganancia es que Firefox 120 funciona igual en Debian Bookworm que en una distro con glibc de hace tres años.
Snap es el sistema de Canonical. Un snap es una imagen squashfs que el daemon snapd monta en un directorio bajo /snap cuando el paquete está activo. El montaje ocurre en arranque o en el primer uso, lo que explica esa demora notable que tiene cualquier aplicación snap la primera vez que la abres —el kernel tiene que descomprimir y mapear la imagen. El sandboxing usa AppArmor y seccomp: snapd genera perfiles de AppArmor específicos por snap y los carga en el kernel automáticamente. Las actualizaciones son automáticas y silenciosas en segundo plano; snapd hace polling al Snap Store de Canonical, que es el único backend oficial y está centralizado bajo su control, ahí está parte de la controversia.
Flatpak tiene un diseño diferente: la comunidad lo desarrolla bajo freedesktop.org, el backend es descentralizado (Flathub es el repositorio principal, pero puedes añadir otros), y el sandboxing se basa en bubblewrap con portales D-Bus en lugar de AppArmor. En Debian, ninguno de los dos viene instalado por defecto —son opt-in explícito, lo que tiene sentido: en un servidor no los quieres ni por error.
¿Cuándo los usas? En desktop, cuando necesitas una versión más reciente que la que ofrece apt en Bookworm, o cuando el upstream solo distribuye vía Snap o Flatpak (Spotify, muchos editores propietarios). En servidores, prácticamente nunca: apt cubre el 99% de los casos y los paquetes universales añaden overhead sin beneficio real. Si los instalas en un sistema de producción sin entenderlos, puedes acabar con servicios que se reinician solos después de un snap refresh en mitad del día, o con perfiles de AppArmor que bloquean accesos de red que dabas por seguros.
# ── Instalar snapd y flatpak en Debian Bookworm ────────────────────── sudo apt install snapd flatpak # snapd necesita que su propio directorio de binarios esté en el PATH # En Debian, el PATH de snapd se configura vía /etc/profile.d/apps-bin-path.sh # pero en la sesión actual tienes que añadirlo manualmente o reabrir sesión export PATH="$PATH:/snap/bin" # ── Snap: operaciones básicas ───────────────────────────────────────── snap find vlc # buscar en el Snap Store sudo snap install vlc # snap "estricto": sandbox activo sudo snap install code --classic # snap "clásico": acceso completo al sistema # Los snaps clásicos son equivalentes a instalar desde un .deb en cuanto # a aislamiento: ninguno. --classic es necesario para IDEs y herramientas # de desarrollo que necesitan leer/escribir tu home arbitrariamente. snap list # ver snaps instalados, versiones y revisiones # Cada snap tiene "revisiones" (números enteros), no solo versiones semánticas. # snapd mantiene las dos últimas revisiones en disco; puedes hacer rollback. sudo snap refresh vlc # actualizar un snap concreto sudo snap refresh # actualizar todos los snaps instalados # Ver qué actualizaciones automáticas ha hecho snapd en segundo plano snap changes # Desinstalar; --purge elimina también los datos del snap en /root/snap o ~/snap sudo snap remove vlc sudo snap remove vlc --purge # ── Flatpak: operaciones básicas ────────────────────────────────────── # Añadir Flathub, el repositorio principal de Flatpak flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo flatpak search vlc flatpak install flathub org.videolan.VLC # Los flatpaks se instalan en ~/.local/share/flatpak (usuario) # o en /var/lib/flatpak (sistema, con sudo) flatpak list --app # solo aplicaciones, sin runtimes # Los "runtimes" son las capas base compartidas (GNOME 45, KDE Frameworks, etc.) # Flatpak los descarga una sola vez y los reutiliza entre apps: # aquí recuperas algo del disco que pierdes con snap. flatpak update # actualizar todo lo instalado flatpak uninstall org.videolan.VLC flatpak uninstall --unused # limpiar runtimes que ya no usa nadie # ── Diagnóstico: ver los montajes squashfs de snap ──────────────────── # Cada snap activo aparece como un loop device montado en /snap/<nombre>/<rev> mount | grep squashfs # o con lsblk para ver los loop devices asociados lsblk -o NAME,TYPE,MOUNTPOINT | grep loop
Qué está pasando debajo
El export PATH que añadimos manualmente no es un capricho: en Debian, snapd instala sus binarios en /snap/bin, pero ese directorio no está en el PATH por defecto en sesiones ya abiertas. El archivo /etc/profile.d/apps-bin-path.sh lo añade en el próximo login. Si lo omites y ejecutas snap install code, el binario code existirá pero el shell no lo encontrará.
La distinción entre snap estricto y snap clásico importa operativamente. vlc se instala sin --classic: tiene un perfil AppArmor que le permite acceder a archivos multimedia pero no a tu directorio de proyectos. code --classic no tiene esa restricción —puede leer y escribir donde quiera como cualquier proceso normal. Cuando evalúas si un snap es seguro en un equipo compartido, esta diferencia es lo primero que miras: snap list muestra la columna “notes” donde aparece “classic” si aplica.
El comando snap changes es lo que usas cuando algo deja de funcionar y sospechas que un refresh automático lo rompió. Muestra el historial completo de operaciones que snapd ha ejecutado en segundo plano, con timestamps. Si ves un auto-refresh hace dos horas justo cuando empezaron los problemas, ya tienes el punto de partida. Puedes hacer sudo snap revert vlc para volver a la revisión anterior, que snapd conserva exactamente para esto.
En Flatpak, la separación entre aplicación y runtime es lo que diferencia su modelo de disco del de Snap. Cuando instalas cinco aplicaciones Flatpak que usan GNOME 45 como base, el runtime se descarga una sola vez. Con Snap, cada paquete lleva su propia copia completa de todo, sin compartir nada. El comando flatpak uninstall --unused limpia los runtimes que quedaron huérfanos tras desinstalar aplicaciones —algo que Snap no necesita porque no tiene runtimes compartidos, pero que en Flatpak puedes olvidar y acabar con varios GB de capas base obsoletas.
El bloque mount | grep squashfs al final es útil cuando tienes que auditar qué está montado en un sistema o depurar un problema de rendimiento en el arranque: si ves veinte loop devices squashfs, tienes veinte snaps activos, cada uno con su ciclo de montaje al arrancar snapd.
[Ubuntu]: snapd viene instalado y habilitado por defecto desde Ubuntu 16.04. Algunos paquetes que en Ubuntu se distribuyen como snap (por ejemplo, firefox desde Ubuntu 22.04) en Debian siguen siendo .deb estándar en los repositorios oficiales.
N° 57