Yocto Project
The Yocto Project is an open-source collaboration project that provides a flexible set of tools, templates, and processes to help developers create custom Linux-based systems designed for embedded products, including IoT devices across various hardware architectures.[1] Announced by the Linux Foundation in November 2010, it evolved from the OpenEmbedded project, integrating a stabilized core of metadata known as OpenEmbedded-Core (OE-Core) to ensure quality and consistency in builds.[2] The project focuses on enabling the sharing of technologies, software stacks, and best practices among developers, making it the de facto industry standard toolkit for embedded Linux development.[3] At its core, the Yocto Project employs the OpenEmbedded build system, which uses BitBake—a task execution engine inspired by Gentoo's Portage—to process recipes, classes, and configuration files for assembling tailored Linux images.[1] The reference distribution, Poky, combines BitBake with OE-Core and additional metadata to serve as a starting point for custom builds, supporting everything from minimal images to full-featured environments like the GNOME Mobile-based Sato reference UI.[2] Key to its flexibility is the layer model, which allows modular organization of metadata into independent layers for hardware support, user applications, or distributions, facilitating easy customization and extension without altering the core system.[1] The project supports a wide range of architectures, including ARM, x86/Intel, MIPS, PowerPC, and others, with built-in board support packages (BSPs), software bill of materials (SBOM) generation, and QEMU emulation for hardware-agnostic development and testing.[1] It emphasizes binary reproducibility—achieving up to 99.8% for standard images like core-image-minimal—and follows a biannual release cycle in April and October to incorporate updates and maintain stability.[1] The latest major release as of 2025, Walnascar 5.2, continues this tradition by enhancing support for modern embedded and IoT use cases.[4] Governed under the Linux Foundation with a hierarchical structure including a Technical Steering Committee and member tiers (Platinum, Gold, Silver), the Yocto Project is backed by industry leaders such as Intel, AMD, Qualcomm, and Wind River, ensuring broad adoption in validating new system-on-chip (SoC) designs and powering initiatives like the Automotive Grade Linux (AGL) and Reference Design Kit (RDK).[5] This collaborative ecosystem has made it indispensable for embedded developers worldwide, promoting scalable, efficient, and reproducible Linux distributions tailored to specific hardware and software requirements.[3]Overview and History
Project Introduction
The Yocto Project is an open-source collaboration hosted by the Linux Foundation that provides templates, tools, and methods to help developers create custom Linux-based systems for embedded devices.[5][6] Its primary purpose is to enable the construction of tailored Linux distributions that are independent of specific hardware architectures, with a strong emphasis on reproducibility, scalability, and modularity to support diverse embedded applications.[1][7] Key features of the Yocto Project include primary support for processor architectures such as ARM, RISC-V (64-bit), x86, and x86-64; secondary support for PowerPC (32-bit); and community-maintained layers for others including MIPS and RISC-V (32-bit), allowing developers to build systems for a wide range of hardware targets.[8] It offers essential resources like cross-compilation toolchains, software development kits (SDKs), and mechanisms for generating customizable Linux images, while promoting shared technologies to ensure interoperability across different projects and vendors.[7] The project's reference implementation, Poky, serves as a baseline distribution that integrates the OpenEmbedded metadata framework with the BitBake build engine to facilitate initial setup and testing.[7] Official resources for the Yocto Project include its primary website at yoctoproject.org, which provides overviews, development guides, and community information, as well as the comprehensive documentation site at docs.yoctoproject.org, offering detailed manuals, best practices, and reference materials for users.[3]Development History
The Yocto Project originated from the OpenEmbedded project, a community-driven framework for building embedded Linux systems established in 2003. Early development began as a proof-of-concept within the Linux Foundation, with initial releases such as "Purple" in December 2009, "Green" in June 2010, and "Laverne" (version 0.9) in October 2010, laying the groundwork for a standardized build environment. These efforts addressed the fragmentation in embedded Linux tools by leveraging OpenEmbedded's metadata and recipe system to create customizable distributions.[9][10] In March 2011, the Linux Foundation officially launched the Yocto Project as a collaborative workgroup, backed by 22 founding organizations including Intel, Wind River, Dell, Freescale Semiconductor, and Mentor Graphics, with the goal of providing high-quality, open-source tools to streamline embedded Linux development. From its start, the project integrated the OpenEmbedded build system, utilizing BitBake as the task executor and Poky as the reference distribution to enable reproducible builds across architectures. Richard Purdie, who joined as a Linux Foundation Fellow in December 2010, has served as the primary architect, leading the technical direction and maintenance of core components like OpenEmbedded-Core and BitBake since inception.[11][12][13] Key milestones include the 2018 addition of Arm Holdings as a platinum member alongside Intel and others, which facilitated code sharing, optimization for diverse hardware, and broader adoption in embedded ecosystems.[14] By 2020, the project extended support to modern architectures like RISC-V through dedicated layers such as meta-riscv, enabling developers to target emerging open-standard processors.[15][16] Post-2020, the Yocto Project evolved from basic build tools into a comprehensive ecosystem, incorporating security hardening techniques like attack surface reduction and firewall integration,[17][18] as well as container image generation for embedded deployments.[19] In 2023, Exein joined as a platinum member, and as of 2025, the project released version 5.2 Walnascar, continuing to enhance features for embedded and IoT applications.[20][9]Technical Architecture
Core Components
The Yocto Project's build environment is built upon several interconnected core components that enable the creation of custom Linux distributions for embedded systems. At its foundation, BitBake serves as the task execution engine, while OpenEmbedded provides the metadata framework, and Poky acts as the reference distribution integrating these elements. Additional tools such as QEMU, devtool, and Toaster extend functionality for emulation, development, and monitoring, respectively. These components work together to parse metadata, resolve dependencies, execute builds, and support iterative development processes.[21] BitBake is a Python-based task executor that forms the heart of the Yocto Project's OpenEmbedded Build System. It parses metadata files to generate a dependency graph of tasks, such as fetching source code, configuring, compiling, installing, and packaging software components, and then executes them in an efficient manner. BitBake supports parallel task execution to accelerate builds and handles complex dependency resolution, ensuring that prerequisites like cross-compilers are built before dependent components, such as desktop environments. It operates within a controlled environment using tools like Fakeroot and Pseudo to simulate root privileges without requiring actual elevated access.[21][22] OpenEmbedded, often referred to as OE-Core in its foundational form, is the metadata framework that defines the structure for building software in the Yocto Project. It supplies a collection of recipes—instruction sets for building individual software packages—along with classes that encapsulate common build logic and configuration files that set project-wide parameters. These elements allow developers to describe dependencies, such as runtime requirements via RDEPENDS or build-time needs via DEPENDS, enabling reproducible and modular builds across diverse hardware targets. OpenEmbedded's design emphasizes extensibility, providing the data structures that BitBake processes to orchestrate the entire build pipeline.[21][23] Poky is the reference distribution provided by the Yocto Project, serving as a complete, ready-to-use starting point for developers. It combines the BitBake engine with the OpenEmbedded-Core metadata and includes a curated set of meta-layers tailored for common embedded Linux scenarios, such as minimal images or graphical interfaces. By cloning the Poky repository and sourcing its initialization script (oe-init-build-env), users establish a build directory configured with default settings, from which custom distributions can be derived. Poky ensures compatibility and stability, making it the baseline for most Yocto-based projects.[21][24] Beyond these primary elements, the Yocto Project integrates supporting tools to enhance usability. QEMU provides hardware emulation capabilities, allowing built images to run on host machines without physical target devices; it leverages BitBake-generated artifacts like kernels and root filesystems via the runqemu command for rapid testing and QA validation across architectures. Devtool facilitates source code modification and recipe development by extracting upstream sources into a workspace, supporting commands like add, modify, and upgrade to streamline patching and integration with the extensible SDK (eSDK). Toaster offers a web-based interface for build configuration, execution, and monitoring, capturing detailed data on tasks, dependencies, and performance metrics while integrating with BitBake to track command-line and project-based builds.[25][26][27] The interdependencies among these components create a cohesive system: BitBake relies on OpenEmbedded's recipes, classes, and configurations to define and execute tasks, while Poky aggregates them into a functional distribution that incorporates QEMU for emulation, devtool for iterative enhancements, and Toaster for oversight. This architecture allows BitBake to drive the build process by interpreting OpenEmbedded metadata, ensuring efficient dependency handling and parallelization across the toolchain.[21][28]Metadata and Layers
The Yocto Project employs a modular metadata system to define and extend build configurations for embedded Linux distributions, enabling developers to specify software components, dependencies, and customizations in a structured, reusable manner. This metadata primarily consists of recipes, classes, and configuration files, which collectively instruct the OpenEmbedded build system on how to fetch, compile, package, and install software. By organizing these elements into layers, the project facilitates collaboration and isolation of changes, preventing conflicts across different hardware or distribution requirements.[21][29] Recipes, stored as.bb files, serve as the core units of metadata, each defining the instructions for building a specific software package. A typical recipe includes the source code location via the SRC_URI variable, dependencies such as runtime requirements (RDEPENDS) and build-time needs (DEPENDS), applied patches for modifications, and task definitions like do_fetch, do_compile, and do_install to orchestrate the build process. For instance, a recipe for a library might specify downloading from a repository, applying security patches, and installing headers and binaries into designated directories. This structure allows precise control over package versions and behaviors, ensuring reproducibility across builds.[21][30]
Classes, implemented as .bbclass files, provide reusable abstractions for common operations, reducing redundancy in recipes by encapsulating shared logic. These files define variables, functions, and task overrides that can be inherited by multiple recipes using the inherit directive. Examples include the package class, which handles the generation of output packages in formats like RPM or DEB, and the autotools class, which automates configuration and compilation for software using GNU Autotools. Installation-related classes, such as systemd, manage the placement of service files and enablement scripts, allowing recipes to focus on package-specific details while leveraging proven, standardized procedures.[31]
Configuration files, with a .conf extension, establish global or targeted settings that influence recipe behavior and build parameters. These include machine-specific files in conf/machine/ directories to define hardware features like the MACHINE variable for target architecture, distro-specific files in conf/distro/ to set policies such as the DISTRO variable for distribution features, and local configurations like local.conf for user overrides. Such files allow fine-grained adjustments, for example, enabling debug symbols or selecting compiler optimizations, without altering individual recipes.[21][29]
Layers represent directories that group related metadata into self-contained repositories, promoting modularity by separating concerns like board support packages (BSPs) or software stacks. Each layer includes a mandatory conf/layer.conf file to declare its name, priority via BBFILE_PRIORITY, and dependencies with LAYERDEPENDS, alongside subdirectories for recipes (recipes-*), classes (classes/), and configurations (conf/). Prominent examples are meta-openembedded, which extends the core with additional recipes for multimedia and networking, and meta-raspberrypi, a BSP layer providing hardware-specific configurations for Raspberry Pi boards. The bitbake-layers tool aids management by allowing commands to add, remove, or inspect layers, such as bitbake-layers show-layers to display priorities and paths.[29][21]
To maintain build integrity, best practices emphasize declaring layer dependencies in layer.conf to enforce loading order and using overrides—such as :append or :remove suffixes on variables (e.g., DEPENDS:append = " custom-lib")—to extend functionality without modifying upstream recipes. Append files (.bbappend) enable targeted patches or overrides within a layer, while prioritizing layers appropriately resolves parsing conflicts by favoring higher-priority metadata. These techniques ensure extensibility while minimizing integration issues in multi-layer setups.[29][32]
Development Workflow
Building Process
The building process in the Yocto Project begins with initializing the development environment. Developers typically start by cloning the Poky repository, which serves as the reference distribution for Yocto, and then source theoe-init-build-env script to set up the build directory (defaulting to build/).[33] This script configures essential environment variables, such as BBPATH and BUILDDIR, and creates configuration files like conf/local.conf for machine selection (e.g., MACHINE ?= "qemux86") and conf/bblayers.conf to include core layers.[34] Prior to sourcing, the host system must meet requirements including at least 90 GB of free disk space, 32 GB of RAM, and specific packages like build-essential, chrpath, and git version 1.8.3.1 or later.[33]
Once the environment is initialized, the build proceeds through a series of task phases managed by BitBake, the task executor at the core of the OpenEmbedded build system. These phases include fetching source code from upstream repositories or mirrors, unpacking the archives into the work directory, applying patches defined in recipes, configuring the build environment (often using autotools or CMake), compiling the source into binaries, installing the compiled files into a staging area, packaging the results into formats like RPM or IPK, constructing the root filesystem by installing selected packages, and finally generating deployable images such as tarballs or flashable formats.[34] Each phase corresponds to a BitBake task (e.g., do_fetch, do_compile), executed in dependency order to ensure reproducibility and efficiency.[21]
To initiate a build, developers use the bitbake command followed by a target image recipe, such as bitbake core-image-minimal for a basic console-based Linux image or bitbake core-image-sato for one with a graphical interface.[33] BitBake parses metadata from recipes and layers to resolve dependencies and execute tasks, leveraging the shared state (sstate) cache to skip unchanged steps in incremental builds, which significantly reduces build times on subsequent runs.[34] The sstate cache stores task outputs hashed by inputs, allowing reuse from local or remote mirrors like those provided by the Yocto Project.[33]
The primary output artifacts from a successful build reside in the tmp/deploy/images/<machine>/ directory and include root filesystem images (e.g., core-image-minimal-<machine>.tar.bz2), kernel modules, bootloaders, and toolchain tarballs for cross-compilation.[34] Additionally, the process can generate software development kits (SDKs) via targets like bitbake meta-toolchain, providing a self-contained environment with compilers, libraries, and debuggers tailored for the target architecture.[34] These artifacts enable direct deployment to hardware or emulation in QEMU.[33]
Error handling during builds often involves addressing common issues like failed dependency resolution, network fetch problems, or configuration mismatches. For dependency issues, tools such as bitbake -g <recipename> generate dot files visualizing task dependencies, which can be rendered with Graphviz to identify missing components.[35] To debug variable expansions or environment states, bitbake -e [<recipename>] outputs the parsed shell environment, revealing variable values and their sources.[35] Task-specific logs, found in ${WORKDIR}/temp/log.do_<taskname>, provide detailed failure traces, while the graphical dependency explorer (bitbake -u taskexp -g <recipename>) aids in interactive troubleshooting of build graphs.[35] Network-related errors, such as proxy interference during fetches, can be resolved by configuring local.conf with appropriate HTTP proxy settings.[33]
Customization Techniques
The Yocto Project provides flexible mechanisms for customizing embedded Linux builds to accommodate specific hardware, software requirements, or policy needs without altering core components. These techniques leverage the OpenEmbedded build system's layer model, allowing developers to extend or override metadata in a modular way. Customization is typically performed by creating append files, configuration files, or new recipes within dedicated layers, ensuring reproducibility and maintainability.[29] Recipe modifications in the Yocto Project are achieved primarily through BitBake append files, known as .bbappend files, which allow users to extend or override existing recipes without copying the original source. A .bbappend file must share the same root name as the corresponding .bb recipe file and is placed in a custom layer to apply changes, such as adding patches via the SRC_URI variable or setting custom variables like EXTRA_OECONF for compilation options. For example, to patch a recipe like busybox, a developer creates a busybox.bbappend file containing FILESEXTRAPATHS:prepend := "${THISDIR}/files:" and places patch files in a subdirectory, enabling targeted updates like security fixes. This approach preserves the original recipe's integrity while facilitating version-specific overrides.[29][36] Distribution configuration enables the definition of project-wide policies through custom .conf files in a dedicated distribution layer. To create a custom distribution, developers first generate a layer using the bitbake-layers create-layer command, then add a distro-specific file like mydistro.conf in the conf/distro directory, which sets variables such as PACKAGE_CLASSES for formats (e.g., "package_rpm" or "package_ipk") or DISTRO_FEATURES to include security enhancements like selinux. The DISTRO variable in local.conf is then set to "mydistro" to activate these policies, allowing centralized control over defaults like compiler optimizations or filesystem choices across builds. Include files in conf/distro/include can further modularize configurations for different revisions.[37][37] Machine configuration tailors builds to specific hardware by defining settings in MACHINE-specific .conf files located in a BSP layer's conf/machine directory. These files specify variables like PREFERRED_PROVIDER_virtual/bootloader to select bootloaders (e.g., u-boot) and KERNEL_IMAGETYPE for kernel formats, ensuring compatibility with target architectures such as ARM or x86. For kernel customization, a machine .conf might append to SRC_URI with hardware-specific defconfig files or patches, while setting COMPATIBLE_MACHINE in kernel recipes to match the target (e.g., "qemuarm"). Additional hardware details, like display resolutions, are handled via formfactor machconfig files in recipes-bsp/formfactor/files.[38][38] Image customization focuses on tailoring the final root filesystem by extending base image classes or recipes. Developers inherit the core-image class in a custom .bb file (e.g., myimage.bb) and define IMAGE_INSTALL to include packages via lists like "packagegroup-core-boot package1 package2", or use IMAGE_INSTALL:append in local.conf for quick additions. Features such as debugging tools or network servers are enabled through IMAGE_FEATURES (e.g., "debug-tweaks ssh-server-openssh") or EXTRA_IMAGE_FEATURES in local.conf, which propagate to supported core-image variants like core-image-minimal. For more complex needs, custom packagegroup recipes define RDEPENDS and RRECOMMENDS to bundle related components, which are then added to the image recipe.[39][39] Advanced tools streamline customization workflows, with devtool providing commands for source editing and automated recipe generation. The devtool add command creates a new recipe from existing source code by analyzing the workspace layer, setting up fetch and build logic similar to recipetool create, and integrating it into the build environment. For modifications, devtool modify extracts and edits source for an existing recipe, allowing changes in a workspace directory before generating updates via devtool update-recipe, which produces or amends .bbappend files. Runtime package management supports post-build adjustments using tools like opkg for IPK packages or the Dandified Packaging (DNF) system for RPM, enabled by setting PACKAGE_CLASSES and including package-management features in the image. These tools, such as opkg install on the target device, allow dynamic updates without rebuilding the entire image.[26][40]Governance and Community
Organizational Structure
The Yocto Project operates as a non-profit collaborative initiative hosted under the Linux Foundation since its announcement in 2010.[2][41] This oversight ensures neutral governance, resource management, and compliance with open source principles, with the Linux Foundation applying administrative fees on project funds to support operations.[42] The project's technical direction is guided by the Technical Steering Committee (TSC), composed of elected representatives such as Ross Burton, Khem Raj, Mark Hatle, and Denys Dmytriyenko, who oversee repositories, release planning, infrastructure, and architectural decisions through a meritocracy-based model.[43] Richard Purdie serves as the lead architect, responsible for core development oversight, compatibility enforcement, and acting as the default maintainer for key components.[43] Strategic input is provided by the Governing Board, which includes representatives from member organizations such as silicon vendors (e.g., Intel, NXP, Qualcomm), OEMs (e.g., BMW Group, Boeing, LG), and other stakeholders, focusing on budget approval, policy setting, and high-level roadmap alignment.[42][44] An Advisory Board, established by the Governing Board, offers additional counsel from selected participants, including emeritus members and community representatives, to advance the project's mission.[42] Participation is structured through membership tiers that determine financial contributions and representation rights: Platinum members (e.g., AMD, ARM, Intel) contribute $100,000 annually and appoint board representatives with two votes each; Gold members (e.g., Renesas, Texas Instruments) contribute $45,000 and receive one vote; Silver members (e.g., Microchip, STMicroelectronics) contribute on a sliding scale of $5,000–$20,000 based on organization size and elect a shared representative; Associate members, including non-profits and government entities, join at no cost with Governing Board approval.[42][44] Decisions within these bodies emphasize consensus, supplemented by majority voting (requiring at least 51% approval) for formal actions.[42][43]Community Engagement
The Yocto Project encourages community engagement through multiple avenues to support collaboration and contributions. Developers participate via mailing lists for technical discussions and user support, IRC channels for real-time interaction, and regular virtual meetings covering topics like advocacy and evangelism. Contributions are welcomed in forms such as bug reporting, patch submission, testing, and feature development, guided by community values emphasizing inclusivity and merit. The project hosts events including the annual Yocto Project Developer Day, local meetups, and participation in conferences like Embedded Linux Conference. Additionally, the Ambassador Program promotes adoption by creating educational resources, while initiatives like Outreachy provide internships to enhance diversity in open-source participation.[45][46][47]Releases and Support
Release Schedule
The Yocto Project follows a bi-annual release cadence for major versions, with releases typically timed for spring (April) and fall (October) each year.[48] Planning for each release begins 6 to 9 months in advance, involving feature identification, announcement of the release codename, and coordination among contributors.[49] This process includes defined milestones with feature freezes toward the end, followed by intensive quality assurance (QA) cycles to ensure stability.[49] The release process is overseen by the Technical Steering Committee (TSC), which conducts a Release Readiness Review to evaluate feature completeness, defect status, and overall quality before approval.[49] Development proceeds through alpha and beta milestone releases from the master branch for community testing, culminating in release candidates that undergo final QA testing.[49] Upon release, stable branches are created for maintenance, focusing exclusively on bug fixes and security updates without introducing new features.[48] Every two years, the project designates a Long-Term Support (LTS) release, which receives extended maintenance for four years, including security updates, critical bug fixes, and backports aligned with upstream stable series.[50] In contrast, standard (non-LTS) releases receive support for seven months under a strict backport-only policy.[50] To facilitate upgrades, the Yocto Project provides migration guides detailing changes and compatibility considerations between versions.[51] Releases are named using codenames inspired by geographic features, such as Scarthgap for version 5.0, to promote easy reference and compatibility tracking across the ecosystem.[4]Version History
The Yocto Project has evolved through a series of releases since its inception, with major versions introducing foundational tools, layer management enhancements, and support for modern hardware and languages. Releases follow a predictable cadence, typically every six months, with long-term support (LTS) versions providing extended maintenance for production use.[4][52] Early releases established the project's core framework, integrating BitBake as the build engine and focusing on recipe validation and multi-architecture support. The 1.0 release (Bernard) in April 2011 marked the first stable version, based on Linux kernel 2.6.37, and introduced a standardized process for recipe selection and validation alongside basic layer management capabilities.[41][9] Subsequent early versions, such as 1.4 (Dylan) in April 2013, improved layer handling and dependency resolution, enabling more modular customizations for embedded systems.[9] Mid-period releases expanded compatibility and build efficiency. Version 2.0 (Jethro), released in November 2015, added initial support for Python 3 in recipes and enhanced multiconfiguration builds for parallel processing across architectures.[53][9] By 3.1 (Dunfell) in April 2020, an LTS release, key advancements included full removal of Python 2 support, integration of Linux kernel 5.4, and improved security scanning through better reproducible builds and vulnerability checks in the metadata.[54][55][52] Recent releases emphasize performance, new language integrations, and emerging architectures. Version 4.0 (Kirkstone), an LTS release from April 2022, introduced Rust language support for safer systems programming and optimizations for initramfs handling in multiconfig environments.[56][57] The 5.0 LTS (Scarthgap) in April 2024 focused on performance optimizations, upgrading to Linux kernel 6.6, glibc 2.39, and LLVM 18.1, while enhancing build reproducibility and security fixes across over 300 recipes.[58][59][52] Version 5.1 (Styhead), released in October 2024, upgraded to Linux kernel 6.10 and included further recipe updates.[52] Version 5.2 (Walnascar), released in April 2025, added RISC-V architecture enhancements, Linux kernel 6.12, GCC 14.2, and glibc 2.41, along with LZMA compression support for kernels.[60][4] As of November 2025, the latest point release is 5.2.4 (September 2025), nearing end-of-life in November 2025, while 5.3 (Whinlatter) is in active development.[4]| Version | Codename | Release Date | End-of-Life | Major Changes |
|---|---|---|---|---|
| 1.0 | Bernard | April 2011 | March 2012 | Integration of BitBake build system; recipe validation process; support for x86, ARM, and MIPS architectures; Linux kernel 2.6.37.[41][9][52] |
| 1.4 | Dylan | April 2013 | October 2014 | Improved layer management and dependency tracking; enhanced recipe parsing for better modularity.[9][52] |
| 2.0 | Jethro | November 2015 | April 2017 | Python 3 compatibility in recipes; multiconfig support for parallel builds; sstate cache optimizations.[53][9][52] |
| 3.1 | Dunfell | April 2020 | April 2024 | Removal of Python 2; Linux kernel 5.4; enhanced security scanning and reproducible builds.[54][55][52] |
| 4.0 | Kirkstone | April 2022 | April 2026 | Initial Rust support; initramfs multiconfig builds; kernel image recommendations over dependencies.[56][57][52] |
| 5.0 | Scarthgap | April 2024 | April 2028 | Linux kernel 6.6; glibc 2.39; LLVM 18.1; performance optimizations in build tools; over 300 recipe upgrades.[58][59][52] |
| 5.1 | Styhead | October 2024 | May 2025 | Linux kernel 6.10; additional recipe upgrades and stability improvements.[52][61] |
| 5.2 | Walnascar | April 2025 | November 2025 | Linux kernel 6.12; GCC 14.2; glibc 2.41; RISC-V enhancements; LZMA compression for kernels.[60][4][52] |
Compatibility and Branding
Branding Program
The Yocto Project Branding Program is an initiative designed to recognize and promote organizations and products that contribute to or utilize the project, fostering ecosystem growth through formal affiliation and marketing support. Launched under the Linux Foundation's oversight, the program includes tiered memberships for participating organizations and separate compatibility designations for products, layers, and distributions, ensuring consistent branding that highlights collaborative efforts in embedded Linux development.[44][62] Participant status is available to organizations that actively contribute code, funding, or resources to the Yocto Project, such as open source projects, non-profits, small companies with up to 80 employees, or larger entities meeting contribution guidelines. Benefits include the right to use Yocto Project logos in marketing materials, eligibility for advisory board seats on the Governing Board, and access to promotional support like featuring in event booths and advertisements. For higher tiers—Platinum ($100,000 annual fee), [Gold](/page/Gold) (45,000 annual fee), and Silver (sliding scale of $5,000–$20,000 based on employee count)—additional perks encompass priority access to development resources and specific compatibility badges that denote premium involvement. Associate status, free for qualifying non-profits, governments, and open source entities, offers basic recognition without financial commitment or advanced branding rights.[63][64][42][62] The application process for organizational membership involves submitting a form through the Linux Foundation's platform, where applicants detail their contributions and employee count for tier determination; approvals are handled by the Governing Board to ensure alignment with project goals. For product-related branding, separate registration for "Yocto Project Compatible" status requires demonstrating compliance via checklists, including error-free builds and adherence to quality assurance standards, with submissions reviewed for eligibility. All branding usage must follow the Yocto Project Brand Guidelines and Linux Foundation Trademark Policy, prohibiting logo modifications and requiring contact with [email protected] for approvals.[63][65][62] Founding participants include Intel and Wind River, which helped establish the program in its early years to drive initial adoption. As of November 2025, the program has 41 members across tiers, with Platinum members including AMD, Amazon, ARM, BMW Group, Intel, and Qualcomm; Gold members including Ericsson, Linaro, Microsoft, Renesas, and Texas Instruments; and Silver members including Dell Technologies, Microchip, NXP, and STMicroelectronics. These affiliations underscore the program's role in building a diverse coalition.[44][66] Promotion through the branding program extends to Yocto Project events, documentation, and press releases, where member logos and compatible badges are displayed to showcase successful collaborations and encourage broader industry participation. This visibility ties into governance structures by amplifying member influence on project direction.[44][62]Compatibility Standards
The Yocto Project Compatibility Standards define the requirements for products and components to achieve official "Yocto Project Compatible" status, ensuring interoperability, quality, and adherence to best practices in embedded Linux development.[67] These standards apply to layers, board support packages (BSPs), distributions, toolchains, SDKs, and end-user images built using Yocto Project tools, emphasizing build reproducibility, proper documentation, and testing to facilitate seamless integration across the ecosystem.[68] Key criteria for certification include adherence to the latest stable Yocto Project release, public disclosure of layers and recipes via the OpenEmbedded Layer Index, and the inclusion of comprehensive documentation such as README files detailing origins, maintainers, dependencies, and security policies.[69] Products must also pass conformance tests, including theyocto-check-layer script, to verify build reproducibility, image generation without errors, and exclusive use of BitBake fetcher APIs while avoiding invasive changes to core components.[67] Interoperability is ensured by separating hardware-specific, distribution, and recipe metadata, following the BSP Developers Guide, and contributing upstream patches for any modifications.[69]
The certification process involves self-assessment through a checklist of prerequisites, submission of test results (ideally in resulttool format), and optional formal review by the Yocto Project team.[67] Applicants, typically Yocto Project members or sponsored open-source projects, register via the official form, after which approved entities may license the Compatible logo for marketing compliant distributions, toolchains, or SDKs under the Linux Foundation Trademark Policy.[62] This process promotes transparency by encouraging publication of automated CI test results and alignment with release versions detailed in the project's version history.
The "Yocto Project Compatible Layer" designation applies to reusable software components such as BSPs or meta-layers, which must be maintained and listed in the OpenEmbedded Layer Index. Examples of certified components include those from vendors such as NXP (e.g., i.MX series BSPs) and Toradex (e.g., Colibri and Apalis modules), which demonstrate compliance through in-house maintained layers.[67][68]
Enforcement is overseen by the Technical Steering Committee (TSC), which conducts audits to verify ongoing compliance, with provisions for badge revocation in cases of non-adherence, such as failure to update to supported releases or unresolved interoperability issues.[67] This rigorous approach, tied to branding participation, upholds the standards' integrity across the community.[62]