July 10th 2023
Snap is developed by Canonical, the same company that is behind Ubuntu.
Snap is pre-installed on Ubuntu and most Ubuntu flavors, like Kubuntu. It is however supported on most Linux distributions.
The biggest benefit of using snap applications is that they are dependency-free. That is why the applications are working so flawlessly across multiple different distributions.
Finding and installing snap packages…
… By using the Terminal
Open a terminal by pressing Ctrl+Alt+T
You can search for applications by using the "snap find" command:
user@computer:~$ snap find proton
Name Version Publisher Notes Summary
proton-wallet 0.0.21 extrahash - proton-wallet
electron-mail 5.1.8 desktop-app - ElectronMail
hyperplay 0.2.3 flavioislima - A web3- compatible game launcher from the future. Carry your wallet, NFTs, tokens, and achieve
ments into every game.
Note: You can also find applications on https://snapcraft.io/
You then install applications with the "snap install" command
user@computer:~$ sudo snap install electron-mail
When it is finished installing you can search for the app:
… Or by using the Snap Store
Alternatively, you can install the Snap Store and browse applications from there. Open a Terminal and install the Snap Store:
user@computer:~$ snap install snap-store
The snap store is also a great tool to keep track of your installed applications and keeping them up to date; not just snaps, but all installed applications.
Under the Hood (The Technical Details)
Usually, when installing applications on Linux with the traditional Package Managers:
Dependencies are automatically downloaded and installed.
Configuration files are stored in /etc
Processes are managed with “systemctl”
Logfiles are stored in /var/log
Dependency Hell
Dependency hell can be one of many things relating to dependencies. One variant of dependency hell is when multiple versions of dependencies starts to conflict with one and another. For example, Application A may need a specific version of dependency A, that doesn't work with Application B's required version of dependency A.
Note: I recommend reading this short article to learn more about dependencies and dependecy hell from Techtarget:
https://www.techtarget.com/searchitoperations/definition/dependency-hell
The Benefits of Using Snaps
A snap is just one single compressed package (named package.snap) that contains the entire filesystem needed to run the application. These packages are not extracted and installed, but are mounted at runtime and are exposed to the user as containers.
Containers isolate applications from each others. Therefore they can run their own dependencies without interfering with other applications.

The advantages of this approach are significant; installation and setup will generally be much smoother and you’re far less likely to run into dependency issues and conflicts. It’s also much more secure.
But it's not always ideal, at least not for the Linux server administrator who are used to edit configuration files inside the /etc directory. With Snap applications, all those configuration files are stored inside the container, which you can’t edit, at least not in the traditional way. Suddenly you have to rethink everything you know about server administration.
The Snap Filesystem
These are the directories and filesystems related to snap:
/snap/
/var/snap/
/var/lib/snapd/
/home/username/snap/
/var/lib/snapd/
The .snap files are stored in /var/lib/snap
user@computer:~$ ls /var/lib/snapd/snaps/
bare_5.snap gnome-42-2204_111.snap
core_14946.snap gtk-common-themes_1535.snap
core_15419.snap kf5-5-104-qt-5-15-8-core22_9.snap
core18_2751.snap kolourpaint_91.snap
core18_2785.snap krita_90.snap
core20_1891.snap p3x-onenote_154.snap
core20_1950.snap p3x-onenote_155.snap
core22_750.snap partial
core22_766.snap snapd_19361.snap
electron-mail_65.snap snapd_19457.snap
firefox_2760.snap snap-store_959.snap
firefox_2800.snap sublime-text_118.snap
gnome-3-28-1804_194.snap telegram-desktop_4806.snap
gnome-3-28-1804_198.snap telegram-desktop_4826.snap
gnome-3-38-2004_137.snap yubioath-desktop_13.snap
gnome-3-38-2004_140.snap
/snap/
When running a snap application, it get's mounted into the /snap virtual filesystem.
user@computer:~$ ls /snap
bare gtk-common-themes
bin kf5-5-104-qt-5-15-8-core22
core kolourpaint
core18 krita
core20 p3x-onenote
core22 README
electron-mail snapd
firefox snap-store
gnome-3-28-1804 sublime-text
gnome-3-38-2004 telegram-desktop
gnome-42-2204 yubioath-desktop
You can see when typing “lsblk” that the applications are indeed mounted:
wlindberg@elaine:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 116,8M 1 loop /snap/core/14946
loop1 7:1 0 4K 1 loop /snap/bare/5
loop2 7:2 0 118,2M 1 loop /snap/core/15419
loop3 7:3 0 55,6M 1 loop /snap/core18/2751
loop4 7:4 0 55,7M 1 loop /snap/core18/2785
loop5 7:5 0 63,5M 1 loop /snap/core20/1891
loop6 7:6 0 63,4M 1 loop /snap/core20/1950
loop7 7:7 0 153,5M 1 loop /snap/electron-mail/65
loop8 7:8 0 73,8M 1 loop /snap/core22/750
loop9 7:9 0 244,8M 1 loop /snap/firefox/2760
loop10 7:10 0 244,5M 1 loop /snap/firefox/2800
loop11 7:11 0 164,8M 1 loop /snap/gnome-3-28-1804/194
loop12 7:12 0 164,8M 1 loop /snap/gnome-3-28-1804/198
loop13 7:13 0 349,7M 1 loop /snap/gnome-3-38-2004/137
loop14 7:14 0 349,7M 1 loop /snap/gnome-3-38-2004/140
loop15 7:15 0 91,7M 1 loop /snap/gtk-common-themes/1535
loop16 7:16 0 448,7M 1 loop /snap/kf5-5-104-qt-5-15-8-core22/9
loop17 7:17 0 224,3M 1 loop /snap/kolourpaint/91
loop18 7:18 0 252,6M 1 loop /snap/krita/90
loop19 7:19 0 80,5M 1 loop /snap/p3x-onenote/154
loop20 7:20 0 53,3M 1 loop /snap/snapd/19361
loop21 7:21 0 53,3M 1 loop /snap/snapd/19457
loop22 7:22 0 65,1M 1 loop /snap/sublime-text/118
loop23 7:23 0 390,8M 1 loop /snap/telegram-desktop/4806
loop24 7:24 0 390,3M 1 loop /snap/telegram-desktop/4826
loop25 7:25 0 227,8M 1 loop /snap/yubioath-desktop/13
loop26 7:26 0 78,2M 1 loop /snap/p3x-onenote/155
loop27 7:27 0 73,9M 1 loop /snap/core22/766
loop28 7:28 0 12,3M 1 loop /snap/snap-store/959
loop29 7:29 0 466,5M 1 loop /snap/gnome-42-2204/111
…
Looking into for example /snap/telegram-desktop/current, you can see the virtual filesystem created for the telegram app.
wlindberg@elaine:/$ ls /snap/telegram-desktop/current/
bin dev etc flavor-select lib meta sbin snap usr var
/var/snap/
The /var/snap/ directory contains various forms of userdata and logfiles generated when using the applications.
/home/user/snap/
/home/user/snap/ contains versioned data of application settings specific for the user.
To summarize:
/snap/ is the virtual filesystem where the applications gets mounted
/var/snap/ is where logfiles are generated
/home/user/snap/ stores user settings for the snap applications
/var/lib/snap/ stores the .snap files.
Snap or APT?
Based on the technical details, what should you choose if an application both exist as a .deb package (APT) and a snap package?
As a rule I would say: Go for the snap package. Personally I experienced that both Telegram and Yubico Authenticator worked a lot better after I reinstalled them as snap applications. Also, I have a feeling that new applications will be developed exclusively for snap in the future.
However there might be some developers that haven’t fully tested their snap version yet. Brave-Browser for example recommends their regular packages for now.
Appendix
For more information about snap and how to administer snaps, I recommend reading these post by David Clinton:
https://hackernoon.com/managing-ubuntu-snaps-the-stuff-no-one-tells-you-625dfbe4b26c
https://medium.com/@dbclin/administrating-nextcloud-as-a-snap-4eb43ca6d095
Thank you David for clarifying for us what the snap package manager really is about.