Release 4.0 (kirkstone)

This section provides migration information for moving to the Yocto Project 4.0 Release (codename “kirkstone”) from the prior release.

Recipe changes

  • To use more inclusive language in the code and documentation, some variables have been renamed or even deleted. BitBake will stop with an error when renamed or removed variables still exist in your recipes or configuration.

    Please note that the change applies also to environmental variables, so make sure you use a fresh environment for your build.

    The following variables have changed their names:

    In addition, BB_STAMP_WHITELIST, BB_STAMP_POLICY, INHERIT_BLACKLIST and TUNEABI_WHITELIST have been removed.

    Many internal variable names have been also renamed accordingly.

    In addition, in the cve-check output, the CVE issue status Whitelisted has been renamed to Ignored.

    A convert-variable-renames.py script is provided to convert your recipes and configuration, and also warns you about the use of problematic words. The script performs changes and you need to review them before committing. An example warning looks like:

    poky/scripts/lib/devtool/upgrade.py needs further work at line 275 since it contains abort
    
  • Because of the uncertainty in future default branch names in git repositories, it is now required to add a branch name to all URLs described by git:// and gitsm:// SRC_URI entries. For example:

    SRC_URI = "git://git.denx.de/u-boot.git;branch=master"
    

    A convert-srcuri script to convert your recipes is available in OpenEmbedded-Core (OE-Core) and in Poky.

  • Because of GitHub dropping support for the git: protocol, recipes now need to use ;protocol=https at the end of GitHub URLs. The same script as above can be used to convert the recipes.

  • Network access from tasks is now disabled by default on kernels which support this feature (on most recent distros such as CentOS 8 and Debian 11 onwards). This means that tasks accessing the network need to be marked as such with the network flag. For example:

    do_mytask[network] = "1"
    

    This is allowed by default from do_fetch but not from any of our other standard tasks. Recipes shouldn’t be accessing the network outside of do_fetch as it usually undermines fetcher source mirroring, image and licence manifests, software auditing and supply chain security.

  • The TOPDIR variable and the current working directory are no longer modified when parsing recipes. Any code depending on that behaviour will no longer work.

  • The append, prepend and remove operators can now only be combined with = and := operators. To the exception of the append plus += and prepend plus =+ combinations, all combinations could be factored up to the append, prepend or remove in the combination. This brought a lot of confusion on how the override style syntax operators work and should be used. Therefore, those combinations can simply be replaced by a single append, prepend or remove operator without any additional change. For the append plus += (and prepend plus =+) combinations, the content should be prefixed (respectively suffixed) by a space to maintain the same behavior. You can learn more about override style syntax operators (append, prepend and remove) in the BitBake documentation: Appending and Prepending (Override Style Syntax) and Removal (Override Style Syntax).

  • allarch packagegroups can no longer depend on packages which use PKG renaming such as debian.bbclass.

  • LICENSE definitions now have to use SPDX identifiers. A convert-spdx-licenses.py script can be used to update your recipes.

  • SRC_URI: a new Crate Fetcher (crate://) is available for Rust packages.

Class changes

  • The distutils*.bbclasses have been moved to meta-python. The classes and DISTUTILS* variables have been removed from the documentation.

  • blacklist.bbclass is removed and the functionality moved to the base class with a more descriptive varflag named SKIP_RECIPE which will use the SkipRecipe() function. The usage will remain the same:

    SKIP_RECIPE[my-recipe] = "Reason for skipping recipe"
    
  • The Python package build process based on wheels. Here are the new Python packaging classes that should be used: python-flit_core, setuptools_python-build_meta and python_poetry_core.

  • image-prelink.bbclass class is removed.

  • New overlayfs and overlayfs-etc classes are available to make it easier to overlay read-only filesystems (for example) with OverlayFS.

Configuration changes

  • The Yocto Project now allows to reuse Shared State from its autobuilder. If the network connection between our server and your machine is faster than you would build recipes, you can try to speed up your builds by using such Share State and Hash Equivalence by setting:

    BB_SIGNATURE_HANDLER = "OEEquivHash"
    BB_HASHSERVE = "auto"
    BB_HASHSERVE_UPSTREAM = "typhoon.yocto.io:8687"
    SSTATE_MIRRORS ?= "file://.* https://sstate.yoctoproject.org/4.0/PATH;downloadfilename=PATH"
    

Supported host distribution changes

  • New support for AlmaLinux hosts replacing CentOS. The following distribution versions were dropped: CentOS 8, Ubuntu 16.04 and Fedora 30, 31 and 32.

Changes for release notes

  • Share State cache: now using ZStandard (zstd) instead of Gzip compression, for better performance.

  • BitBake has an improved setscene task display.

  • This release fixes the reproducibility issues with rust-llvm and golang. Recipes in OpenEmbedded-Core are now fully reproducible.