Package Managers in Linux and Unix-like Systems - The Evolution of Software Distribution

S
SUVANKAR SARKAR
18 min read9 views
Package Managers in Linux and Unix-like Systems - The Evolution of Software Distribution

TL;DR

we need a better software distribution mechanism, seems the .Appimage is the best now.

On windows and MAC it is simple you just get exe or dmg, what about UNIX like Systems, Linux or BSD?

When microsoft introduced servicepack since win95, the complexity increased, on linux and unix like system i remember getting tarball and build the application i need - it was fun but for a regular user it should not be the way to get an application.
The fascinating evolution of package management in Linux and Unix-like systems - from the early days of source code distribution in the 1970s and 80s, through the revolutionary package managers of the late 90s and early 2000s, to modern solutions like Flatpak and AppImage. And yes, we’ll talk about why Snap with --classic is… controversial.

We’re covering over 25 years of innovation in software distribution. Let’s get started!

S 1: THE BEGINNING - SOURCE CODE DISTRIBUTION

In the beginning, there was source code. And it was… complicated.

The Original Way

Back in the early Unix days, software distribution was beautifully simple in concept but painful in practice. Developers would share:

Source code (usually in a tarball - a .tar.gz file)

Build instructions (often a README or INSTALL file)

A Makefile or configure script

The process looked like this:

bash

wget http://example.com/software-1.0.tar.gz
tar -xzf software-1.0.tar.gz
cd software-1.0
./configure
make
sudo make install

The Problems

This approach had serious issues:

Dependency Hell - Your software needs library X version 2.3, but you have 2.1. So you download library X source, which needs library Y, which needs library Z… You see where this goes.

No Standardization - Every software installed files wherever the developer decided. Was it in /usr/local/bin? /opt? Who knows!

No Uninstall - Removing software meant manually tracking down every file it installed. Good luck with that.

Compilation Time - Want to install a web browser? Great, see you in 2 hours after it compiles.

No Updates - Checking for updates meant visiting websites manually. Security patches? You’d better be subscribed to mailing lists.

But this chaos led to innovation…

S2: TRADITIONAL PACKAGE MANAGERS

Package managers were a revolution. They solved the core problems by introducing:

Pre-compiled binaries

Dependency resolution

Centralized repositories

Easy updates and removal

The Big Players

APT (Debian/Ubuntu family) - 1999

sudo apt update
sudo apt install firefox

The Advanced Package Tool (APT) was first released with Debian 2.1 on March 9, 1999, and it changed everything. Before APT, Debian users had dpkg, but it couldn’t automatically resolve dependencies. APT revolutionized package management by:

Automatically downloading and installing dependencies

Managing package repositories

Handling upgrades intelligently

APT quickly became the gold standard for user-friendly package management. The .deb package format and APT’s approach influenced countless other package managers. Today, it powers not just Debian, but Ubuntu and hundreds of derivative distributions.

Pacman (Arch Linux) - 2002

sudo pacman -Syu firefox

Pacman was created by Judd Vinet and first released on March 11, 2002, as part of Arch Linux. It was designed from the ground up to be simple, fast, and powerful. Unlike APT which evolved from dpkg, pacman was a clean-slate design focused on:

Speed and efficiency

Simplicity in design and usage

The KISS principle (Keep It Simple, Stupid)

Pacman became the foundation for the Arch User Repository (AUR), one of the largest community-driven software repositories. Its straightforward approach inspired package managers in other distributions.

RPM/YUM/DNF (Red Hat/Fedora/CentOS) - 1997/2003/2015

sudo dnf install firefox

RPM (Red Hat Package Manager) dates back to 1997, making it one of the oldest package formats still in wide use. YUM (Yellowdog Updater, Modified) came in 2003 to add automatic dependency resolution to RPM. Finally, DNF (Dandified YUM) arrived in 2015 as a modern rewrite with better performance and cleaner code.

The RPM ecosystem powers enterprise Linux - Red Hat Enterprise Linux, Fedora, CentOS, and many others. It’s battle-tested, reliable, and handles complex dependency scenarios well.

APK (Alpine Linux) - 2009

apk add firefox

Alpine Package Keeper was created in 2009 for Alpine Linux, a security-oriented, lightweight distribution. APK was designed for:

Minimal footprint

Lightning-fast performance

Container and embedded use cases

Alpine’s small size (base system is around 5 MB) and APK’s speed made it the go-to choice for Docker images, revolutionizing containerization.

Zypper (openSUSE) - 2006

sudo zypper install firefox

Zypper, built on the ZYpp (libzypp) library, was introduced in 2006 for openSUSE. It offers excellent dependency resolution, powerful search capabilities, and rollback features, making it particularly popular in enterprise environments.

The Limitations

But traditional package managers have problems:

Fragmentation - A .deb won’t work on Fedora. An RPM won’t work on Ubuntu. Developers had to package for every distribution.

Dependency Conflicts - Software A needs library version 1.0, software B needs version 2.0. You can’t have both installed traditionally.

Outdated Packages - Stable distros (looking at you, Debian Stable) often ship ancient software versions for reliability. Great for servers, frustrating for desktops.

System-Wide Installation - Everything goes into system directories. Can’t easily test different versions or run apps in isolation.

This led to the next evolution…

S3: Homebrew for MAC & NIX for unix like systems.

brew install firefox

Homebrew brought simplicity to macOS and later to Linux. It installs packages in userspace, doesn’t need root privileges for most operations, and has a massive community repository. It’s particularly popular among developers who work across macOS and Linux.

Philosophy: Keep it simple, stay out of the system’s way, and make it easy for anyone to contribute packages.

Nix Package Manager

nix-env -iA nixpkgs.firefox

Nix is absolutely fascinating. It’s a purely functional package manager with some mind-blowing features:

Atomic Upgrades - Updates either complete fully or rollback entirely. No broken half-updated systems.

Reproducible Builds - The same package definition will build identically every single time, anywhere.

Multiple Versions - Install Firefox 100, 110, and 120 simultaneously. No conflicts.

Rollbacks - Made a mistake? Roll back to any previous system state instantly.

The trade-off? It has a steeper learning curve and uses a unique functional language for package definitions. But for power users and developers, it’s incredibly powerful.

Winget (Windows Package Manager)

winget install Firefox

While not Unix, worth mentioning as Windows finally got an official package manager in 2020. It shows that even Microsoft recognized the value of package management.

S 4: THE MODERN APPROACH - CONTAINERIZED PACKAGING

The latest evolution addresses the core limitation: distribution-agnostic software delivery with dependency isolation.

Flatpak - The People’s Champion

flatpak install flathub org.mozilla.firefox

Why Flatpak is excellent:

Universal - One package runs on Ubuntu, Fedora, Arch, wherever. Developers package once, users install anywhere.

Sandboxing - Apps run in isolated environments with fine-grained permissions. Want to deny an app internet access? Easy.

Multiple Versions - Need both the stable and beta version of an app? No problem.

Runtimes - Apps share common runtimes (GNOME, KDE, etc.), saving disk space while staying current.

Flathub - The centralized repository is well-maintained, includes popular software, and has clear app pages with permissions listed.

The sandboxing approach: Flatpak uses portals for system access, meaning apps request permissions explicitly. Modern, secure, and user-friendly.

AppImage - Simplicity Perfected

chmod +x Firefox.AppImage
./Firefox.AppImage

Why AppImage is brilliant:

Zero Installation - Download, make executable, run. That’s it. No package manager needed.

Portable - Put it on a USB drive. Move it between computers. It just works.

No Root Required - Perfect for systems where you don’t have admin access.

Self-Contained - Everything the app needs is bundled inside. One file, one app.

Old System Compatible - Run modern apps on older distributions because dependencies are bundled.

The philosophy: An AppImage is like a .exe on Windows or .app on macOS - a single file that IS the application.

I personally love AppImage for its simplicity. Download, double-click, done. No daemons, no system integration unless you want it, just pure portability.

Snap - The Controversial One

sudo snap install firefox

What Snap does well:

Distribution-agnostic like Flatpak

Automatic updates in the background

Transactional updates with rollback

Backed by Canonical, so good corporate support

Why Snap is controversial:

Closed Backend - The Snap Store backend is proprietary. Only Canonical controls it. This goes against open-source principles.

Performance - Snap apps often start slower than native apps due to loop device mounting.

The --classic Problem - This is the big one. Snaps can be installed with --classic which disables confinement entirely. The app gets full system access, defeating the entire security model. It’s like having airbags that you can just turn off.

sudo snap install code --classic  # Full system access, no sandbox

Why does --classic exist? Because proper sandboxing is hard, and some complex apps (like Browser, IDEs) need deep system integration. But it’s a security nightmare and undermines the whole point of containerized apps.

Forced Adoption - Ubuntu started forcing Snap for certain apps (Firefox, Chromium), removing alternatives from their repos. Users don’t appreciate being forced into a specific technology.

This is why many users, myself included, prefer Flatpak or AppImage. They’re more aligned with open-source values and don’t compromise on their sandboxing principles.

S5: COMPARISONS AND USE CASES

When to Use What

Traditional Package Managers (apt, pacman, dnf):

System utilities and core software

When you want deep system integration

Server environments

When you need the absolute latest packages (rolling release)

Flatpak:

Desktop applications

Software you want sandboxed

Apps not in your distribution’s repos

When you want the latest version on a stable distro

AppImage:

Portable apps you run occasionally

Testing software without installing

When you don’t have root access

Maximum simplicity needed

Nix:

Development environments

When you need reproducibility

Multiple versions of tools simultaneously

Advanced users who value declarative configuration

Snap:

If you’re on Ubuntu and it’s already there

IoT devices (where Snap actually shines)

When you need automatic background updates

Not recommended if you have alternatives

S6: THE FUTURE

Where is software distribution heading?

Immutable Operating Systems - Distributions like Fedora Silverblue, NixOS, and others are building systems where the base OS is immutable and all user apps come from Flatpak or containers. This separation of concerns is elegant and secure.

Better Sandboxing - Flatpak’s portal system will continue improving, allowing more complex apps to run safely sandboxed without compromising functionality.

Standardization - We might see consolidation. Flatpak has momentum in the open-source community, while Snap may remain Ubuntu-specific.

Distribution-Independent Packaging - The trend is clear: developers want to package once, users want to install anywhere. The days of maintaining packages for 15 different distributions are numbered.

WebAssembly - Looking further ahead, WASM could revolutionize application distribution entirely, but that’s a topic for another video.

CONCLUSION

We’ve come a long way from ./configure && make && make install. Today’s landscape offers choices:

Traditional package managers for system integration

Flatpak for sandboxed, universal desktop apps

AppImage for maximum portability and simplicity

Nix for reproducibility and power users

And Snap… exists

The best part? You’re not locked into one solution. Mix and match based on your needs. Install Firefox via Flatpak, use apt for system tools, and keep a few AppImages for portable apps.

The evolution of package management shows the Linux community at its best - constantly innovating, solving real problems, and giving users choice.

What’s your preferred way to install software? Are you team Flatpak, team AppImage, or do you stick with traditional package managers? Let me know in the comments!

If you found this useful, consider liking and subscribing. And if you want me to do a deep dive on any specific package manager or a tutorial on setting up Flatpak or Nix, let me know!

Tags

Share:

Comments

Sign in to join the discussion.
Sign in
Sort:
Loading comments...