FreeBSD 许可政策

商标

FreeBSD 是 FreeBSD 基金会的注册商标。

制造商和销售商用来区分其产品的许多名称都被声称为商标。在本文档中出现这些名称的地方,并且 FreeBSD 项目了解商标声明,这些名称后面都已加上“™”或“®”符号。


1. 新文件的首选许可证

本节的其余部分旨在帮助您入门。通常情况下,如有疑问,请咨询。获得建议比修复源代码树更容易。FreeBSD 项目同时使用显式许可证(其中许可证的逐字文本在每个文件中复制)和分离许可证(其中文件中的标签指定许可证,如本文档所述)。

FreeBSD 项目使用此文本作为首选许可证

/*-
 * Copyright (c) [year] [your name]
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

FreeBSD 项目不允许在新代码中使用“广告条款”。由于 FreeBSD 项目的贡献者众多,因此对于许多商业供应商来说,遵守此条款变得很困难。如果您的代码树中包含广告条款,请考虑切换到不包含该条款的许可证。对 FreeBSD 的新贡献应该使用 BSD-2-Clause 许可证。

FreeBSD 项目完全不鼓励新的许可证和标准许可证的变体。新许可证需要 core@FreeBSD.org 的批准才能驻留在主存储库中。过去,非标准许可证产生的问题多于标准许可证。非标准许可证的草拟不当常常会导致更多意想不到的后果,因此它们不太可能被 core@FreeBSD.org 批准。FreeBSD 项目正在标准化 SPDX 发布的 BSD-2-Clause 许可证。

此外,项目政策要求在某些非 BSD 许可证下许可的代码必须放置在存储库的特定部分。对于某些许可证,编译必须是条件性的或默认禁用。例如,GENERIC 内核静态部分中的代码必须在 BSD 或基本类似的许可证下获得许可。GPL、APSL、CDDL 等许可的软件不得编译到静态 GENERIC 内核中。但是,这些许可证下的代码可用于预编译模块。

提醒开发人员,在开源中,“开放” 正确与否与“源代码” 正确与否同等重要。对知识产权处理不当会产生严重后果。任何问题或疑虑应立即提请 core@FreeBSD.org 注意。

2. 软件许可政策

以下部分详细概述了项目的软件许可政策。在大多数情况下,我们希望开发人员阅读、理解并利用上面部分的内容,将其应用到他们贡献的相应许可证中。本文档的其余部分详细介绍了这些政策的哲学背景以及政策的详细信息。与往常一样,如果您发现下面的文本令人困惑,或者您需要帮助应用这些政策,请与 core@FreeBSD.org 联系。

2.1. 指导原则

FreeBSD 项目旨在开发一个完整的 BSD 许可的操作系统,允许系统用户在不受约束或进一步许可义务的情况下生成衍生产品。我们邀请并非常感谢以双条款 BSD 许可证的形式提供更改和添加,并鼓励其他开源项目采用此许可证。使用 BSD 许可证是鼓励采用高级操作系统技术的关键,并且在许多著名场合都对新技术的广泛使用起到了关键作用。

但是,我们接受允许将不同许可的软件包含在 FreeBSD 源代码树中的理由。

我们要求在某些非 BSD 许可证下许可的软件在源代码树中被仔细隔离,以防止其污染仅限 BSD 的组件。这种谨慎的管理有助于提高许可证的清晰度,并促进仅限 BSD 的衍生产品的生产。

除非获得特别豁免,否则不得用限制性更强的软件替换现有的 BSD 许可组件。我们鼓励 FreeBSD 和第三方开发人员寻求以 BSD 许可证重新许可、双重许可或重新实现关键组件。这样可以更容易地将它们更完整地集成到 FreeBSD 操作系统中。

2.2. 政策

  • 导入除 BSD 许可证和类 BSD 许可证(如下所定义)以外的任何许可证下的新软件,需要事先获得 FreeBSD 核心团队的批准。导入请求必须包括

    • 新版本或补丁包含的功能或错误修复列表,以及我们用户需要这些功能的证据。PR 或邮件列表讨论的引用是理想的证据形式。

    • 此流程应用于所有软件导入,而不仅仅是那些需要核心团队审查的软件。新版本的仅仅存在并不能证明将软件导入源代码或端口的合理性。

    • 可能受影响的 FreeBSD 分支列表。范围扩展需要向 FreeBSD 核心团队提交新的请求并获得批准。

  • Apache 许可证 2.0 在某些情况下是可以接受的。核心团队必须批准导入新的 Apache 许可证许可组件或将现有组件的许可证更改为 Apache 许可证。

    • 此许可证适用于以下组件

      • LLVM 工具链和(使用 LLVM 异常)运行时组件。

  • BSD+专利许可证在某些情况下是可以接受的。核心团队必须批准导入新的 BSD+专利许可证许可组件或将现有组件的许可证更改为 BSD+专利许可证。

    • 此许可证适用于以下组件

      • 与 UEFI 功能相关的 EDK2 派生代码

  • 通用开发和分发许可证 (CDDL) 在某些情况下是可以接受的。核心团队必须批准导入新的 CDDL 许可组件或将现有组件的许可证更改为 CDDL。

    • 此许可证适用于以下组件

      • DTrace

      • ZFS 文件系统,包括内核支持和用户空间实用程序

  • 历史上,所有版权声明中都包含“保留所有权利”短语。所有 BSD 版本都包含它,以遵守美洲的 1910 年布宜诺斯艾利斯公约。随着尼加拉瓜在 2000 年批准了 伯尔尼公约,布宜诺斯艾利斯公约及其短语已过时。因此,FreeBSD 项目建议新代码省略该短语,并鼓励现有版权所有者将其删除。2018 年,该项目更新了其模板以删除它。

  • 最初,FreeBSD 树中的许多项目都标记为 BSD-2-Clause-FreeBSD。但是,SPDX 已将该许可证作为变体废弃;并且已废弃的标签的 SPDX 文本与标准 FreeBSD 许可证的差异足够大,因此不应使用它。目前正在对其当前用法进行审查。

2.2.1. 可接受的许可证

以下许可证被认为是此政策目的下可接受的类 BSD 许可证。偏差或使用任何其他许可证必须经 FreeBSD 核心团队批准

  • BSD 许可证的 2 条款版本

/*-
 * Copyright (c) [year] [your name]
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */
  • BSD 许可证的 3 条款版本

/*-
 * Copyright (c) [year] [your name]
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */
  • ISC 许可证

/*-
 * Copyright (c) [year] [copyright holder]
 *
 * SPDX-License-Identifier: ISC
 */
  • MIT 许可证

/*-
 * Copyright (c) [year] [copyright holders]
 *
 * SPDX-License-Identifier: MIT
 */

3. 软件集合许可证

FreeBSD 项目根据 BSD-2-Clause 许可证许可其软件编译,如 COPYRIGHT 中所述。此许可证不会取代单个文件的许可证,这将在下面描述。没有明确许可证的文件均在 BSD-2-Clause 许可证下获得许可。

4. 许可证文件位置

为了尽可能地符合REUSE 软件标准,所有许可证文件都将存储在仓库的LICENSES/目录下。此顶级目录下有三个子目录。LICENSES/text/子目录以分离的形式包含FreeBSD软件集合中允许的所有许可证的文本。这些文件使用SPDX-License-Identifier名称后跟.txt进行存储。LICENSES/exceptions/子目录以分离的形式包含FreeBSD软件集合中允许的所有例外情况的文本。这些文件使用例外标识符名称后跟.txt进行存储。LICENSES/other/以分离的形式包含SPDX-License-Identifier表达式中引用的许可证文件,但不受允许作为分离的许可证。所有此类文件必须至少在FreeBSD软件集合中出现一次,并且在引用它们的最后一个文件被删除时应被删除。没有足够的SPDX匹配许可证的许可证必须位于LICENSES/other/中,并且文件名必须以LicenseRef-开头,后跟唯一的idstring。目前尚未识别出此类文件,但如果识别出,则此处将显示完整列表。

FreeBSD项目目前不使用REUSE Software标准中描述的DEP5文件。FreeBSD项目尚未根据此标准标记树中的所有文件,如本文档后面所述。由于此策略仍在发展中,因此FreeBSD项目尚未将其包含在其存储库中。

5. 个别文件的许可证

FreeBSD软件集合中的每个单独文件都有其自己的版权和许可证。它们的标记方式各不相同,在本节中进行了描述。

版权声明标识谁声称对文件的合法版权。这些是由项目尽力提供的。由于版权可以合法转让,因此当前的版权持有者可能与文件中列出的不同。

许可证是贡献者和软件用户之间的一份法律文件,授予用户使用软件的受版权保护部分的权限,但须遵守许可证中规定的某些条款和条件。在FreeBSD软件集合中,许可证可以通过两种方式表达。许可证可以在文件中明确表达。当许可证授予在文件中明确表达时,可以根据该许可证使用、复制和修改该文件。许可证也可以间接表达,其中许可证的文本位于其他地方。该项目为此目的使用软件包数据交换 (SPDX) 许可证标识符,如下面的子部分所述。SPDX许可证标识符由Linux基金会的SPDX工作组管理,并已得到整个行业、工具供应商和法律团队合作伙伴的认可。有关更多信息,请参阅https://spdx.org/以及以下部分,了解FreeBSD项目如何使用它们。

在没有明确许可证的情况下向软件集合贡献修复和增强功能的实体同意在适用于修改文件(s)的条款下许可这些更改。项目政策,与行业惯例一致,仅包含来自对集合中文件的重要贡献者的版权声明。

FreeBSD软件集合中有四种类型的文件

  1. 仅包含明确的版权声明和许可证的文件。

  2. 既包含明确的版权声明和许可证,又包含SPDX-License-Identifier标签的文件。

  3. 仅包含版权声明和SPDX-License-Identifier标签,但不包含明确许可证的文件。

  4. 完全没有版权或许可证的文件。

FreeBSD软件集合中的许多文件都包含版权声明和文件中包含的明确许可证。在这些情况下,文件中包含的许可证具有约束力。

FreeBSD软件集合中的一些文件包含版权声明、SPDX-License-Identifier标签和明确许可证。明确许可证优先于SPDX-License-Identifier标签。SPDX-License-Identifier标签是项目尽力尝试描述许可证,但仅供自动化工具参考。有关如何解释表达式,请参阅SPDX-License-Identifier 表达式

树中的一些文件包含分离的许可证。这些文件仅包含版权声明和SPDX-License-Identifier表达式,但不包含明确许可证。有关如何解释表达式,请参阅SPDX-License-Identifier 表达式。注意:项目允许的分离许可证表达式是信息性或标准定义的表达式的子集。

仅包含SPDX-License-Identifier的文件的许可证应解释为

  1. 以文件的版权声明开头。包含所有版权持有者。

  2. 对于每个子表达式,从LICENSE/text/id.txt复制许可证文本。当存在例外情况时,从src/share/license/exceptions/id.txt附加它们。SPDX-License-Identifier表达式应按SPDX标准中所述进行解释。

其中idSPDX 标识符许可证例外的“标识符”列中的SPDX短许可证标识符。如果LICENSE/中没有文件,则根据本节,该许可证或例外情况不能指定为分离的许可证。

读取从文件中分离的许可证文本时,必须考虑一些因素才能使分离的许可证有意义。

  1. 任何对版权声明的引用都应指许可文件的版权声明,而不是许可证文本文件本身中的任何版权声明。许多SPDX文件都有示例版权声明,这些声明仅被理解为示例。

  2. 当许可证文本中提到实体名称时,应将其解释为适用于许可文件中版权声明中列出的所有版权持有者列表。例如,BSD-4-条款许可证包含短语“此产品包含由组织开发的软件”。短语“组织”应替换为版权持有者。

  3. 当SPDX提供许可证的变体时,则理解LICENSE/文件中的许可证代表所选许可证的确切版本。SPDX标准用于匹配许可证系列,这些变体有助于匹配SPDX组织认为在法律上相同的类似许可证。

对于文本略有不同的许可证,SPDX有匹配指南。这些指南在此处不相关。希望根据LICENSE/中未逐字包含的SPDX许可证的变体获得许可的贡献者不能使用分离选项,必须明确指定许可证。

某些文件无法在其上添加合适的注释。在这种情况下,可以在file.ext.license中找到许可证。例如,名为foo.jpg的文件可以在foo.jpg.license中拥有许可证,遵循REUSE软件约定。

项目创建的缺少版权声明的文件被理解为属于COPYRIGHT中的整体版权和许可。文件要么只是事实的叙述,不受版权法保护,要么内容过于琐碎,不值得为明确的许可证付出额外开销。

缺少标记且包含大量可版权材料的文件,或其作者认为标记不正确,应提请FreeBSD核心团队注意。FreeBSD项目的强烈政策是遵守所有适当的许可证。

将来,所有此类文件都将被明确标记,或遵循REUSE软件.license约定。

5.5. SPDX-License-Identifier 表达式

“SPDX许可证表达式”在FreeBSD软件集合中用于两种上下文。首先,其完整形式用于文件,这些文件在其内部包含明确的许可证声明以及总结性SPDX-License-Identifier表达式。在这种情况下,可以使用这些表达式的全部功能。其次,如上所述,以受限形式使用它来表示给定文件的实际许可证。在第二种情况下,项目仅允许此表达式的子集。

SPDX许可证子表达式要么是来自SPDX许可证列表的SPDX短格式许可证标识符,要么是当许可证例外适用时,由“WITH”分隔的两个SPDX短格式许可证标识符的组合。当多个许可证适用时,表达式由关键字“AND”、“OR”分隔子表达式并用“()”括起来组成。表达式的完整规范阐述了所有细节,并在与本节的简化处理发生冲突时具有优先权。

某些许可证标识符,如[L]GPL,可以选择仅使用该版本或任何更高版本。SPDX定义后缀-or-later表示该版本的许可证或更高版本。它定义-only表示仅该文件的特定版本。有一个旧的约定是没有任何后缀(这意味着新的“-only”后缀的意思,但人们将其误解为-or-later)。此外,附加+后缀表示-or-later。FreeBSD中的新文件不应使用这两个约定。应根据需要转换使用此约定的旧文件。

      // SPDX-License-Identifier: GPL-2.0-only
      // SPDX-License-Identifier: LGPL-2.1-or-later

当需要许可证修饰符时,应使用WITH。在FreeBSD项目中,LLVM中的许多文件对Apache 2.0许可证都有例外情况

      // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

例外标签由SPDX管理。许可证例外只能应用于某些许可证,如例外中所指定。

如果文件有多种许可证可以选择并且选择了一种许可证,则应使用OR。例如,某些dtsi文件可以在双重许可证下获得

      // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause

如果文件有多个许可证并且所有条款都适用于使用该文件,则应使用AND。例如,如果代码已由多个项目合并,每个项目都有自己的许可证

      // SPDX-License-Identifier: BSD-2-Clause AND MIT

上次修改日期:2024年8月11日,作者:Fernando Apesteguía