mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
485 lines
18 KiB
485 lines
18 KiB
.. SPDX-License-Identifier: GPL-2.0 |
|
|
|
.. _kernel_licensing: |
|
|
|
Linux kernel licensing rules |
|
============================ |
|
|
|
The Linux Kernel is provided under the terms of the GNU General Public |
|
License version 2 only (GPL-2.0), as provided in LICENSES/preferred/GPL-2.0, |
|
with an explicit syscall exception described in |
|
LICENSES/exceptions/Linux-syscall-note, as described in the COPYING file. |
|
|
|
This documentation file provides a description of how each source file |
|
should be annotated to make its license clear and unambiguous. |
|
It doesn't replace the Kernel's license. |
|
|
|
The license described in the COPYING file applies to the kernel source |
|
as a whole, though individual source files can have a different license |
|
which is required to be compatible with the GPL-2.0:: |
|
|
|
GPL-1.0+ : GNU General Public License v1.0 or later |
|
GPL-2.0+ : GNU General Public License v2.0 or later |
|
LGPL-2.0 : GNU Library General Public License v2 only |
|
LGPL-2.0+ : GNU Library General Public License v2 or later |
|
LGPL-2.1 : GNU Lesser General Public License v2.1 only |
|
LGPL-2.1+ : GNU Lesser General Public License v2.1 or later |
|
|
|
Aside from that, individual files can be provided under a dual license, |
|
e.g. one of the compatible GPL variants and alternatively under a |
|
permissive license like BSD, MIT etc. |
|
|
|
The User-space API (UAPI) header files, which describe the interface of |
|
user-space programs to the kernel are a special case. According to the |
|
note in the kernel COPYING file, the syscall interface is a clear boundary, |
|
which does not extend the GPL requirements to any software which uses it to |
|
communicate with the kernel. Because the UAPI headers must be includable |
|
into any source files which create an executable running on the Linux |
|
kernel, the exception must be documented by a special license expression. |
|
|
|
The common way of expressing the license of a source file is to add the |
|
matching boilerplate text into the top comment of the file. Due to |
|
formatting, typos etc. these "boilerplates" are hard to validate for |
|
tools which are used in the context of license compliance. |
|
|
|
An alternative to boilerplate text is the use of Software Package Data |
|
Exchange (SPDX) license identifiers in each source file. SPDX license |
|
identifiers are machine parsable and precise shorthands for the license |
|
under which the content of the file is contributed. SPDX license |
|
identifiers are managed by the SPDX Workgroup at the Linux Foundation and |
|
have been agreed on by partners throughout the industry, tool vendors, and |
|
legal teams. For further information see https://spdx.org/ |
|
|
|
The Linux kernel requires the precise SPDX identifier in all source files. |
|
The valid identifiers used in the kernel are explained in the section |
|
`License identifiers`_ and have been retrieved from the official SPDX |
|
license list at https://spdx.org/licenses/ along with the license texts. |
|
|
|
License identifier syntax |
|
------------------------- |
|
|
|
1. Placement: |
|
|
|
The SPDX license identifier in kernel files shall be added at the first |
|
possible line in a file which can contain a comment. For the majority |
|
of files this is the first line, except for scripts which require the |
|
'#!PATH_TO_INTERPRETER' in the first line. For those scripts the SPDX |
|
identifier goes into the second line. |
|
|
|
| |
|
|
|
2. Style: |
|
|
|
The SPDX license identifier is added in form of a comment. The comment |
|
style depends on the file type:: |
|
|
|
C source: // SPDX-License-Identifier: <SPDX License Expression> |
|
C header: /* SPDX-License-Identifier: <SPDX License Expression> */ |
|
ASM: /* SPDX-License-Identifier: <SPDX License Expression> */ |
|
scripts: # SPDX-License-Identifier: <SPDX License Expression> |
|
.rst: .. SPDX-License-Identifier: <SPDX License Expression> |
|
.dts{i}: // SPDX-License-Identifier: <SPDX License Expression> |
|
|
|
If a specific tool cannot handle the standard comment style, then the |
|
appropriate comment mechanism which the tool accepts shall be used. This |
|
is the reason for having the "/\* \*/" style comment in C header |
|
files. There was build breakage observed with generated .lds files where |
|
'ld' failed to parse the C++ comment. This has been fixed by now, but |
|
there are still older assembler tools which cannot handle C++ style |
|
comments. |
|
|
|
| |
|
|
|
3. Syntax: |
|
|
|
A <SPDX License Expression> is either an SPDX short form license |
|
identifier found on the SPDX License List, or the combination of two |
|
SPDX short form license identifiers separated by "WITH" when a license |
|
exception applies. When multiple licenses apply, an expression consists |
|
of keywords "AND", "OR" separating sub-expressions and surrounded by |
|
"(", ")" . |
|
|
|
License identifiers for licenses like [L]GPL with the 'or later' option |
|
are constructed by using a "+" for indicating the 'or later' option.:: |
|
|
|
// SPDX-License-Identifier: GPL-2.0+ |
|
// SPDX-License-Identifier: LGPL-2.1+ |
|
|
|
WITH should be used when there is a modifier to a license needed. |
|
For example, the linux kernel UAPI files use the expression:: |
|
|
|
// SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note |
|
// SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note |
|
|
|
Other examples using WITH exceptions found in the kernel are:: |
|
|
|
// SPDX-License-Identifier: GPL-2.0 WITH mif-exception |
|
// SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0 |
|
|
|
Exceptions can only be used with particular License identifiers. The |
|
valid License identifiers are listed in the tags of the exception text |
|
file. For details see the point `Exceptions`_ in the chapter `License |
|
identifiers`_. |
|
|
|
OR should be used if the file is dual licensed and only one license is |
|
to be selected. For example, some dtsi files are available under dual |
|
licenses:: |
|
|
|
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause |
|
|
|
Examples from the kernel for license expressions in dual licensed files:: |
|
|
|
// SPDX-License-Identifier: GPL-2.0 OR MIT |
|
// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause |
|
// SPDX-License-Identifier: GPL-2.0 OR Apache-2.0 |
|
// SPDX-License-Identifier: GPL-2.0 OR MPL-1.1 |
|
// SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR MIT |
|
// SPDX-License-Identifier: GPL-1.0+ OR BSD-3-Clause OR OpenSSL |
|
|
|
AND should be used if the file has multiple licenses whose terms all |
|
apply to use the file. For example, if code is inherited from another |
|
project and permission has been given to put it in the kernel, but the |
|
original license terms need to remain in effect:: |
|
|
|
// SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) AND MIT |
|
|
|
Another other example where both sets of license terms need to be |
|
adhered to is:: |
|
|
|
// SPDX-License-Identifier: GPL-1.0+ AND LGPL-2.1+ |
|
|
|
License identifiers |
|
------------------- |
|
|
|
The licenses currently used, as well as the licenses for code added to the |
|
kernel, can be broken down into: |
|
|
|
1. _`Preferred licenses`: |
|
|
|
Whenever possible these licenses should be used as they are known to be |
|
fully compatible and widely used. These licenses are available from the |
|
directory:: |
|
|
|
LICENSES/preferred/ |
|
|
|
in the kernel source tree. |
|
|
|
The files in this directory contain the full license text and |
|
`Metatags`_. The file names are identical to the SPDX license |
|
identifier which shall be used for the license in source files. |
|
|
|
Examples:: |
|
|
|
LICENSES/preferred/GPL-2.0 |
|
|
|
Contains the GPL version 2 license text and the required metatags:: |
|
|
|
LICENSES/preferred/MIT |
|
|
|
Contains the MIT license text and the required metatags |
|
|
|
_`Metatags`: |
|
|
|
The following meta tags must be available in a license file: |
|
|
|
- Valid-License-Identifier: |
|
|
|
One or more lines which declare which License Identifiers are valid |
|
inside the project to reference this particular license text. Usually |
|
this is a single valid identifier, but e.g. for licenses with the 'or |
|
later' options two identifiers are valid. |
|
|
|
- SPDX-URL: |
|
|
|
The URL of the SPDX page which contains additional information related |
|
to the license. |
|
|
|
- Usage-Guidance: |
|
|
|
Freeform text for usage advice. The text must include correct examples |
|
for the SPDX license identifiers as they should be put into source |
|
files according to the `License identifier syntax`_ guidelines. |
|
|
|
- License-Text: |
|
|
|
All text after this tag is treated as the original license text |
|
|
|
File format examples:: |
|
|
|
Valid-License-Identifier: GPL-2.0 |
|
Valid-License-Identifier: GPL-2.0+ |
|
SPDX-URL: https://spdx.org/licenses/GPL-2.0.html |
|
Usage-Guide: |
|
To use this license in source code, put one of the following SPDX |
|
tag/value pairs into a comment according to the placement |
|
guidelines in the licensing rules documentation. |
|
For 'GNU General Public License (GPL) version 2 only' use: |
|
SPDX-License-Identifier: GPL-2.0 |
|
For 'GNU General Public License (GPL) version 2 or any later version' use: |
|
SPDX-License-Identifier: GPL-2.0+ |
|
License-Text: |
|
Full license text |
|
|
|
:: |
|
|
|
SPDX-License-Identifier: MIT |
|
SPDX-URL: https://spdx.org/licenses/MIT.html |
|
Usage-Guide: |
|
To use this license in source code, put the following SPDX |
|
tag/value pair into a comment according to the placement |
|
guidelines in the licensing rules documentation. |
|
SPDX-License-Identifier: MIT |
|
License-Text: |
|
Full license text |
|
|
|
| |
|
|
|
2. Deprecated licenses: |
|
|
|
These licenses should only be used for existing code or for importing |
|
code from a different project. These licenses are available from the |
|
directory:: |
|
|
|
LICENSES/deprecated/ |
|
|
|
in the kernel source tree. |
|
|
|
The files in this directory contain the full license text and |
|
`Metatags`_. The file names are identical to the SPDX license |
|
identifier which shall be used for the license in source files. |
|
|
|
Examples:: |
|
|
|
LICENSES/deprecated/ISC |
|
|
|
Contains the Internet Systems Consortium license text and the required |
|
metatags:: |
|
|
|
LICENSES/deprecated/GPL-1.0 |
|
|
|
Contains the GPL version 1 license text and the required metatags. |
|
|
|
Metatags: |
|
|
|
The metatag requirements for 'other' licenses are identical to the |
|
requirements of the `Preferred licenses`_. |
|
|
|
File format example:: |
|
|
|
Valid-License-Identifier: ISC |
|
SPDX-URL: https://spdx.org/licenses/ISC.html |
|
Usage-Guide: |
|
Usage of this license in the kernel for new code is discouraged |
|
and it should solely be used for importing code from an already |
|
existing project. |
|
To use this license in source code, put the following SPDX |
|
tag/value pair into a comment according to the placement |
|
guidelines in the licensing rules documentation. |
|
SPDX-License-Identifier: ISC |
|
License-Text: |
|
Full license text |
|
|
|
| |
|
|
|
3. Dual Licensing Only |
|
|
|
These licenses should only be used to dual license code with another |
|
license in addition to a preferred license. These licenses are available |
|
from the directory:: |
|
|
|
LICENSES/dual/ |
|
|
|
in the kernel source tree. |
|
|
|
The files in this directory contain the full license text and |
|
`Metatags`_. The file names are identical to the SPDX license |
|
identifier which shall be used for the license in source files. |
|
|
|
Examples:: |
|
|
|
LICENSES/dual/MPL-1.1 |
|
|
|
Contains the Mozilla Public License version 1.1 license text and the |
|
required metatags:: |
|
|
|
LICENSES/dual/Apache-2.0 |
|
|
|
Contains the Apache License version 2.0 license text and the required |
|
metatags. |
|
|
|
Metatags: |
|
|
|
The metatag requirements for 'other' licenses are identical to the |
|
requirements of the `Preferred licenses`_. |
|
|
|
File format example:: |
|
|
|
Valid-License-Identifier: MPL-1.1 |
|
SPDX-URL: https://spdx.org/licenses/MPL-1.1.html |
|
Usage-Guide: |
|
Do NOT use. The MPL-1.1 is not GPL2 compatible. It may only be used for |
|
dual-licensed files where the other license is GPL2 compatible. |
|
If you end up using this it MUST be used together with a GPL2 compatible |
|
license using "OR". |
|
To use the Mozilla Public License version 1.1 put the following SPDX |
|
tag/value pair into a comment according to the placement guidelines in |
|
the licensing rules documentation: |
|
SPDX-License-Identifier: MPL-1.1 |
|
License-Text: |
|
Full license text |
|
|
|
| |
|
|
|
4. _`Exceptions`: |
|
|
|
Some licenses can be amended with exceptions which grant certain rights |
|
which the original license does not. These exceptions are available |
|
from the directory:: |
|
|
|
LICENSES/exceptions/ |
|
|
|
in the kernel source tree. The files in this directory contain the full |
|
exception text and the required `Exception Metatags`_. |
|
|
|
Examples:: |
|
|
|
LICENSES/exceptions/Linux-syscall-note |
|
|
|
Contains the Linux syscall exception as documented in the COPYING |
|
file of the Linux kernel, which is used for UAPI header files. |
|
e.g. /\* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note \*/:: |
|
|
|
LICENSES/exceptions/GCC-exception-2.0 |
|
|
|
Contains the GCC 'linking exception' which allows to link any binary |
|
independent of its license against the compiled version of a file marked |
|
with this exception. This is required for creating runnable executables |
|
from source code which is not compatible with the GPL. |
|
|
|
_`Exception Metatags`: |
|
|
|
The following meta tags must be available in an exception file: |
|
|
|
- SPDX-Exception-Identifier: |
|
|
|
One exception identifier which can be used with SPDX license |
|
identifiers. |
|
|
|
- SPDX-URL: |
|
|
|
The URL of the SPDX page which contains additional information related |
|
to the exception. |
|
|
|
- SPDX-Licenses: |
|
|
|
A comma separated list of SPDX license identifiers for which the |
|
exception can be used. |
|
|
|
- Usage-Guidance: |
|
|
|
Freeform text for usage advice. The text must be followed by correct |
|
examples for the SPDX license identifiers as they should be put into |
|
source files according to the `License identifier syntax`_ guidelines. |
|
|
|
- Exception-Text: |
|
|
|
All text after this tag is treated as the original exception text |
|
|
|
File format examples:: |
|
|
|
SPDX-Exception-Identifier: Linux-syscall-note |
|
SPDX-URL: https://spdx.org/licenses/Linux-syscall-note.html |
|
SPDX-Licenses: GPL-2.0, GPL-2.0+, GPL-1.0+, LGPL-2.0, LGPL-2.0+, LGPL-2.1, LGPL-2.1+ |
|
Usage-Guidance: |
|
This exception is used together with one of the above SPDX-Licenses |
|
to mark user-space API (uapi) header files so they can be included |
|
into non GPL compliant user-space application code. |
|
To use this exception add it with the keyword WITH to one of the |
|
identifiers in the SPDX-Licenses tag: |
|
SPDX-License-Identifier: <SPDX-License> WITH Linux-syscall-note |
|
Exception-Text: |
|
Full exception text |
|
|
|
:: |
|
|
|
SPDX-Exception-Identifier: GCC-exception-2.0 |
|
SPDX-URL: https://spdx.org/licenses/GCC-exception-2.0.html |
|
SPDX-Licenses: GPL-2.0, GPL-2.0+ |
|
Usage-Guidance: |
|
The "GCC Runtime Library exception 2.0" is used together with one |
|
of the above SPDX-Licenses for code imported from the GCC runtime |
|
library. |
|
To use this exception add it with the keyword WITH to one of the |
|
identifiers in the SPDX-Licenses tag: |
|
SPDX-License-Identifier: <SPDX-License> WITH GCC-exception-2.0 |
|
Exception-Text: |
|
Full exception text |
|
|
|
|
|
All SPDX license identifiers and exceptions must have a corresponding file |
|
in the LICENSES subdirectories. This is required to allow tool |
|
verification (e.g. checkpatch.pl) and to have the licenses ready to read |
|
and extract right from the source, which is recommended by various FOSS |
|
organizations, e.g. the `FSFE REUSE initiative <https://reuse.software/>`_. |
|
|
|
_`MODULE_LICENSE` |
|
----------------- |
|
|
|
Loadable kernel modules also require a MODULE_LICENSE() tag. This tag is |
|
neither a replacement for proper source code license information |
|
(SPDX-License-Identifier) nor in any way relevant for expressing or |
|
determining the exact license under which the source code of the module |
|
is provided. |
|
|
|
The sole purpose of this tag is to provide sufficient information |
|
whether the module is free software or proprietary for the kernel |
|
module loader and for user space tools. |
|
|
|
The valid license strings for MODULE_LICENSE() are: |
|
|
|
============================= ============================================= |
|
"GPL" Module is licensed under GPL version 2. This |
|
does not express any distinction between |
|
GPL-2.0-only or GPL-2.0-or-later. The exact |
|
license information can only be determined |
|
via the license information in the |
|
corresponding source files. |
|
|
|
"GPL v2" Same as "GPL". It exists for historic |
|
reasons. |
|
|
|
"GPL and additional rights" Historical variant of expressing that the |
|
module source is dual licensed under a |
|
GPL v2 variant and MIT license. Please do |
|
not use in new code. |
|
|
|
"Dual MIT/GPL" The correct way of expressing that the |
|
module is dual licensed under a GPL v2 |
|
variant or MIT license choice. |
|
|
|
"Dual BSD/GPL" The module is dual licensed under a GPL v2 |
|
variant or BSD license choice. The exact |
|
variant of the BSD license can only be |
|
determined via the license information |
|
in the corresponding source files. |
|
|
|
"Dual MPL/GPL" The module is dual licensed under a GPL v2 |
|
variant or Mozilla Public License (MPL) |
|
choice. The exact variant of the MPL |
|
license can only be determined via the |
|
license information in the corresponding |
|
source files. |
|
|
|
"Proprietary" The module is under a proprietary license. |
|
This string is solely for proprietary third |
|
party modules and cannot be used for modules |
|
which have their source code in the kernel |
|
tree. Modules tagged that way are tainting |
|
the kernel with the 'P' flag when loaded and |
|
the kernel module loader refuses to link such |
|
modules against symbols which are exported |
|
with EXPORT_SYMBOL_GPL(). |
|
============================= ============================================= |
|
|
|
|
|
|
|
|