diff --git a/documentation/migration-guides/migration-6.1.rst b/documentation/migration-guides/migration-6.1.rst
index 8786cd699..a49cca270 100644
--- a/documentation/migration-guides/migration-6.1.rst
+++ b/documentation/migration-guides/migration-6.1.rst
@@ -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/
diff --git a/documentation/ref-manual/terms.rst b/documentation/ref-manual/terms.rst
index cbe7c88e6..a955792bd 100644
--- a/documentation/ref-manual/terms.rst
+++ b/documentation/ref-manual/terms.rst
@@ -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
