Generated by GPT-5-mini| Snap (software) | |
|---|---|
| Name | Snap |
| Title | Snap (software) |
| Developer | Canonical Ltd. |
| Released | 2014 |
| Operating system | Linux distributions |
| Programming language | Go, Python |
| License | Various (free and proprietary) |
Snap (software) Snap is a software packaging and deployment system developed by Canonical Ltd. that enables distribution of self-contained applications across multiple Linux distributions and versions. It provides transactional installation, automatic updates, and confinement features intended to improve consistency for developers and administrators deploying applications on desktops, servers, cloud services, and embedded systems.
Snap is a cross-distribution packaging format and runtime that packages applications with their dependencies, aiming to simplify delivery across Ubuntu, Debian, Fedora, Red Hat Enterprise Linux, CentOS and other distributions. The system comprises a package format ("snap"), a command-line tool ("snapd"), and an ecosystem including the Snap Store, client tools, and integration with systemd, Upstart and cloud platforms like OpenStack and Kubernetes. Canonical positioned Snap alongside other packaging and distribution efforts such as Flatpak, AppImage, and traditional Debian package tooling to address fragmentation across the Linux landscape.
Development of Snap began within Canonical around 2014 as part of efforts to unify application delivery for Ubuntu across desktop, cloud and mobile initiatives, following earlier projects like Ubuntu Touch and the convergence strategy promoted by Mark Shuttleworth. Early public mentions occurred in 2014–2015 alongside changes to Ubuntu Core and integration work with the Ubuntu Software Center and Launchpad. Over subsequent years Canonical iterated on confinement, transactional updates and the Snap Store, engaging with projects and organizations such as GNOME Project, KDE, Mozilla, and commercial partners including Microsoft for cross-platform application distribution. Snap's development has been managed within Canonical's engineering teams while contributions and feedback have come from the wider Linux community and downstream vendors like Linux Mint and elementary OS.
The Snap ecosystem centers on the snapd background service, the snap package format, and the Snap Store backend. snapd handles installation, update control, mount-like loopback mounting of squashfs archives, service supervision and enforcement of confinement via interfaces and security policies. Snaps are distributed as read-only squashfs archives containing application binaries, libraries, and metadata (snapcraft.yaml), produced by the build tool Snapcraft which supports plugins and builders for languages and toolchains such as Go (programming language), Python (programming language), Rust (programming language), Java, and Electron (software framework). Integration points include the XDG Base Directory Specification for desktop apps, Wayland compositors such as Mutter and Sway, and init systems like systemd for service snaps and timers.
Developers define snap metadata using snapcraft.yaml and build snaps with Snapcraft, which can run build steps locally or in builders hosted by Canonical and integrated with continuous integration systems like Jenkins, GitLab CI, and Travis CI. The Snap Store provides channels (stable, candidate, beta, edge) and tracks for revision management, release promotion and assertions; publishers sign snaps and manage confinement interfaces and permissions through store policies. Distribution targets include consumer desktops running Ubuntu Desktop, cloud images such as Ubuntu Server and CoreOS derivatives, IoT devices like those supported by Raspberry Pi, and container orchestration platforms where snaps may be used within images or hybrid packaging strategies.
Snap implements confinement via a combination of Linux kernel features and userspace policy: AppArmor profiles, seccomp filters, mount namespaces, Linux capabilities, and private /tmp with bind mounts. Interfaces provide controlled access to resources (e.g., network, audio, serial ports) and are mediated by snapd and the Snap Store; classic confinement exists for snaps requiring full filesystem access. Security considerations have involved CVEs and responses coordinated with upstream projects such as Linux kernel maintainers, the AppArmor project, and vendors like Canonical and Ubuntu Security Team. Snap's model contrasts with sandboxing approaches used by Flatpak (which uses Bubblewrap and Flatpak Portals) and container runtimes such as Docker.
Snap has been adopted by application vendors including Mozilla, Spotify, Microsoft (for Visual Studio Code), and Canonical’s own ecosystem, and used on devices from vendors participating in Ubuntu Core and IoT initiatives. Criticism has come from distributions and projects like Debian, Linux Mint, and parts of the GNOME Project concerning store centralization, default bundling in Ubuntu, disk space use due to duplicate libraries, and concerns about proprietary store governance; defenders cite ease of packaging, transactional updates, and security confinement. Discussions have occurred in community venues including Launchpad, mailing lists, bug trackers, and issue trackers hosted on platforms such as GitHub and GitLab.
Compared to traditional packaging like Debian package (.deb) or RPM Package Manager (.rpm), Snap emphasizes bundled dependencies and cross-distribution compatibility at the cost of larger package size and runtime mounts; compared to Flatpak, Snap targets both desktop and server/IoT use cases and integrates with the Snap Store, while Flatpak focuses on desktop portal integrations and sandboxing via Bubblewrap. AppImage offers single-file portable execution without a central store, whereas Snap provides transactional updates and a managed store. Container technologies like Docker and orchestration tools such as Kubernetes target process isolation and deployment at scale, but differ from snaps in lifecycle, update semantics, and integration with desktop environments.
Category:Linux package management