mbox series

[00/22] Rework LICENSE to be SPDX License Expressions

Message ID 20260714190405.3328796-1-JPEWhacker@gmail.com
Headers show
Series Rework LICENSE to be SPDX License Expressions | expand

Message

Joshua Watt July 14, 2026, 6:31 p.m. UTC
Reworks the way that the LICENSE variable is used so that it uses valid
SPDX License Expressions instead of the custom expressions that were
used previously (which are based on Python syntax). This includes
support for the SPDX "WITH" operator which allows a license exception to
be attached to a license identifier.

The old licenses expressions are still allowed, and will still be
correctly parsed, however a warning will be issued that indicates the
new license string that should be used.

Most layers should be able to use the newly-revised
scripts/contrib/convert-spdx-licenses.py script to do the majority of
the conversion work, although some manual work may still be required if
conditional or complex LICENSE expressions are encountered.

SPDX License Expressions require that all licenses listed are either a
known identifier (e.g. "GPL-2.0-or-later") or start with the prefix
"LicenseRef-" which indicates a custom license. When converting from old
expressions to new one this will need to be followed (the suggested new
license in the warning and the conversion script will automatically add
this prefix for any unrecognized license identifiers). This will most
commonly be the case for NO_GENERIC_LICENSE files; for a good example of
what needs to be done here see the changes to the linux-firmware recipe.
When adding new LicenseRef- licenses to a recipe, the actual license
name should be prefixed with the name of the recipe (e.g.
"LicenseRef-myrecipe-mylicense") to prevent conflicts when merging
multiple license documents together (e.g. in an image).

SPDX also introduces the "WITH" operator to add an exception to a
license instead of using a bespoke identifier to combine the two, as was
done with the legacy license expressions. Because of this, the logic for
dealing with the INCOMPATIBLE_LICENSE family of variables has changed
slightly. The main difference is that INCOMPATIBLE_LICENSE will now
match the LHS of a "WITH" expression (where as previously this was
"ignored" since it was a bespoke license ID). In order to allow a
license that would normally be rejected, but can be allowed with an
exception, specifically allowed exceptions can be added to the
INCOMPATIBLE_LICENSE_EXCEPTIONS variable (keep in mind, EXCEPTIONS here
means "exceptions to INCOMPATIBLE_LICENSES", not specifically SPDX
License Exceptions). If an SPDX exception is present here, any license
that has that exception will be allowed, even if it would normally match
INCOMPATIBLE_LICENSE. For example, to disallow all GPLv3 except for
those with the GCC exception, use:

    INCOMPATIBLE_LICENSE = "GPL-3.0* LGPL-3.0*"
    INCOMPATIBLE_LICENSE_EXCEPTIONS = "GCC-exception-3.1" # This new line is required


Additionally, "PD" ("Public Domain") is not allowed as a generic license
identifier. Aside from "PD" not being a valid SPDX License Identifier,
most "Public Domain" licenses do have some sort of text associated with
them (see the HPND family of SPDX Licenses, or use the [1](SPDX License
Match Website) ). In addition, the meaning of "Public Domain" can vary
by jurisdiction, so the actual text with a LicenseRef- or a SPDX License
Identifier needs to be used instead.

Finally, "CLOSED" is also no longer allowed as a license expression
(since it is not a valid SPDX License Identifier). Instead use a
LicenseRef- to point to a file that contains the actual license text
(usually something like "Copyright <name>, all rights reserved")

[1]: https://tools.spdx.org/app/check_license/


Joshua Watt (22):
  scripts/pull-spdx-licenses.py: Add exceptions
  Add SPDX License Exceptions
  Add SPDX license library
  Parse LICENSE as SPDX Expression
  linux-firmware: Convert to SPDX license strings
  meta-selftest: Add NO_GENERIC_LICENSE
  convert-spdx-licenses: Convert to valid SPDX expressions
  gcc-common.inc: Remove LICENSE
  gcc: Update license
  xz: Replace deprecated SPDX identifier
  autoconf-archive: Replace deprecated SPDX identifier
  gnu-config: Replace deprecated SPDX identifier
  libglvnd: Replace deprecated SPDX identifier
  flac: Replace deprecated SPDX identifier
  libgit2: Replace deprecated SPDX identifier
  Fix up licenses
  lib: oe: license: Rework package licenses matching
  classes/go-mod-update-modules: Switch to SPDX license
  license: Remove tidy_licenses()
  meta-selftest: Change license on test recipes
  Convert licenses to SPDX expressions
  meta-selftest: libxpm: Fix license

 .../python/python3-guessing-game_git.bb       |    2 +-
 .../python3-guessing-game_git.bb.upgraded     |    2 +-
 .../sysdig/sysdig-selftest_0.28.0.bb          |    2 +-
 .../recipes-test/aspell/aspell_0.0.0.1.bb     |    2 +-
 .../devtool/devtool-patch-overrides.bb        |    3 +-
 .../devtool/devtool-test-ignored.bb           |    3 +-
 .../devtool/devtool-test-localonly.bb         |    3 +-
 .../devtool/devtool-test-long-filename.bb     |    3 +-
 .../devtool/devtool-test-reset-re++.bb        |    3 +-
 .../devtool/devtool-test-subdir.bb            |    3 +-
 .../license/incompatible-license-alias.bb     |    2 +-
 .../license/incompatible-licenses.bb          |    2 +-
 .../license/incompatible-nonspdx-license.bb   |    3 +-
 .../recipes-test/logging-test/logging-test.bb |    3 +-
 .../sysroot-test/sysroot-la-test_1.0.bb       |    3 +-
 .../sysroot-test/sysroot-pc-test_1.0.bb       |    3 +-
 .../sysroot-test/sysroot-shebang-test_1.0.bb  |    3 +-
 .../sysroot-test/sysroot-test-arch1_1.0.bb    |    3 +-
 .../sysroot-test/sysroot-test-arch2_1.0.bb    |    3 +-
 .../sysroot-test/sysroot-test_1.0.bb          |    3 +-
 .../recipes-skeleton/libxpm/libxpm_3.5.6.bb   |    2 +-
 meta/classes-global/insane.bbclass            |    8 +-
 meta/classes-global/license.bbclass           |  113 +-
 .../go-mod-update-modules.bbclass             |   21 +-
 meta/classes-recipe/license_image.bbclass     |   31 +-
 meta/classes/buildhistory.bbclass             |    3 +-
 meta/classes/copyleft_filter.bbclass          |    4 +-
 meta/conf/licenses.conf                       |    4 +
 meta/files/common-licenses/389-exception      |    7 +
 meta/files/common-licenses/Asterisk-exception |    5 +
 .../Asterisk-linking-protocols-exception      |   13 +
 .../common-licenses/Autoconf-exception-2.0    |    5 +
 .../common-licenses/Autoconf-exception-3.0    |   26 +
 .../Autoconf-exception-generic                |    4 +
 .../Autoconf-exception-generic-3.0            |    6 +
 .../common-licenses/Autoconf-exception-macro  |   12 +
 .../common-licenses/Bison-exception-1.24      |    4 +
 .../files/common-licenses/Bison-exception-2.2 |    5 +
 .../common-licenses/Bootloader-exception      |   10 +
 .../common-licenses/CGAL-linking-exception    |    4 +
 .../files/common-licenses/CLISP-exception-2.0 |   15 +
 .../common-licenses/Classpath-exception-2.0   |    3 +
 .../Classpath-exception-2.0-short             |   11 +
 .../common-licenses/DigiRule-FOSS-exception   |   54 +
 .../Digia-Qt-LGPL-exception-1.1               |    9 +
 meta/files/common-licenses/FLTK-exception     |   17 +
 .../common-licenses/Fawkes-Runtime-exception  |    1 +
 meta/files/common-licenses/Font-exception-2.0 |    1 +
 meta/files/common-licenses/GCC-exception-2.0  |    1 +
 .../common-licenses/GCC-exception-2.0-note    |   16 +
 meta/files/common-licenses/GCC-exception-3.1  |   33 +
 meta/files/common-licenses/GNAT-exception     |    6 +
 .../common-licenses/GNOME-examples-exception  |    1 +
 .../common-licenses/GNU-compiler-exception    |    6 +
 .../GPL-3.0-389-ds-base-exception             |   10 +
 .../GPL-3.0-interface-exception               |    7 +
 .../common-licenses/GPL-3.0-linking-exception |    3 +
 .../GPL-3.0-linking-source-exception          |    3 +
 meta/files/common-licenses/GPL-CC-1.0         |   46 +
 .../common-licenses/GStreamer-exception-2005  |    1 +
 .../common-licenses/GStreamer-exception-2008  |    1 +
 meta/files/common-licenses/Gmsh-exception     |   16 +
 .../Independent-modules-exception             |   18 +
 .../common-licenses/KiCad-libraries-exception |    1 +
 .../LGPL-3.0-linking-exception                |   16 +
 meta/files/common-licenses/LLGPL              |   56 +
 meta/files/common-licenses/LLVM-exception     |   15 +
 meta/files/common-licenses/LZMA-exception     |    3 +
 meta/files/common-licenses/Libtool-exception  |    1 +
 meta/files/common-licenses/Linux-syscall-note |   12 +
 meta/files/common-licenses/OCCT-exception-1.0 |    3 +
 .../OCaml-LGPL-linking-exception              |    1 +
 .../OpenJDK-assembly-exception-1.0            |   31 +
 meta/files/common-licenses/PCRE2-exception    |    8 +
 .../PS-or-PDF-font-exception-20170817         |    8 +
 .../QPL-1.0-INRIA-2004-exception              |    5 +
 .../common-licenses/Qt-GPL-exception-1.0      |   21 +
 .../common-licenses/Qt-LGPL-exception-1.1     |   22 +
 meta/files/common-licenses/Qwt-exception-1.0  |   12 +
 .../RRDtool-FLOSS-exception-2.0               |   66 +
 meta/files/common-licenses/SANE-exception     |   20 +
 meta/files/common-licenses/SHL-2.0            |   22 +
 meta/files/common-licenses/SHL-2.1            |   49 +
 meta/files/common-licenses/SWI-exception      |    7 +
 .../Simple-Library-Usage-exception            |   33 +
 meta/files/common-licenses/Swift-exception    |    6 +
 meta/files/common-licenses/Texinfo-exception  |    4 +
 meta/files/common-licenses/UBDL-exception     |   59 +
 .../Universal-FOSS-exception-1.0              |   11 +
 .../common-licenses/WxWindows-exception-3.1   |    9 +
 .../cryptsetup-OpenSSL-exception              |   12 +
 meta/files/common-licenses/eCos-exception-2.0 |    3 +
 .../erlang-otp-linking-exception              |   11 +
 meta/files/common-licenses/fmt-exception      |    6 +
 .../common-licenses/freertos-exception-2.0    |   19 +
 .../common-licenses/gnu-javamail-exception    |    1 +
 meta/files/common-licenses/harbour-exception  |   23 +
 .../common-licenses/i2p-gpl-java-exception    |    1 +
 .../common-licenses/kvirc-openssl-exception   |   30 +
 .../common-licenses/libpri-OpenH323-exception |    4 +
 meta/files/common-licenses/mif-exception      |    1 +
 meta/files/common-licenses/mxml-exception     |   16 +
 .../common-licenses/openvpn-openssl-exception |    3 +
 .../files/common-licenses/polyparse-exception |    7 +
 meta/files/common-licenses/romic-exception    |    6 +
 .../common-licenses/rsync-linking-exception   |    6 +
 .../sqlitestudio-OpenSSL-exception            |    9 +
 meta/files/common-licenses/stunnel-exception  |    5 +
 .../common-licenses/u-boot-exception-2.0      |    6 +
 .../common-licenses/vsftpd-openssl-exception  |    5 +
 .../common-licenses/x11vnc-openssl-exception  |    9 +
 meta/files/license-hashes.csv                 |    4 +-
 meta/files/spdx-exceptions.json               |  971 ++++++++++
 meta/lib/oe/license.py                        |  585 +++---
 meta/lib/oe/license_finder.py                 |   10 +-
 meta/lib/oe/spdx30_tasks.py                   |  173 +-
 meta/lib/oe/spdx_license.py                   |  760 ++++++++
 meta/lib/oeqa/selftest/cases/devtool.py       |    5 +-
 .../oeqa/selftest/cases/incompatible_lic.py   |   31 +-
 meta/lib/oeqa/selftest/cases/oelib/license.py |  296 ++-
 meta/lib/oeqa/selftest/cases/recipetool.py    |  106 +-
 meta/recipes-bsp/alsa-state/alsa-state.bb     |    2 +-
 meta/recipes-bsp/gnu-efi/gnu-efi_4.0.4.bb     |    2 +-
 meta/recipes-bsp/usbutils/usbutils_019.bb     |    4 +-
 meta/recipes-connectivity/avahi/avahi_0.9.bb  |    2 +-
 meta/recipes-connectivity/bluez5/bluez5.inc   |    2 +-
 .../connman/connman-gnome_0.7.bb              |    2 +-
 .../nfs-utils/nfs-utils_2.9.1.bb              |    2 +-
 .../openssh/openssh_10.4p1.bb                 |    2 +-
 meta/recipes-connectivity/ppp/ppp_2.5.3.bb    |    2 +-
 .../slirp/libslirp_4.9.3.bb                   |    2 +-
 .../socat/socat_1.8.1.3.bb                    |    3 +-
 meta/recipes-core/busybox/busybox.inc         |    2 +-
 meta/recipes-core/dbus/dbus-glib_0.114.bb     |    2 +-
 meta/recipes-core/dbus/dbus_1.16.2.bb         |    2 +-
 .../recipes-core/dropbear/dropbear_2026.92.bb |    2 +-
 meta/recipes-core/gettext/gettext_1.0.bb      |    4 +-
 meta/recipes-core/glib-2.0/glib.inc           |    2 +-
 meta/recipes-core/glibc/glibc-common.inc      |    2 +-
 .../initscripts/init-system-helpers_1.69.bb   |    2 +-
 meta/recipes-core/kbd/kbd_2.10.0.bb           |    4 +-
 meta/recipes-core/libxcrypt/libxcrypt.inc     |    2 +-
 meta/recipes-core/musl/bsd-headers.bb         |    2 +-
 meta/recipes-core/musl/musl-locales_git.bb    |    2 +-
 meta/recipes-core/musl/musl-utils.bb          |    2 +-
 meta/recipes-core/newlib/newlib.inc           |    2 +-
 meta/recipes-core/picolibc/picolibc.inc       |    2 +-
 .../sysfsutils/sysfsutils_2.1.1.bb            |    2 +-
 meta/recipes-core/systemd/systemd.inc         |    2 +-
 meta/recipes-core/udev/eudev_3.2.14.bb        |    2 +-
 .../util-linux/util-linux_2.42.2.bb           |   40 +-
 .../autoconf-archive_2024.10.16.bb            |    2 +-
 .../btrfs-tools/btrfs-tools_7.0.bb            |    2 +-
 meta/recipes-devtools/ccache/ccache_4.13.6.bb |    2 +-
 .../cdrtools/cdrtools-native_3.01.bb          |    2 +-
 meta/recipes-devtools/clang/common.inc        |    2 +-
 meta/recipes-devtools/clang/llvm_git.bb       |    2 +-
 .../clang/nativesdk-clang-glue.bb             |    2 +-
 .../cmake/cmake-native_4.4.0.bb               |    2 +-
 meta/recipes-devtools/cmake/cmake_4.4.0.bb    |    2 +-
 .../debugedit/debugedit_5.3.bb                |    2 +-
 .../docbook-xml/docbook-xml-dtd4_4.5.bb       |    2 +-
 meta/recipes-devtools/e2fsprogs/e2fsprogs.inc |    2 +-
 .../elfutils/elfutils_0.195.bb                |   10 +-
 .../erofs-utils/erofs-utils_1.9.2.bb          |    2 +-
 meta/recipes-devtools/expect/expect_5.45.4.bb |    2 +-
 .../fastfloat/fastfloat_8.2.10.bb             |    2 +-
 meta/recipes-devtools/flex/flex_2.6.4.bb      |    2 +-
 meta/recipes-devtools/fmt/fmt_12.2.0.bb       |    2 +-
 meta/recipes-devtools/gcc/gcc-16.1.inc        |    2 +-
 meta/recipes-devtools/gcc/gcc-common.inc      |    1 -
 meta/recipes-devtools/gcc/gcc-runtime.inc     |    4 +-
 meta/recipes-devtools/gcc/gcc-sanitizers.inc  |    2 +-
 meta/recipes-devtools/gcc/libgcc-initial.inc  |    2 +-
 meta/recipes-devtools/gcc/libgcc.inc          |    8 +-
 meta/recipes-devtools/gcc/libgfortran.inc     |    6 +-
 meta/recipes-devtools/gdb/gdb.inc             |    2 +-
 meta/recipes-devtools/git/git_2.55.0.bb       |    2 +-
 .../gnu-config/gnu-config_git.bb              |    2 +-
 .../i2c-tools/i2c-tools_4.4.bb                |    2 +-
 .../libtool/libtool-2.5.4.inc                 |    2 +-
 .../log4cplus/log4cplus_2.2.0.1.bb            |    2 +-
 meta/recipes-devtools/orc/orc_0.4.42.bb       |    2 +-
 .../perl-cross/perlcross_1.6.4.bb             |    2 +-
 .../perl/libmodule-build-perl_0.4234.bb       |    2 +-
 .../perl/libtest-fatal-perl_0.018.bb          |    2 +-
 .../perl/libtest-needs-perl_0.002010.bb       |    2 +-
 .../perl/libtest-warnings-perl_0.038.bb       |    2 +-
 .../recipes-devtools/perl/libxml-perl_0.08.bb |    2 +-
 .../perl/libxml-simple-perl_2.25.bb           |    2 +-
 meta/recipes-devtools/perl/perl_5.42.2.bb     |    2 +-
 .../python/python-pycryptodome.inc            |    2 +-
 .../python/python3-cryptography-vectors.bb    |    2 +-
 .../python/python3-cryptography.bb            |    2 +-
 .../python/python3-docutils_0.23.bb           |    4 +-
 .../python/python3-dtc_1.8.1.bb               |    2 +-
 .../python/python3-idna_3.18.bb               |    2 +-
 .../python/python3-lxml_6.1.1.bb              |    2 +-
 .../python/python3-maturin_1.14.1.bb          |    2 +-
 .../python/python3-numpy_2.5.0.bb             |    2 +-
 .../python/python3-packaging_26.2.bb          |    2 +-
 .../python/python3-pip_26.1.2.bb              |    2 +-
 .../python/python3-poetry-core_2.4.1.bb       |    2 +-
 .../python/python3-pycairo_1.29.0.bb          |    2 +-
 .../python/python3-roman-numerals_4.1.0.bb    |    2 +-
 .../python/python3-sphinx-rtd-theme_3.1.0.bb  |    2 +-
 .../python/python3-sphinx_9.1.0.bb            |    2 +-
 .../python/python3-subunit_1.4.4.bb           |    2 +-
 .../python/python3-uv-build_0.11.28.bb        |    2 +-
 .../qemu/python3-qemu-qmp_0.0.6.bb            |    2 +-
 meta/recipes-devtools/qemu/qemu.inc           |    2 +-
 .../rpm-sequoia/rpm-sequoia_1.10.2.bb         |    2 +-
 meta/recipes-devtools/ruby/ruby_4.0.5.bb      |    2 +-
 meta/recipes-devtools/rust/cargo_1.96.1.bb    |    2 +-
 .../recipes-devtools/rust/libstd-rs_1.96.1.bb |    2 +-
 meta/recipes-devtools/rust/rust_1.96.1.bb     |    2 +-
 meta/recipes-devtools/strace/strace_7.1.bb    |    2 +-
 .../subversion/subversion_1.14.5.bb           |    2 +-
 meta/recipes-devtools/swig/swig_4.4.1.bb      |    2 +-
 .../systemd-bootchart_235.bb                  |    2 +-
 .../tcf-agent/tcf-agent_1.11.0.bb             |    2 +-
 meta/recipes-devtools/tcltk/tcl_9.0.4.bb      |    2 +-
 meta/recipes-devtools/tcltk8/tcl8_8.6.18.bb   |    2 +-
 .../valgrind/valgrind_3.27.1.bb               |    2 +-
 .../acpica/acpica_20260408.bb                 |    2 +-
 meta/recipes-extended/bzip2/bzip2_1.0.8.bb    |    4 +-
 meta/recipes-extended/cronie/cronie_1.7.2.bb  |    2 +-
 meta/recipes-extended/gawk/gawk_5.4.1.bb      |    2 +-
 meta/recipes-extended/hdparm/hdparm_9.65.bb   |    6 +-
 .../iputils/iputils_20250605.bb               |    2 +-
 .../jansson/jansson_2.15.1.bb                 |    2 +-
 meta/recipes-extended/less/less_704.bb        |    2 +-
 meta/recipes-extended/libidn/libidn2_2.3.8.bb |    4 +-
 meta/recipes-extended/ltp/ltp_20260529.bb     |    2 +-
 meta/recipes-extended/man-db/man-db_2.13.1.bb |    2 +-
 .../man-pages/man-pages_6.18.bb               |    2 +-
 meta/recipes-extended/mdadm/mdadm_4.6.bb      |    2 +-
 meta/recipes-extended/pam/libpam_1.7.2.bb     |    2 +-
 .../perl/libconvert-asn1-perl_0.34.bb         |    2 +-
 .../perl/libtimedate-perl_2.30.bb             |    2 +-
 .../perl/libxml-namespacesupport-perl_1.12.bb |    2 +-
 .../perl/libxml-sax-base-perl_1.09.bb         |    2 +-
 .../perl/libxml-sax-perl_1.02.bb              |    2 +-
 meta/recipes-extended/pigz/pigz_2.8.bb        |    2 +-
 meta/recipes-extended/procps/procps_4.0.6.bb  |    2 +-
 meta/recipes-extended/quota/quota_4.11.bb     |    2 +-
 .../shadow/shadow-sysroot_4.6.bb              |    2 +-
 meta/recipes-extended/sudo/sudo.inc           |    2 +-
 meta/recipes-extended/timezone/timezone.inc   |    2 +-
 meta/recipes-extended/xz/xz_5.8.3.bb          |    8 +-
 meta/recipes-extended/zstd/zstd_1.5.7.bb      |    2 +-
 .../gi-docgen/gi-docgen_2026.1.bb             |    2 +-
 .../gnome/adwaita-icon-theme_50.0.bb          |    2 +-
 .../gobject-introspection_1.86.0.bb           |    2 +-
 meta/recipes-gnome/gtk+/gtk+3_3.24.52.bb      |    2 +-
 meta/recipes-gnome/gtk+/gtk4_4.22.4.bb        |    2 +-
 meta/recipes-graphics/cairo/cairo_1.18.4.bb   |   16 +-
 .../cantarell-fonts_0.303.1.bb                |    2 +-
 .../fontconfig/fontconfig_2.18.2.bb           |    2 +-
 .../freetype/freetype_2.14.3.bb               |    2 +-
 .../glslang/glslang_1.4.350.1.bb              |    2 +-
 .../jpeg/libjpeg-turbo_3.2.0.bb               |    2 +-
 .../libglvnd/libglvnd_1.7.0.bb                |    2 +-
 .../libmatchbox/libmatchbox_1.14.bb           |    2 +-
 .../libsdl2/libsdl2_2.32.10.bb                |    4 +-
 .../recipes-graphics/mesa/mesa-demos_9.0.0.bb |    2 +-
 meta/recipes-graphics/piglit/piglit_git.bb    |    2 +-
 .../spir/spirv-headers_1.4.350.1.bb           |    2 +-
 .../vulkan/vulkan-headers_1.4.350.1.bb        |    2 +-
 .../vulkan-validation-layers_1.4.350.1.bb     |    2 +-
 .../xorg-font/encodings_1.1.0.bb              |    2 +-
 .../xorg-font/font-util_1.4.2.bb              |    2 +-
 .../xorg-font/xorg-minimal-fonts.bb           |    2 +-
 .../xorg-lib/libx11-compose-data_1.8.12.bb    |    2 +-
 .../xorg-lib/libx11_1.8.13.bb                 |    2 +-
 .../xorg-lib/libxfont2_2.0.8.bb               |    2 +-
 .../xorg-lib/libxfont_1.5.4.bb                |    2 +-
 meta/recipes-graphics/xorg-lib/libxi_1.8.3.bb |    2 +-
 .../xorg-lib/libxkbcommon_1.13.2.bb           |    2 +-
 .../recipes-graphics/xorg-lib/libxmu_1.3.1.bb |    2 +-
 meta/recipes-graphics/xorg-lib/libxt_1.3.1.bb |    2 +-
 .../xorg-lib/pixman_0.46.4.bb                 |    2 +-
 .../xorg-lib/xkeyboard-config_2.48.bb         |    2 +-
 .../xorg-xserver/xserver-xorg.inc             |    2 +-
 .../xwayland/xwayland_24.1.13.bb              |    2 +-
 meta/recipes-kernel/dtc/dtc_1.8.1.bb          |    2 +-
 .../kern-tools/kern-tools-native_git.bb       |    2 +-
 meta/recipes-kernel/kmod/kmod_34.2.bb         |    2 +-
 .../libtraceevent/libtraceevent_1.9.0.bb      |    2 +-
 .../linux-firmware/linux-firmware_20260622.bb | 1666 ++++++++---------
 .../linux/linux-yocto-fitimage.bb             |    2 +-
 meta/recipes-kernel/linux/linux-yocto.inc     |    2 +-
 .../recipes-kernel/lttng/babeltrace2_2.1.2.bb |    2 +-
 .../lttng/lttng-modules_2.15.2.bb             |    2 +-
 .../lttng/lttng-tools_2.15.1.bb               |    2 +-
 meta/recipes-kernel/lttng/lttng-ust_2.15.1.bb |    2 +-
 .../alsa/alsa-lib_1.2.16.1.bb                 |    2 +-
 .../alsa/alsa-plugins_1.2.12.bb               |    2 +-
 .../alsa/alsa-tools_1.2.15.bb                 |    2 +-
 .../recipes-multimedia/ffmpeg/ffmpeg_8.1.2.bb |    2 +-
 meta/recipes-multimedia/flac/flac_1.5.0.bb    |    2 +-
 .../gstreamer1.0-plugins-bad_1.28.4.bb        |    2 +-
 .../gstreamer1.0-plugins-ugly_1.28.4.bb       |    2 +-
 meta/recipes-multimedia/libtiff/tiff_4.7.2.bb |    2 +-
 .../pulseaudio/pulseaudio.inc                 |    2 +-
 meta/recipes-multimedia/sbc/sbc_2.2.bb        |    2 +-
 meta/recipes-rt/rt-tests/rt-tests_git.bb      |    2 +-
 .../matchbox-desktop/matchbox-desktop_2.3.bb  |    2 +-
 meta/recipes-sato/pcmanfm/pcmanfm_1.3.2.bb    |    2 +-
 .../sato-screenshot/sato-screenshot_0.3.bb    |    2 +-
 meta/recipes-sato/webkit/webkitgtk_2.52.5.bb  |    2 +-
 .../recipes-support/aspell/aspell_0.60.8.2.bb |    2 +-
 meta/recipes-support/attr/acl_2.4.0.bb        |    2 +-
 meta/recipes-support/attr/attr_2.6.0.bb       |    2 +-
 meta/recipes-support/boost/boost-1.91.0.inc   |    2 +-
 .../ca-certificates_20260601.bb               |    2 +-
 .../debianutils/debianutils_5.23.2.bb         |    2 +-
 meta/recipes-support/gmp/gmp_6.3.0.bb         |    2 +-
 meta/recipes-support/gnupg/gnupg_2.5.20.bb    |    2 +-
 meta/recipes-support/gnutls/gnutls_3.8.13.bb  |    2 +-
 .../recipes-support/gnutls/libtasn1_4.21.0.bb |    2 +-
 meta/recipes-support/gpgme/gpgme_2.1.2.bb     |    4 +-
 meta/recipes-support/hwdata/hwdata_0.409.bb   |    2 +-
 meta/recipes-support/icu/icu_78.3.bb          |    2 +-
 .../libassuan/libassuan_3.0.2.bb              |    2 +-
 .../libatomic-ops/libatomic-ops_7.10.0.bb     |    2 +-
 meta/recipes-support/libbsd/libbsd_0.12.2.bb  |    2 +-
 meta/recipes-support/libcap-ng/libcap-ng.inc  |    2 +-
 meta/recipes-support/libcap/libcap_2.78.bb    |    6 +-
 .../libevent/libevent_2.1.13.bb               |    2 +-
 meta/recipes-support/libfm/libfm_1.3.2.bb     |    2 +-
 .../libgcrypt/libgcrypt_1.12.2.bb             |    6 +-
 meta/recipes-support/libgit2/libgit2_1.9.4.bb |    2 +-
 .../libgpg-error/libgpg-error_1.61.bb         |    2 +-
 meta/recipes-support/libical/libical_4.0.3.bb |    2 +-
 .../libjitterentropy_3.6.3.bb                 |    2 +-
 meta/recipes-support/libksba/libksba_1.8.0.bb |    4 +-
 meta/recipes-support/libmd/libmd_1.2.0.bb     |    2 +-
 .../recipes-support/libpcre/libpcre2_10.47.bb |    2 +-
 .../libunistring/libunistring_1.4.2.bb        |    2 +-
 .../recipes-support/liburcu/liburcu_0.15.6.bb |    2 +-
 meta/recipes-support/lz4/lz4_1.10.0.bb        |    2 +-
 meta/recipes-support/nettle/nettle_4.0.bb     |    2 +-
 .../recipes-support/numactl/numactl_2.0.19.bb |    2 +-
 meta/recipes-support/re2c/re2c_4.5.1.bb       |    2 +-
 meta/recipes-support/taglib/taglib_2.3.bb     |    2 +-
 meta/recipes-support/utfcpp/utfcpp_4.1.1.bb   |    4 +-
 meta/recipes-support/vte/vte_0.84.0.bb        |    2 +-
 meta/recipes-support/xxhash/xxhash_0.8.3.bb   |    2 +-
 scripts/contrib/convert-spdx-licenses.py      |  254 ++-
 scripts/lib/recipetool/create.py              |  116 +-
 scripts/lib/recipetool/create_npm.py          |   13 +-
 scripts/pull-spdx-licenses.py                 |  124 +-
 353 files changed, 5087 insertions(+), 1895 deletions(-)
 create mode 100644 meta/files/common-licenses/389-exception
 create mode 100644 meta/files/common-licenses/Asterisk-exception
 create mode 100644 meta/files/common-licenses/Asterisk-linking-protocols-exception
 create mode 100644 meta/files/common-licenses/Autoconf-exception-2.0
 create mode 100644 meta/files/common-licenses/Autoconf-exception-3.0
 create mode 100644 meta/files/common-licenses/Autoconf-exception-generic
 create mode 100644 meta/files/common-licenses/Autoconf-exception-generic-3.0
 create mode 100644 meta/files/common-licenses/Autoconf-exception-macro
 create mode 100644 meta/files/common-licenses/Bison-exception-1.24
 create mode 100644 meta/files/common-licenses/Bison-exception-2.2
 create mode 100644 meta/files/common-licenses/Bootloader-exception
 create mode 100644 meta/files/common-licenses/CGAL-linking-exception
 create mode 100644 meta/files/common-licenses/CLISP-exception-2.0
 create mode 100644 meta/files/common-licenses/Classpath-exception-2.0
 create mode 100644 meta/files/common-licenses/Classpath-exception-2.0-short
 create mode 100644 meta/files/common-licenses/DigiRule-FOSS-exception
 create mode 100644 meta/files/common-licenses/Digia-Qt-LGPL-exception-1.1
 create mode 100644 meta/files/common-licenses/FLTK-exception
 create mode 100644 meta/files/common-licenses/Fawkes-Runtime-exception
 create mode 100644 meta/files/common-licenses/Font-exception-2.0
 create mode 100644 meta/files/common-licenses/GCC-exception-2.0
 create mode 100644 meta/files/common-licenses/GCC-exception-2.0-note
 create mode 100644 meta/files/common-licenses/GCC-exception-3.1
 create mode 100644 meta/files/common-licenses/GNAT-exception
 create mode 100644 meta/files/common-licenses/GNOME-examples-exception
 create mode 100644 meta/files/common-licenses/GNU-compiler-exception
 create mode 100644 meta/files/common-licenses/GPL-3.0-389-ds-base-exception
 create mode 100644 meta/files/common-licenses/GPL-3.0-interface-exception
 create mode 100644 meta/files/common-licenses/GPL-3.0-linking-exception
 create mode 100644 meta/files/common-licenses/GPL-3.0-linking-source-exception
 create mode 100644 meta/files/common-licenses/GPL-CC-1.0
 create mode 100644 meta/files/common-licenses/GStreamer-exception-2005
 create mode 100644 meta/files/common-licenses/GStreamer-exception-2008
 create mode 100644 meta/files/common-licenses/Gmsh-exception
 create mode 100644 meta/files/common-licenses/Independent-modules-exception
 create mode 100644 meta/files/common-licenses/KiCad-libraries-exception
 create mode 100644 meta/files/common-licenses/LGPL-3.0-linking-exception
 create mode 100644 meta/files/common-licenses/LLGPL
 create mode 100644 meta/files/common-licenses/LLVM-exception
 create mode 100644 meta/files/common-licenses/LZMA-exception
 create mode 100644 meta/files/common-licenses/Libtool-exception
 create mode 100644 meta/files/common-licenses/Linux-syscall-note
 create mode 100644 meta/files/common-licenses/OCCT-exception-1.0
 create mode 100644 meta/files/common-licenses/OCaml-LGPL-linking-exception
 create mode 100644 meta/files/common-licenses/OpenJDK-assembly-exception-1.0
 create mode 100644 meta/files/common-licenses/PCRE2-exception
 create mode 100644 meta/files/common-licenses/PS-or-PDF-font-exception-20170817
 create mode 100644 meta/files/common-licenses/QPL-1.0-INRIA-2004-exception
 create mode 100644 meta/files/common-licenses/Qt-GPL-exception-1.0
 create mode 100644 meta/files/common-licenses/Qt-LGPL-exception-1.1
 create mode 100644 meta/files/common-licenses/Qwt-exception-1.0
 create mode 100644 meta/files/common-licenses/RRDtool-FLOSS-exception-2.0
 create mode 100644 meta/files/common-licenses/SANE-exception
 create mode 100644 meta/files/common-licenses/SHL-2.0
 create mode 100644 meta/files/common-licenses/SHL-2.1
 create mode 100644 meta/files/common-licenses/SWI-exception
 create mode 100644 meta/files/common-licenses/Simple-Library-Usage-exception
 create mode 100644 meta/files/common-licenses/Swift-exception
 create mode 100644 meta/files/common-licenses/Texinfo-exception
 create mode 100644 meta/files/common-licenses/UBDL-exception
 create mode 100644 meta/files/common-licenses/Universal-FOSS-exception-1.0
 create mode 100644 meta/files/common-licenses/WxWindows-exception-3.1
 create mode 100644 meta/files/common-licenses/cryptsetup-OpenSSL-exception
 create mode 100644 meta/files/common-licenses/eCos-exception-2.0
 create mode 100644 meta/files/common-licenses/erlang-otp-linking-exception
 create mode 100644 meta/files/common-licenses/fmt-exception
 create mode 100644 meta/files/common-licenses/freertos-exception-2.0
 create mode 100644 meta/files/common-licenses/gnu-javamail-exception
 create mode 100644 meta/files/common-licenses/harbour-exception
 create mode 100644 meta/files/common-licenses/i2p-gpl-java-exception
 create mode 100644 meta/files/common-licenses/kvirc-openssl-exception
 create mode 100644 meta/files/common-licenses/libpri-OpenH323-exception
 create mode 100644 meta/files/common-licenses/mif-exception
 create mode 100644 meta/files/common-licenses/mxml-exception
 create mode 100644 meta/files/common-licenses/openvpn-openssl-exception
 create mode 100644 meta/files/common-licenses/polyparse-exception
 create mode 100644 meta/files/common-licenses/romic-exception
 create mode 100644 meta/files/common-licenses/rsync-linking-exception
 create mode 100644 meta/files/common-licenses/sqlitestudio-OpenSSL-exception
 create mode 100644 meta/files/common-licenses/stunnel-exception
 create mode 100644 meta/files/common-licenses/u-boot-exception-2.0
 create mode 100644 meta/files/common-licenses/vsftpd-openssl-exception
 create mode 100644 meta/files/common-licenses/x11vnc-openssl-exception
 create mode 100644 meta/files/spdx-exceptions.json
 create mode 100644 meta/lib/oe/spdx_license.py