123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485 |
- .. 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:
- ASM:
- scripts:
- .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().
- ============================= =============================================
|