@@ -75,6 +75,71 @@ And::
oe.utils.any_distro_features("x y", ...) -> bb.utils.contains_any("DISTRO_FEATURES", "x y", ...)
+:term:`LICENSE` is now a :term:`SPDX License Expression`
+--------------------------------------------------------
+
+The :term:`LICENSE` variable is now a :term:`SPDX License Expression` instead
+of the custom license expressions that have been used historically.
+
+The changes required for the new expressions are as follows:
+
+1. The ``&`` operator is replaced with ``AND``
+
+2. The ``|`` operator is replaced with ``OR``
+
+3. Any license value which is not a valid :term:`SPDX License Expression` is an
+ error.
+
+4. Custom (non `SPDX License Identifier`_) licenses are still allowed, as long
+ as they are prefixed with ``LicenseRef-``. The behavior of looking for the
+ license text in :term:`LICENSE_PATH` (with or without the ``LicenseRef-``
+ prefix) or :term:`NO_GENERIC_LICENSE` is unchanged, and may still be used.
+
+5. ``CLOSED`` as a license is deprecated and will issue a warning. This license
+ is effectively "no license" (usually meaning e.g. "All rights reserved"),
+ but a more precise definition is to provide some sort of actual license text
+ using a custom license. This provides a more consistent definition of the
+ license text, since the meaning of "no license" may vary by jurisdiction.
+ Keep in mind that you can still have a common license file in
+ :term:`LICENSE_PATH` and refer to it with a ``LicenseRef-`` license. Note
+ that when you do this, you will also need to provide a
+ :term:`LIC_FILE_CHKSUM` value to point to your license file.
+
+6. The generic ``PD`` (Public Domain) license is no longer allowed (since it is
+ not a valid `SPDX License Identifier`_). Additionally, the meaning of
+ "Public Domain" varies by jurisdiction, so leaving the exact license text
+ unspecified is not recommended. Instead, either find a matching SPDX license
+ (The `SPDX License Check`_ website can be useful here), or use a
+ ``LicenseRef-`` with :term:`NO_GENERIC_LICENSE` to specify the actual
+ license text.
+
+7. The ``WITH`` operator should now be used to describe an exception to a
+ license, instead of a bespoke license identifier. For example, the old
+ bespoke license ``Apache-2.0-with-LLVM-exception`` would become
+ ``Apache-2.0 WITH LLVM-exception``. For a list of the valid license
+ exceptions, see `SPDX License Exception`_.
+
+8. Because of the change to use ``WITH`` instead of bespoke licenses, there is
+ a change in how :term:`INCOMPATIBLE_LICENSE` works. Anything listed in this
+ variable will match a single license (unchanged), but it will also match the
+ left-hand (license) side of a ``WITH`` expression. To allow a license with a
+ specific `SPDX License Exception`_, the SPDX license exception must be
+ listed in :term:`INCOMPATIBLE_LICENSE_EXCEPTIONS`.
+
+ Practically speaking, the place where this comes up the most is when
+ attempting to exclude GPLv3 code using :term:`INCOMPATIBLE_LICENSE`.
+ Previously, this would have allowed any ``GPLv3-with-exception`` license,
+ since they were bespoke licenses that did not match the
+ ``GPL-3.0* LGPL-3.0*`` expansion. Now, however, the licenses will match
+ because they are e.g. ``GPL-3.0-or-later WITH exception``. As such, any
+ exceptions to the GPLv3 that should be allowed must be listed in
+ :term:`INCOMPATIBLE_LICENSE_EXCEPTIONS`.
+
+Currently, the older syntax for license expressions is still parsed and
+automatically converted to a :term:`SPDX License Expression`, but a warning is
+issued when this occurs. This support will eventually be removed and the only
+valid values for these variables will be :term:`SPDX License Expression`.
+
Removed recipes
---------------
@@ -93,3 +158,7 @@ Removed classes
Miscellaneous changes
---------------------
+
+.. _SPDX License Identifier: https://spdx.org/licenses/
+.. _SPDX License Exception: https://spdx.org/licenses/exceptions-index.html
+.. _SPDX License Check: https://tools.spdx.org/app/check_license/
@@ -578,6 +578,14 @@ universal, the list includes them just in case:
and the ":ref:`dev-manual/sbom:creating a software bill of materials`"
section of the Development Tasks manual.
+ :term:`SPDX License Expression`
+ A :term:`SPDX` defined standard for expressing how one or more licenses
+ apply to a work.
+
+ The syntax for a SPDX License Expression is defined in the `SPDX
+ Specification
+ <https://spdx.github.io/spdx-spec/v3.0.1/annexes/spdx-license-expressions/>`__.
+
:term:`Sysroot`
When cross-compiling, the target file system may be differently laid
out and contain different things compared to the host system. The concept
The LICENSE variable is now required to be SPDX license expressions, so provide a migration guide to describe the changes required to integrate this change Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> --- .../migration-guides/migration-6.1.rst | 69 +++++++++++++++++++ documentation/ref-manual/terms.rst | 8 +++ 2 files changed, 77 insertions(+)