Coming from Windows or macOS, the first surprise on Linux is the question behind every install: why are there four ways to do it? On Ubuntu and its relatives, the same app can arrive through apt, a Snap, a Flatpak, or a downloaded file, each behaving differently. None is wrong, but picking blindly leads to classic beginner headaches: an app that never updates, two copies of one program, or a mysterious permission error.
This guide settles it: the three main methods, when to reach for each one, and how to undo a bad install. It assumes an Ubuntu or Debian-based system, where most newcomers land.
Before you start
You need a terminal and an administrator (sudo) password. If the terminal still feels foreign, our weekend guide to Linux command line basics will get you comfortable first. One rule covers everything here: prefer your distribution's repositories and the official app stores (Flathub, Snap Store) over random files from websites.
Step 1: Install with apt, the system package manager
apt is the default tool on Ubuntu, Debian, Linux Mint, and Pop!_OS. It installs software from your distribution's repositories, shares libraries between programs, and updates everything together with the system. It is the fastest, smallest, and most integrated option, and the right default for system tools and everyday apps your distro ships.
First, refresh the list of available packages, then install. These are two separate actions, and beginners often run only one of them:
sudo apt update
sudo apt install vlcapt update downloads the latest package lists; it installs nothing. apt install does the actual installing. Running install without update first is the most common reason a fresh system claims a package "has no installation candidate" when the package plainly exists.
To find software before installing it, search first:
apt search video editor
apt show vlcWhen you no longer want something, remove it, and occasionally clean up libraries left behind:
sudo apt remove vlc
sudo apt autoremoveTo update everything apt manages in one pass, run sudo apt update && sudo apt upgrade. Note the difference: update refreshes the lists, upgrade installs newer versions.
apt has one real limitation: repository versions freeze when your distribution releases. If you need the newest release of an app months after installing Ubuntu, apt alone will not give it to you. That is the gap the next two methods fill, and it is worth knowing before you upgrade to a new Ubuntu release.
Step 2: Install with Flatpak from Flathub
Flatpak is a universal packaging system: one package runs on nearly any distribution, bundled with its own dependencies and sandboxed from the rest of the system. Its main app store is Flathub. It is the best choice for desktop apps you want sandboxed, kept current independently of your distribution release, or installed without administrator rights.
Ubuntu does not ship Flatpak by default, so set it up once:
sudo apt install flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepoThe second command registers Flathub as a source; the --if-not-exists flag makes it safe to run again. After this, log out and back in, then install something:
flatpak install flathub org.gimp.GIMP
flatpak run org.gimp.GIMPFlatpak apps are identified by reverse-domain IDs like org.gimp.GIMP, which you can copy from the app's Flathub page. Notice that no sudo was needed: Flatpak can install per user, an advantage on shared machines.
Maintenance is explicit, unlike Snap's automatic updates. Check for updates yourself on a regular schedule:
flatpak update
flatpak list --app
flatpak uninstall org.gimp.GIMP
flatpak uninstall --unusedThat last command removes runtimes no installed app needs anymore, and it is the one people forget, which is how Flatpak quietly eats gigabytes over a year. One honest caveat: sandboxing means a Flatpak app may not see files outside your home folder until you grant access, so check permissions before assuming the app is broken.
Step 3: Install with Snap on Ubuntu
Snap is Canonical's universal format, pre-installed on Ubuntu and integrated into its software center. Snaps are self-contained like Flatpaks, but they update automatically, typically several times a day, and roll back automatically if an update fails. That makes Snap the lowest-maintenance option.
sudo snap install spotify
snap list
sudo snap refresh
sudo snap remove spotifyrefresh is Snap's word for update, and snap list shows everything installed. Two Snap behaviors surprise newcomers. First, the first launch of a Snap can feel slow, because the compressed package is mounted on demand; later launches are normal, so judge speed on the second run, not the first. Second, some apps need --classic confinement, for example developer tools that must see the whole system:
sudo snap install code --classicOnly use --classic when the store listing or the developer's instructions ask for it: it removes the sandbox.
Step 4: The two escape hatches, .deb files and AppImages
Sometimes the app you want is in none of the three stores above, and the developer offers a direct download instead. A .deb file is Ubuntu's equivalent of a Windows installer: double-click it, or install from the terminal with sudo apt install ./package-name.deb (note the ./, which tells apt the file is local). Prefer this over the old dpkg -i advice, because apt resolves dependencies for you instead of failing halfway.
An AppImage is a single portable file: download it, make it executable, and run it. Nothing is installed at all:
chmod +x package-name.AppImage
./package-name.AppImageAppImages are handy for trying a tool without committing, but they do not update themselves and do not appear in your app menu automatically. Treat both formats as exceptions, not defaults, and only download them from the developer's official site.
Which method should you choose?
Use this order of preference:
- apt first for system tools, libraries, and apps your distribution ships. Smallest, fastest, and updated with the system.
- Flatpak second for desktop apps you want sandboxed or newer than your release offers, especially from Flathub.
- Snap third when Ubuntu ships the app that way, or when you want automatic updates with rollback.
- .deb or AppImage last, only when the developer offers nothing else, and only from the official site.
If you install the same app twice through different methods, you will see two icons and wonder which one holds your settings. Avoid that: pick one method per app, and if you switch methods, uninstall the old copy first.
Troubleshooting the usual failures
"Package has no installation candidate" usually means you skipped sudo apt update, or the package lives in a repository you have not enabled. Update first, search second.
"Remote flathub not found" means the remote-add step was skipped or mistyped. Re-run it exactly as written above and check with flatpak remotes.
A Flatpak app cannot see your files. That is sandboxing doing its job. Check the app's permissions rather than reinstalling it.
A Snap launches slowly the first time. Wait for the second launch before concluding anything is wrong.
Verify your setup
Run this short checklist:
sudo apt update && sudo apt upgrade
flatpak update
sudo snap refreshIf all three complete without errors, you can install, update, and remove software through every method Linux offers, and you know which one to reach for next time. That is the whole skill: knowing that apt is the system default, Flatpak is the sandboxed current version, and Snap is the self-updating one. It comes in handy after you finish setting up a dual-boot system or any other project where a fresh install suddenly needs a dozen new tools.
Sources
- Debian Wiki: APT - https://wiki.debian.org/Apt
- Flatpak documentation - https://docs.flatpak.org/
- Snap documentation - https://snapcraft.io/docs
- Flathub - https://flathub.org/


