diff --git a/documentation/content/en/articles/license-guide/_index.adoc b/documentation/content/en/articles/license-guide/_index.adoc new file mode 100644 --- /dev/null +++ b/documentation/content/en/articles/license-guide/_index.adoc @@ -0,0 +1,338 @@ +--- +title: FreeBSD Licensing Policy +authors: + - author: Warner Losh + email: imp@FreeBSD.org +trademarks: ["freebsd", "general"] +--- + += FreeBSD License Policies +:doctype: article +:toc: macro +:toclevels: 1 +:icons: font +:sectnums: +:sectnumlevels: 6 +:source-highlighter: rouge +:experimental: + +''' + +toc::[] + +[[intro]] + +WARNING: This is a draft document for feedback. It has not yet been ratified. + +[[pref-license]] +== Preferred License for New Files + +The rest of this section is intended to help you get started. +As a rule, when in doubt, ask. +It is much easier to receive advice than to fix the source tree. +The FreeBSD Project makes use of both explicit licenses (where the verbatim text of the license is reproduced in each file) and detached licenses (where a tag in the file, as described in this document, specifies the license). + +The FreeBSD Project uses this text as the preferred license: + +[.programlisting] +.... +/*- + * Copyright (c) [year] [your name] + * + * SPDX-License-Identifier: BSD-2-Clause + * + * [id for your version control system, if any] + */ +.... + +The FreeBSD project strongly discourages using the "advertising clause" in new code. +Due to the large number of contributors to the FreeBSD project, complying with this clause for many commercial vendors has become difficult. +If you have code in the tree with the advertising clause, please consider switching to a license without it. +Please consider using the BSD-2-Clause for all new contributions to FreeBSD where possible. + +The FreeBSD project discourages completely new licenses and variations on the standard licenses. +New licenses require the approval of the {core-email} to reside in the main repository. +The FreeBSD project is trying to reduce the number of unique licenses in the tree and standardize on more standard licensese. +Non-stnadard licneses have generates more problems than standard ones in the past, typically from unintended consequences from a poorly worded license. + +Project policy dictates that code under some non-BSD licenses must be placed only in specific sections of the repository, and in some cases, compilation must be conditional or even disabled by default. +For example, the GENERIC kernel must be compiled under only licenses identical to or substantially similar to the BSD license. +GPL, APSL, CDDL, etc, licensed software must not be compiled into the static GENERIC kernel. +Code with these licenses is compiled modules which the user must explicitly load. + +Developers are reminded that in open source, getting "open" right is just as important as getting "source" right, as improper handling of intellectual property has serious consequences. +Any questions or concerns should immediately be brought to the attention of the core team. + +[[license-policy]] +== Software License Policy + +The following sections outline the project's Software License Policies in detail. +For the most part we expect developers to read, understand and utilize the sections above this one in order to apply appropriate licenses to their contributions. +The rest of this document details the philosophical background to the policies as well as the policies in great detail. +As always if the text below is confusing or if you are questioning how to apply these policies, please reach out to {coremail}. + +=== Philosophy + +The FreeBSD Project aims to produce a complete, BSD-licensed operating system allowing consumers of the system to produce derivative products without constraint or further license obligations. +We invite and greatly appreciate the contribution of both changes and additions under the two-clause BSD license, and encourage the adoption of this license by other open source projects. +Use of the BSD license is key to encouraging the adoption of advanced operating system technology, and on many notable occasions has been pivotal to widespread use of new technology. + +We accept however that compelling reasons exist to allow differently-licensed software to be included in the FreeBSD source tree. + +We require any software under alternative licenses to be carefully isolated in the source tree so that it cannot contaminate BSD-only components. +Such cautious management encourages licensing clarity and facilitates the production of BSD-only derivative products. + +Unless a special exception is made, no existing BSD-licensed components may be replaced with differently-licensed software. +We instead encourage FreeBSD and third party developers to seek the relicensing or reimplementation of critical components under the BSD license. +Such would ease their more integral adoption into the FreeBSD operating system. + +=== Policy + +* The import of new software licensed under any licenses other than the BSD license and BSD-Like Licenses (as defined below) requires the prior approval of the FreeBSD Core Team. +Requests for import must include: +** A list of features or bug fixes that the new version or patches contain, along with evidence that our users need those features. +PRs or references to mailing list discussions are ideal forms of evidence. +** This process should be used for all software imports, not just those that require Core Team review. +The mere existence of a new version does not justify an import of software to source or ports. +** A list of FreeBSD branches that may be affected. +Expansions of scope require a new request to and approval from the FreeBSD Core Team. + +* The Apache License 2.0 is acceptable for use in some cases. +The Core Team must approve the import of new Apache License licensed components or the change of license of existing components to the Apache License. +** This license is approved for the following components: +*** LLVM toolchain and (with LLVM Exceptions) runtime components. +*** Subversion and its dependencies + +* The BSD+Patent License is acceptable for use in some cases. +The Core Team must approve the import of new BSD+Patent License licensed components or the change of license of existing components to the BSD+Patent License. +** This license is approved for the following components: +*** EDK2 derived code related to UEFI functionality + +* The Common Development and Distribution License (CDDL) is acceptable for use in some cases. +The Core Team must approve the import of new CDDL licensed components or the change of license of existing components to the CDDL. +** This license is approved for the following components: +*** DTrace +*** ZFS filesystem including kernel support and userland utilities + +* Historically, the phrase 'All Rights Reserved.' was included in all copyright notices. +All the BSD releases had it to comply with the https://en.wikipedia.org/wiki/Buenos_Aires_Convention[Buenos Aires Convention of 1910] in the Americas. +With the ratification of the https://en.wikipedia.org/wiki/Berne_Convention[Berne Convention] in 2000 by Nicaragua, it became obsolete. +As such, the FreeBSD project recommends that new code omit the phrase and encourages existing copyright holders to remove it. +In 2018, the project updated its templates to remove it. + +==== Acceptable licenses + +The following licenses are considered to be acceptable BSD-Like Licenses for the purpose of this Policy. +Deviations or the use of any other license must be approved by the FreeBSD Core Team: + +* The 2 clause version of the BSD license + +[.programlisting] +.... +/*- + * Copyright (c) [year] [your name] + * + * SPDX-License-Identifier: BSD-2-Clause + * + * [id for your version control system, if any] + */ +.... +* The 3 clause version of the BSD license + +[.programlisting] +.... +/*- + * Copyright (c) [year] [your name] + * + * SPDX-License-Identifier: BSD-3-Clause + * + * [id for your version control system, if any] + */ +.... +* The ISC License + +[.programlisting] +.... +/*- + * Copyright (c) [year] [copyright holder] + * + * SPDX-License-Identifier: ISC + * + * [id for your version control system, if any] + */ +.... +* The MIT License + +[.programlisting] +.... +/*- + * Copyright (c) [year] [copyright holders] + * + * SPDX-License-Identifier: MIT + * + * [id for your version control system, if any] + */ +.... +== Software Collection License + +The FreeBSD Project licenses its compilation of software as described in [.filename]#COPYRIGHT# under the BSD-2-Clause license. +This license does not supersede the license of individual files, which is described below. +Files that do not have an explicit license are licensed under the BSD-2-Clause license. + +== License File Location + +To comply with the https://reuse.software/[REUSE Software] standard as much as possible, all license files are stored in the [.filename]#LICENSES/# directory of the repository. +There are three subdrectories under this top level directory. +The [.filename]#LICENSES/text/# subdrectory contains the text of all the licenses that are allowed in detached form in the FreeBSD software collection. +These files are stored using the SPDX-License-Identifier name followed by .txt. +The [.filename]#LICENSES/exceptions/# subdirectory has the text of all exceptions that are allowed in detached form in the FreeBSD software collection. +These files are stored using the exception identifier name followed by .txt. +The [.filename]#LICENSES/other/# contains the license files references in SPDX-License-Identifier expressions, but aren't otherwise allowed as detached licenses. +All such files must appear at least once in the FreeBSD software collection, and should be removed when the last file that references them is removed. +Licenses that have no adequate SPDX matching license must be in [.filename]#LICENSES/other/# and have a filename that starts with LicenseRef- followed by a unique idstring. +No files have currently been identified, but if they are, a full list will appear here. + +The FreeBSD Project currently does not make use of the `DEP5` files described in the `RESUSE Software` standard. +The FreeBSD Project has not marked all the files in the tree yet in accordance with this standard, as described later in this document. + +[[individual-files]] +== Individual Files License + +Each individual files in the FreeBSD software collection has its own copyright and license. +How they are marked varies and is described in this section. + +A copyright notice identifies who claims the legal copyright to a file. +These are provided on a best effort basis by the project. +Due to legal transfers of copyright notices the project has not been informed of, the current copyright holder may vary. + +A license is a legal document between the contributor and the users of the software granting permission to use the copyrighted portions of the software, subject to certain terms and conditions set forth in the license. +Licenses can be expresssed in one of two ways in the FreeBSD software collection. +Licenses can be explicit in a file. +When a license grant is explicit in the file, that file may be used, copied and modified in accordance with that license. +Licenses can also be expressed indirectly, where the text of the license is elsewhere. +The project uses the Software Package Data Exchange (SPDX) license identifiers for this purpose, as described in the following subections. +SPDX license identifiers are managed by the SPDX Workgroup at the Linux Foudnation and have been agreed on by partners throughout the industry, tool vendors and legal teams. +For further information see https://spdx.org/ and the following sections for how the FreeBSD Project uses them. + +Entities that contrinubute fixes and enhancments to the software collection without an explicit license agree to license those changes under the terms of the licenses that apply to the file(s) modified. +Project policy, in line with industry practice, only includes a copyright notice from signficant contributors to the files in the collection. + +There are four types of files in the FreeBSD software collection +. Files that have only an explicit copyright and license. +. Files that have both an explicit copyright and license, and a SPDX. +. Files that have only a copyirght and only an SPDX tag, but no explicit license +. Files that lack any copyright or license at all + +=== Only Copyright and License + +Many files in the FreeBSD software collection have both a copyright notice and an explicit license contained in the file. +In these cases, the license contained in the file governs. + +=== Copyright and License with SPDX-License-Identifier expression + +Some files in the FreeBSD software collection contain a copyright statement; an SPDX-License-Identifier tag and an explicit license. +The explicit license takes precedence over the SPDX-License-Identifier tag. +The SPDX tag is the project's best effort attempts to characterize the license, but is only informative for automated tools. +See <> for how to interpret the expression. + +=== Only Copyright and SPDX-License-Identifier expression. + +Some files in the tree contain detached licenses. +These files contain only a copyright notice and an SPDX-License-Identifier tag, but no explicit license. +See <> for how to interpret the expression. +Note: the expressions allowed for detached licenses by the project are a subset of the expressions used informationally or that are defined by the standard. + +To constuct the detached license from the file: + +. Start the lcense with the copyright notice from the file. +Include all the copyright holders. +. For each sub-expression, copy the license text from [.filename]#LICENSE/text/`id`.txt#. +When exceptions are present, append them from [.filename]#src/share/license/exceptions/`id`.txt#. +When multiple licenses are separated by `OR` the user has a choice which one to use. +When a contributor specifies multiple clauses separate by `OR` they understand it is the user of this file's choice which license will be used. + +Where `id` is the SPDX short license identifier from the `Identifier` column of https://spdx.org/licenses/[SPDX Identifiers] or https://spdx.org/licenses/exceptions-index.html[license exception]. +If there is no file in [.filename]#LICENSE/#, then that license or exception cannot be specified as a detached license under this section. + +No SPDX-License-Identifier expression may contain an AND clause when expressing a detached license. +Contributors wishing to license files like this are strongly discouraged from doing so. +When it is not possible to license in a way that avoids this, an explicit license must be used instead. + +When reading the license text that is detached from a file, a number of considerations must be taken to make the detached license make sense. + +. Any reference to a copyright notice shall refer to the copyright notice constructed from the licensed file, not from any copyright notice in the license text file itself. +. When names of entities are referred to in the license text, they shall be construed to apply to the list of all copyright holders listed in the copyright notices of the licensed file. +For example, the BSD-4-clause license containes the phrase "This product includes software developed by the organization". The phrase 'the organization' should be replaced by the copyright holders. +. When the SPDX offers variations of the license, it is understood the license in the [.filename]#LICENSE/# file represents the exact version of the license selected. + +For licenses that have slight variations in text, the SPDX has guidelines to match them. +These guidelines are not relevant here. +Contributors wishing to license under a variant of a SPDX license not contained verbatim in [.filename]#LICENSE/# cannot use the detached option and must specify the license explicitly. + +=== Files without Copyright or any License Marking + +Some files cannot have suitable comments added to them. +In such cases, a license may be found in [.filename]#file.ext.license#. +For example, a file named [.filename]#foo.jpg# may have a license in [.filename]#foo.jpg.license#, following the REUSE Software conventions. + +Files created by the project that lack a copyright notice are understood to fall under the blanket copyright and licensing in [.filename]#COPYRIGHT#. +Either the file is a mere recitation of facts, not protectable by Copyright Law, or the content is so trivial as to not warrant the overhead of an explicit license. + +Files that lack marking and have more than a trivial amount of copyrightable material, or whose author believes them to be improperly marked should be brought to the attention of the FreeBSD core team. +It is the strong policy of the FreeBSD Project to comply with all appropriate licenses. + +In the future, all such files will be marked explicitly, or follow the REUSE Software [.filename]#.license# convention. + +[[expressions]] +=== SPDX-License-Identifier Expressions + +An 'SPDX License expression' is used in two contexts in the FreeBSD software collection. +First, it's full form is used for files that have explicit license statements contained within the file as well as a summarizing SPDX-License-Identifier expression. +In this context, the full power of these expressions may be used. +Second, in a restricted form described above, it is used to denote the actual license for a given file. +In the second context, only a subset of this expression is allowed by the project. + +An `SPDX License sub-expression` is either an SPDX short form license identifier from the https://spdx.org/licenses/[SPDX License List], or the combination of two SPDX short form license identifiers separated by "WITH" when a https://spdx.org/licenses/exceptions-index.html[license exception] applies. +When multiple licenses apply, an expression consists of keywords "AND", "OR" separating sub-expressions and surrounded by "(", ")" . +The https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-expressions/[full specification of expressions] spells out all the details and takes precidence when it conflicts with the simplified treament of this section. + +Some license identifiers, like [L]GPL, have the option to use only that version, or any later version. +SPDX defines the suffix `-or-later` to mean that version of the license or a later version. +It defines `-only` to mean only that specific version of the file. +There is an old convention to have no suffix (which means what the new '-only' suffix means, but which people confuse for `-or-later`). +In addition, affixing a `+` suffix was meant to mean `-or-later`. +New files in FreeBSD should not use these two conventions. +Old files that use this convention should be converted as appropriate. + +[.programlisting] +.... + // SPDX-License-Identifier: GPL-2.0-only + // SPDX-License-Identifier: LGPL-2.1-or-later +.... + +`WITH` should be used when there is a modifier to a license needed. +In the FreeBSD project, a number of files from LLVM have an exception to the Apache 2.0 license: + +[.programlisting] +.... + // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +.... + +https://spdx.org/licenses/exceptions-index.html[Exception tags] are managed by SPDX. +License exceptions can only be applied to certain license, as sepcified in the exception. + +`OR` should be used if the file has a choice of license and one license is selected. +For example, some dtsi files are available under dual licenses: + +[.programlisting] +.... + // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause +.... + +`AND` should be used if the file has multiple licenses whose terms all apply to use the file. +For example, if code has been incorporated by a series of project, each with their own license: + +[.programlisting] +.... + // SPDX-License-Identifier: BSD-2-Clause AND MIT +....