Package managers provide a way of packaging, distributing, installing, maintaining, and removing applications. Packages contain metadata, such as the applications name, description, version, vendor, checksum, and a list of dependencies.

In the Linux ecosystem, package management is very important, as applications are downloaded and installed from repositories, often requiring specific dependencies to run correctly.

Unfortunately, package management on Linux can be confusing, as different Linux distributions prioritise different package managers. For example, Linux distributions based on Debian prioritise the Debian Package Management System (Dpkg), while Linux distributions from Red Hat prioritise the Red Hat Package Manager (RPM).

To add additional complexity, there are multiple ways to interact with a package manager. For example:

Debian Package Management System (Dpkg)

  • Advanced Packaging Tool (APT): A front-end command line package management system for the Debian package manager.
  • Aptitude Package Manager: Another popular front-end command line package management system for the Debian package manager.
  • Synaptic Package Manager: A GUI package management tool for the Advanced Packaging Tool (APT).

Red Hat Package Manager (RPM)

  • Yellowdog Updater, Modified (YUM): A command-line package manager, providing an interface to the Red Hat Package Manager (RPM).
  • Dandified Yum (DNF): A fork of the YUM package manager and the new default for Fedora (22 onwards).

I am most familiar with YUM and DNF, but even after years of use, I still find managing packages cumbersome (hence I created a DNF Cheat Sheet.

Thankfully, over the past few years, package management across the Linux ecosystem has been slowly evolving, driven by the desire to deliver cross-distribution packages.

Introducing Flatpak and Snappy, which are both cross-distribution package managers.

Flatpak

Flatpak was developed as part of the freedesktop.org project and was originally called xdg-app. Key features include:

  • Containerised: Software isolation, improving reliability and security.
  • Cross-distribution: Can be distributed across multiple Linux distributions.
  • Stable Platform: Tightly coupled runtimes, providing a consistent foundation.
  • System Permissions: Granular control over system resources and permissions.
  • Dependency Control: Bundle all core-dependencies.
  • Unified Distribution: Distribution via FlatHub.
  • Open-Source: Flatpak is run as an independent and open-source project.

Flatpak is supported by 21 Linux distributions, including Ubuntu, Fedora, Mint, etc. Packages can be discovered, downloaded and installed from FlatHub.

Snappy

Snappy was developed by Canonical (e.g. the developer of Ubuntu). The packages are called snaps, enabled by the snapd tool. Key features include:

  • Read-Only: read-only, signed content, improving control and security.
  • Self Contained: Decoupling applications from the underlying system.
  • Cross-distribution: Can be distributed across multiple Linux distributions.
  • Stable Platform: Include a compressed filesystem that is mounted before execution.
  • System Permissions: Application communications occur via approved interfaces.
  • Desktop and IoT: Support for desktop and IoT Linux use cases.
  • Simplified Distribution: Distribution via Snapcraft.
  • Dependency Control: Bundle all core-dependencies.

Snaps are supported by 41 Linux distributions, including Debian, Fedora, etc. Unsurprisingly, Snappy comes pre-installed on Ubuntu. A popular source to discover, download and install snaps is Snapcraft, as well as the Snap Store app.

My Applications

Earlier this year, I shared my list of commonly used Linux software. Building on that post, the table below highlights which applications are available via Flatpak and/or Snappy.

Flatpak and Snappy

As you can see, in the context of my workload, I have reasonably good coverage across Flatpak and Snappy. It is also worth mentioning that I found the search on FlatHub to be far more accurate/effective than Snapcraft.

Conclusion

There are other cross-distribution package managers, for example, AppImage. However, the majority of my usage has been with Flatpak and Snappy.

It is a little ironic that multiple technologies have emerged in an attempt to reduce the fragmentation of package management across the Linux ecosystem. Personally, I prefer Flatpak, as I am predominantly a desktop user and believe their “independent” position better serves the Linux community.

With that said, Flatpak and Snappy can be used simultaneously (which is what I do on Fedora), therefore, at least these new cross-distribution package managers do not conflict with each other.

In summary, I am an advocate for the use of cross-distribution package managers, although ideally there would be one independent open-source option, instead of competing technologies. Over time, we might see consolidation or clearer positioning, where specific package managers are positioned for desktop, IoT, etc.) Finally, I am excited to see how features such as “application isolation” and “decoupling” can help enable new paradigms like immutable operating systems (e.g. Fedora Silverblue).