Sailfish OS uses modern software packaging systems to allow controlled over-the-air updates. A given device will be registered for a specific variation of the operating system, where the variant specifies which packages (and which versions of which packages) that device should have access to.
Each device variant is defined by a pattern file which describes the initial filesystem content and packages to be installed in the device. Device variants can be defined for different regions, different operators, different device platforms, or any combination of those or other variation inputs. Individual variants can have entirely different content or packages defined, and the patterns are defined in such a way to maximise reuse capability while minimising maintenance overhead, while enforcing variant segregation at both image-creation and device-update stages of the product lifecycle.
The variation system also allows for vendor-specific licenses, artwork, and other content to be preinstalled on the devices they ship, via package inclusion or via a secure filesystem partition.
Sailfish OS uses rpm packages to handle native software distribution. PackageKit and libzypp are used as the middleware components to handle the on-device rpm database. It supports binary diffing and delta-rpm package upgrades to minimise bandwidth required for package upgrades.
Sailfish OS uses apk packages to handle Android applications. One core service provided by Sailfish OS is called apkd, which mediates installation, deinstallation, upgrades and other interaction with apk packages within Sailfish OS.
Sailfish OS Cheat Sheet lists the most common package handling commands.