Bases¶
Snaps declare a base in their snapcraft.yaml file. The base defines the feature set used by Snapcraft, the snapcraft.yaml schema, the environment where the snap is built, and which base snap is used at runtime.
base and build-base¶
If build-base is defined , then the build-base will determine the
environment where the snap is built.
If build-base is not defined, the base will determine the
environment where the snap is built.
For example, base: core24 will build a snap in a Ubuntu 24.04 environment
with the core24 snap installed. Stage packages will be installed from the
24.04 repository.
build-base: devel will build a snap using the upcoming Ubuntu release in
development. This is defined as the Ubuntu image with the devel alias in
the Ubuntu buildd image server.
For base: bare snaps, a build-base is required to determine the feature
set, build environment, and snapcraft.yaml schema.
Base snaps¶
A base snap is a special kind of snap that provides a run-time environment with a cardinal set of libraries that are common to most applications. They’re transparent to users, but they need to be considered and specified when building a snap.
Mounting¶
For strictly confined snaps, the base snap mounts itself as the root filesystem within a snap’s runtime environment. When an application runs, the base’s library paths are searched directly after the paths for that snap.
For classic confined snaps, the base snap is not mounted as the root
filesystem. The base snap is mounted as /snap/<base>/, so the snap can
still load libraries from the base snap. For more information, see the
documentation for classic confinement.
Choosing a base¶
core24 is the recommended base for most snaps. Much like choosing a
distribution base for a project or server, the best base for an application is
dependent on an application’s requirements and which plugins or extensions a
base supports. If there are specific dependencies that cannot be easily met
then the next newest base core22 is a valid and supported alternative.
Snapcraft extensions enable bundling a set of common requirements into a snap, such as for running KDE Plasma or GNOME applications. Extensions support specific bases. See supported extensions for a list of which extensions support which bases.
bare is the recommended base for fully statically linked snaps because they
will not have access to a base snap when running. The snap will have a smaller
footprint at runtime because it does not require a base snap to be downloaded,
installed, and mounted.
Building a base snap¶
While uncommon, developers can build their own base snap. They are responsible for maintenance and updates, in particular:
- bases need to be built from stable packages 
- ABI compatibility cannot broken (ie. never replace symbols or libraries, and be strict) 
- security updates must be proactive 
Ubuntu Core systems need a base snap. These base snaps must be bootable and
include systemd.
