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:
TUNEABI_OVERRIDE have been removed.
Many internal variable names have been also renamed accordingly.
In addition, in the
cve-check output, the CVE issue status
has been renamed to
The BB_DISKMON_DIRS variable value now uses the term
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
gitsm://SRC_URI entries. For example:
SRC_URI = "git://git.denx.de/u-boot.git;branch=master"
Because of GitHub dropping support for the git: protocol, recipes now need to use
;protocol=httpsat the end of GitHub URLs. The same
convert-srcuriscript 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
networkflag. 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 ambiguous “BSD” license has been removed from the
common-licensesdirectory. Each recipe that fetches or builds BSD-licensed code should specify the proper version of the BSD license in its LICENSE value.
AVAILABLE_LICENSESvariable 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.
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
distutilshas 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
The setuptools3 class do_install task now installs the
wheelbinary archive. In current versions of
setup.py installmethod is deprecated. If the
setup.pycannot 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
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
gccversion 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
:append/:prepend in combination with other operators
remove operators can now only be combined with
:= operators. To the exception of the
=+ combinations, all combinations could be factored up to the
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
remove operator without any additional change.
the content should be prefixed (respectively suffixed) by a space to maintain
the same behavior. You can learn more about override style syntax operators
remove) in the BitBake documentation:
Appending and Prepending (Override Style Syntax)
and Removal (Override Style Syntax).
blacklist.bbclassis removed and the functionality moved to the base class with a more descriptive
varflagvariable 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"
lnrscript has been removed.
lnrimplemented 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
lnrin your recipes or classes, they should be replaced with ln –relative –symbolic or ln -rs if you prefer the short version.
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
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
bdbto PACKAGECONFIG in a
PACKAGECONFIG:pn-perlat the configuration level.
systemdoptions 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.
libsdl2recipe, 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
libsdl2recipe for more details.
cortexa72-crc-cryptotunes have been removed since the crc extension is now enabled by default for cortexa72. Replace any references to these with
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
packagegroups-core-full-cmdline-libspackagegroup 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.