Igalia, known for its involvement in the development of free projects such as GNOME, GTK, WebKitGTK, Epiphany, Maemo, GStreamer, Wine, Mesa, and freedesktop.org, has introduced the Moonforge project, simplifying the creation and maintenance of custom Linux distributions for various devices and embedded systems. The distribution's components are based on build tools and package metadata from the OpenEmbedded and Yocto projects. Project-specific developments are distributed under the MIT license.
Moonforge provides developers and system integrators with a framework, a set of configuration files, and a collection of components for building atomically updatable system images based on proven and widely used industry technologies such as Yocto, BitBake, and Kas. A simplified update installation process is supported for created images, ensuring long-term maintenance. The main goal of the project is to provide embedded system developers with convenient tools, allowing them to focus on developing product-specific functionality without wasting time on distribution creation and maintenance tasks.
The system image is assembled from a set of ready-made Yocto modules. Each module is responsible for specific capabilities or support for a particular target hardware platform. For instance, modules are available for Docker, QEMU, or Podman support, management of updates via RAUC, and creating graphical interfaces based on composite Weston, launching a browser interface based on WebKit for internet kiosks, and builds for Raspberry Pi 4 and 5 boards. server Three release distribution channels are supported: stable (stable LTS branch), next (branch where the next LTS release is developed), and main (experimental branch where development is carried out). Each branch is tied to its own version of the Yocto component set. The stable branch is updated once a month and corresponds to the LTS releases of Yocto.
Three release distribution channels are supported: stable (the stable LTS branch), next (the branch where the next LTS release is developed), and main (the experimental branch under development). Each branch is tied to its own version of the Yocto component set. The stable branch is updated once a month and corresponds to Yocto LTS releases.
Updates are delivered via OTA (Over-The-Air) using Mender tooling and install atomically by completely replacing the entire system. Two identical root partitions are created on the storage — active and passive. A new update is installed in the passive partition, without affecting the operation of the active one. After a reboot, the partitions swap — the partition with the new update becomes active, while the previously active partition is switched to passive mode and awaits the next update installation. If something goes wrong after the update, a rollback to the previous system version is performed.
The BitBake tool is used for creating system images, while kas is used for generating configurations and ensuring reproducible builds. Builds, updates, vulnerability reports, and SBOM (Software Bill of Materials) metadata are automatically collected and published using continuous integration and continuous deployment (CI/CD) systems. servers, both in local and public or private cloud environments.
To ensure transparency and predictability in the process of creating derivative products in the distribution, a strict separation between upstream and downstream components is applied, allowing developers to add additional functionality on top of the basic framework if necessary. Configuration is defined in a declarative representation using the YAML format and covers areas such as connecting external repositories, activating Yocto modules, managing dependencies between distribution components, applying additional patches, and modifying default system settings.
Source: opennet.ru
