Right, let’s talk about the granddaddy of them all and its wildly successful, slightly more user-friendly offspring. Debian and Ubuntu aren’t just distributions; they’re a philosophy. And that philosophy, in a word, is stability. But as we’ll see, that word means something very specific here, and it comes with trade-offs you need to understand.

The Debian Bedrock: A Fortress of Solitude

Debian is the rock upon which Ubuntu is built. It’s the project so committed to its ideals of free software and rigorous stability that its releases are famously… let’s call them deliberate. The “Stable” branch of Debian is exactly that: a frozen, meticulously tested fortress. When you install Debian Stable, you’re getting software that was, in many cases, already a year old when the release was made. It’s not outdated; it’s curated. It’s the software equivalent of a master craftsman’s tool that doesn’t break, ever, because all the bugs have been hammered out over the last two years.

This is fantastic for servers, embedded systems, or anyone who values “it just works” over “it has the shiny new features.” The trade-off? You will not be on the bleeding edge. You’ll be safely watching from the bleachers, sipping a reliable beverage. To manage this curated collection, Debian uses apt and dpkg, arguably one of the most robust package management systems ever conceived.

Ubuntu: The Polished Derivative

Then came Ubuntu, which looked at Debian’s magnificent, sprawling fortress and said, “This is great, but where’s the welcome mat and the coffee machine?” Ubuntu takes Debian’s “Unstable” branch (Sid) as its base, polishes it to a shine, adds its own repositories, and crucially, imposes a predictable release schedule.

Ubuntu’s genius is its Long-Term Support (LTS) cycle. Every two years, they release an LTS version that is supported with security updates for five years. This is the gold standard for enterprise, developers, and sane humans who don’t want to upgrade their OS every six months. The non-LTS “interim” releases are for those who want newer software; they’re supported for just nine months, essentially bridging the gap between LTS releases.

The Engine Room: apt and dpkg

This is where the magic happens. You don’t “install” software on these systems; you ask the package manager to do it for you. dpkg is the low-level tool that installs a single .deb file. But apt (Advanced Package Tool) is the brain. It handles dependencies, fetches packages from repositories, and maintains the system’s overall sanity.

The basic workflow is simple. First, you update apt’s local cache of what packages are available from your configured repositories. Always do this first. I’ve watched people try to install things for an hour without running this, and it’s like trying to order from a restaurant menu that changed six months ago.

sudo apt update

Then, you can install your software. Let’s get the excellent htop to replace the boring old top.

sudo apt install htop

Want to remove it but keep its config files? apt remove htop. Want to remove it and scour its config files from your system like you never knew each other? apt purge htop.

Upgrading is a two-step process. apt update refreshes the list, and apt upgrade actually installs the newer versions of everything you already have installed. For a more comprehensive upgrade that might resolve changing dependencies, there’s apt full-upgrade (which is the new, saner name for the old and terrifying apt-get dist-upgrade).

The Repository System: Your Software Universe

Your system only knows about software in the repositories you’ve told it about. The main ones are:

  • main: Canonical/Ubuntu-supported free software.
  • universe: Community-maintained free software. Vast, but no official support.
  • restricted: Proprietary device drivers (e.g., for your GPU).
  • multiverse: Software that is not free. Use at your own moral and legal discretion.

You can, of course, add more. This is both a power and a peril. Adding a Personal Package Archive (PPA) is a common way to get newer software on an LTS system. But remember: you are trusting a random third party with root access to your machine. It’s like letting a stranger install a new fuel line in your car because they promised more horsepower. Sometimes it’s fine; sometimes your engine blows up.

sudo add-apt-repository ppa:deadsnakes/ppa  # Adds a PPA for multiple Python versions
sudo apt update
sudo apt install python3.11

The One apt Trick You Must Know

The single most useful command isn’t for installing, it’s for finding. If you need a tool but don’t know its exact package name, use apt search. It will save you countless trips to search engines.

apt search "web browser"

You’ll get a list of every package whose name or description contains that phrase. See a package called elinks? That’s a terminal-based text web browser, which is either exactly what you need for a server or a hilarious way to experience the modern web.

The Rough Edges and Questionable Choices

Let’s be direct. The apt command output is a mess. It’s improved, but it still vomits a wall of text that includes random “news” from package maintainers from 2017. It’s functional, but it’s not pretty.

Snap packages? Ubuntu’s push to include Snaps by default (like the Chromium package) is a point of major contention. Snaps are containerized, which is great for security but means they often start slower, integrate poorly with your system theme, and feel… off. Many of us immediately remove the Snap version of Chromium and replace it with a .deb from the official Google repo. It’s a classic case of a vendor thinking they know what’s best for your user experience, and it often backfires with the technically proficient.