Release 4.0 (kirkstone)

Migration notes for 4.0 (kirkstone)

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

Inclusive language improvements

To use more inclusive language in the code and documentation, some variables have been renamed, and some have been deleted where they are no longer needed. In many cases the new names are also easier to understand. 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:


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.

The BB_DISKMON_DIRS variable value now uses the term HALT instead of ABORT.

A 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/ needs further work at line 275 since it contains abort

Fetching changes

  • 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://;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 convert-srcuri script mentioned above can be used to convert your 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.

License changes

  • The ambiguous “BSD” license has been removed from the common-licenses directory. Each recipe that fetches or builds BSD-licensed code should specify the proper version of the BSD license in its LICENSE value.

  • LICENSE variable values should now use SPDX identifiers. If they do not, by default a warning will be shown. A script can be used to update your recipes.

  • INCOMPATIBLE_LICENSE should now use SPDX identifiers. Additionally, wildcarding is now limited to specifically supported values - see the INCOMPATIBLE_LICENSE documentation for further information.

  • The AVAILABLE_LICENSES variable has been removed. This variable was a performance liability and is highly dependent on which layers are added to the configuration, which can cause signature issues for users. In addition the available_licenses() function has been removed from the license class as it is no longer needed.

Removed recipes

The following recipes have been removed in this release:

  • dbus-test: merged into main dbus recipe

  • libid3tag: moved to meta-oe - no longer needed by anything in OE-Core

  • libportal: moved to meta-gnome - no longer needed by anything in OE-Core

  • linux-yocto: removed version 5.14 recipes (5.15 and 5.10 still provided)

  • python3-nose: has not changed since 2016 upstream, and no longer needed by anything in OE-Core

  • rustfmt: not especially useful as a standalone recipe

Python changes

  • distutils has been deprecated upstream in Python 3.10 and thus the distutils* classes have been moved to meta-python. Recipes that inherit the distutils* classes should be updated to inherit setuptools* equivalents instead.

  • The Python package build process is now based on wheels. The new Python packaging classes that should be used are python_flit_core, python_setuptools_build_meta and python_poetry_core.

  • The setuptools3 class do_install task now installs the wheel binary archive. In current versions of setuptools the legacy install method is deprecated. If the cannot be used with wheels, for example it creates files outside of the Python module or standard entry points, then setuptools3_legacy should be used instead.

Reproducible as standard

Reproducibility is now considered as standard functionality, thus the reproducible class has been removed and its previous contents merged into the base class. If you have references in your configuration to reproducible in INHERIT, USER_CLASSES etc. then they should be removed.

Additionally, the BUILD_REPRODUCIBLE_BINARIES variable is no longer used. Specifically for the kernel, if you wish to enable build timestamping functionality that is normally disabled for reproducibility reasons, you can do so by setting a new KERNEL_DEBUG_TIMESTAMPS variable to “1”.

Supported host distribution changes

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

  • gcc version 7.5 is now required at minimum on the build host. For older host distributions where this is not available, you can use the buildtools-extended tarball (easily installable using scripts/install-buildtools).

:append/:prepend in combination with other operators

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 should 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).

Miscellaneous changes

  • blacklist.bbclass is removed and the functionality moved to the base class with a more descriptive varflag variable named SKIP_RECIPE which will use the bb.parse.SkipRecipe() function. The usage remains the same, for example:

    SKIP_RECIPE[my-recipe] = "Reason for skipping recipe"
  • allarch packagegroups can no longer depend on packages which use PKG renaming such as debian. Such packagegroups recipes should be changed to avoid inheriting allarch.

  • The lnr script has been removed. lnr implemented the same behaviour as ln –relative –symbolic, since at the time of creation –relative was only available in coreutils 8.16 onwards which was too new for the older supported distros. Current supported host distros have a new enough version of coreutils, so it is no longer needed. If you have any calls to lnr in your recipes or classes, they should be replaced with ln –relative –symbolic or ln -rs if you prefer the short version.

  • The package_qa_handle_error() function formerly in the insane class has been moved and renamed - if you have any references in your own custom classes they should be changed to

  • When building perl, Berkeley db support is no longer enabled by default, since Berkeley db is largely obsolete. If you wish to reenable it, you can append bdb to PACKAGECONFIG in a perl bbappend or PACKAGECONFIG:pn-perl at the configuration level.

  • For the xserver-xorg recipe, the xshmfence, xmlto and systemd options previously supported in PACKAGECONFIG have been removed, as they are no longer supported since the move from building it with autotools to meson in this release.

  • For the libsdl2 recipe, various X11 features are now disabled by default (primarily for reproducibility purposes in the native case) with options in EXTRA_OECMAKE within the recipe. These can be changed within a bbappend if desired. See the libsdl2 recipe for more details.

  • The cortexa72-crc and cortexa72-crc-crypto tunes have been removed since the crc extension is now enabled by default for cortexa72. Replace any references to these with cortexa72 and cortexa72-crypto respectively.

  • The Python development shell (previously known as devpyshell) feature has been renamed to pydevshell. To start it you should now run:

    bitbake <target> -c pydevshell
  • The packagegroups-core-full-cmdline-libs packagegroup is no longer produced, as libraries should normally be brought in via dependencies. If you have any references to this then remove them.

  • The TOPDIR variable and the current working directory are no longer modified when parsing recipes. Any code depending on the previous behaviour will no longer work - change any such code to explicitly use appropriate path variables instead.

  • In order to exclude the kernel image from the image rootfs, RRECOMMENDS:${KERNEL_PACKAGE_NAME}-base should be set instead of RDEPENDS:${KERNEL_PACKAGE_NAME}-base.