It is important to properly version software to enable software changes and compatibility of components to be tracked, as well as to aid with bug tracking and the application of updates. To achieve this, it is important that we effectively version each source component, binary package and release. The approach to versioning depends on the entity being versioned and in the case of source code whether it is developed specifically for Apertis or an existing project used by Apertis. [Read More]


These are some of the slides and presentations which members of the Apertis community have previously shared (ordered newest to oldest): 2019 Building an entire Debian derivative from Git The Apertis approach to using git as part of the build pipeline by Andrej Shadura 2018 Testing your distribution with LAVA Introducton to testing with LAVA by Andrej Shadura and Guillaume Tucker 2017 Managing build infrastructure for a Debian derivative [Read More]

API Stability

Summary Define API stability guarantees for your project (Stability) Ensure version numbers are changed as appropriate when API changes (Versioning) API and ABI At a high level, an API – Application Programming Interface – is the boundary between two components when developing against them. It is closely related to an ABI – Application Binary Interface – which is the boundary at runtime. It defines the possible ways in which other components can interact with a component. [Read More]

Debug Symbol Packages

Packages automatically generate debug symbol packages at build time, the packages have the package name extension -dbgsym. Infrastructure To be able to benefit from dbgsym packages, the infrastructure must be ready for them, the requirements are: reprepro: must support dbgsym since 4.17.0 debhelper: with dbgsym support since 9.20160114 dpkg-dev: support for dbgsym since 1.18.2~ When building packages with those tools, automatic debug symbols will be generated for all built packages. [Read More]

Boot Process

Apertis has a fairly typical Linux boot process: A platform specific bootloader performs initial low-level configuration of the system The Linux kernel performs higher level configuration and creates a standardised environment The kernel passes execution to the user space which enables services based on the functionality provided by the kernel and sets up the system to accept user input Critical sequences during startup The phases during startup generally proceed from most- to least-critical. [Read More]


Internationalization (commonly abbreviated i18n) is a topic which covers many areas: more than just translating UI strings, it involves changing settings and defaults to match the customs and conventions of the locale a program is being run in. For example, days of the week, human name formats, currencies, etc. Summary Design projects to be internationalized from the beginning. (Basics) Use gettext (not intltool) for string translation. (Basics) Remember that all strings are in UTF-8, and may contain multi-byte characters. [Read More]


Tracker is a desktop search engine, metadata indexing and storage service. It is the recommended way to search for user files and access metadata about them. A full introduction to Tracker is here. Summary Avoid SPARQL injection vulnerabilities by using prepared statements. (SPARQL injection) Using Tracker Tracker is effectively a metadata store which applications can query using the SPARQL query language. SPARQL is similar to SQL, so all the same considerations about SQL injection apply when using it. [Read More]

Power Loss Robustness

In order to test that Apertis is capable of handling power loss, the tests from from GLib test suite to ensure that the robustness features built into these libraries can be verified to be working. GLib/GIO The GIO library within GLib is the standard way to do file handling, I/O, etc. It also has a set of functional tests for all the features provided by the library. Out of these, the subset of GIO tests that deal with local I/O have been integrated into the image testing. [Read More]

Multimedia Buffering

Various improvements to both Gstreamer and clutter-gst 3.0 have been incorporated in Apertis and upstream. Multimedia buffering strategies For playback of network streams typically some buffering has to be used to ensure playback without any pauses, stuttering or other glitches. Broadly speaking two types of buffering strategies are used, both of which serve slightly different use-cases: Stream buffering Progressive buffering Progressive buffering Progressive buffering (download buffering in the clutter API) is the buffering strategy most people are used to from e. [Read More]