Fuchsia 开源许可政策

本文档介绍了 Fuchsia 项目中的开源许可和相关政策。

Fuchsia 项目代码

所有 Fuchsia 项目代码均托管在 https://fuchsia.googlesource.com/ 上。Fuchsia 项目文件头将列出 Copyright <year_of_file_creation> The Fuchsia Authors

许可

Fuchsia 受多种许可的约束:

根据此政策的规定,所有版权持有者不同的代码或根据其他许可发布的代码都属于外部代码,并且必须遵守本文档中的外部代码政策。

外部代码

https://fuchsia.googlesource.com/ 上托管的所有外部代码都必须是根据已获批准的许可列表中的许可发布的开源代码,除非特定例外情况专有例外情况部分中另有说明。所有外部代码都必须托管在名称以 third_party 开头的代码库中,或者托管在 Fuchsia 现有代码库中名为 third_party 的目录中。如果代码托管在自己的代码库中,则在作为 Fuchsia 平台源代码树的一部分签出时,必须将其映射到包含名为 third_party 的目录的路径。特定代码部分允许使用的许可集取决于该代码的用途。请参阅下文,查看适用于生产目标平台和开发目标平台的已获批准许可的列表。

Fuchsia build 中使用的所有代码都必须托管在 Google 运行的 Gerrit 服务器上。在几乎所有情况下,代码都必须托管在 https://fuchsia.googlesource.com/ 上。

运行 jiri update 时,必须下载所有源代码。任何构建步骤都不得下载其他源代码。软件包管理系统中的代码(例如 Dart 的 Pub 中的软件包或 Rust 的 Cargo 中的 crate)必须通过 vendoring 方法添加到 https://fuchsia.googlesource.com/,并且必须遵循与项目中的任何其他代码相同的许可要求。

许可和跟踪

请参阅什么是许可? ,了解什么是开源许可以及其重要性。 托管在 https://fuchsia.googlesource.com/ 上的所有项目都必须根据已获批准的许可发布,并且应在代码旁边包含完整的许可文本。仅通过引用(例如“BSD3”)声明许可是不够的,必须包含实际文本。在大多数情况下,项目应为整个代码库,许可文本应位于代码库的顶级目录中,且文件名应为 LICENSE、COPYRIGHT 或类似名称。在极少数情况下,Fuchsia 项目需要在单个代码库中托管多个逻辑项目(例如在 Fuchsia 的 Dart pub 供应商代码库中),每个项目都必须位于自己的目录中,并包含该项目的许可文本,并且代码库中的顶级文件必须说明子目录使用的一组许可。

为方便跟踪,除了许可文本之外,每个包含外部代码的项目都必须包含包含项目相关信息的 README 文件。README 必须命名为 README.fuchsia,并且至少包含以下信息:

Name: common name for the project

URL: web site of upstream project

LICENSE: short description of license

此外,我们还建议(但并非强制要求)README.fuchsia 文件说明所使用的上游项目的版本,以及在移植到 Fuchsia 时进行了哪些修改(如果有)。许可的简短说明应为与许可相符的 Software Package Data Exchange (SPDX) 许可标识符,但如果需要对许可进行详细说明,则可以添加更多文字。Fuchsia 项目代码(即 Fuchsia 作者拥有版权的代码以及根据 Fuchsia 项目标准许可发布的代码)不需要此文件。

代码类别和允许的许可

生产目标

本部分适用于最终用户使用的基于 Fuchsia 的正式版设备中运行的所有代码。在本文档中,“正式版目标平台”定义为最终用户使用的正式版 Fuchsia 设备。“正式版目标平台”包括在设备上运行的内核、驱动程序、系统服务、框架、程序等,无论其部署方式如何。此目标允许使用以下许可之一发布的代码,且仅限于该许可。如果存在其他限制(例如 IP 授权或其他附加条款),则许可批准对相应部分代码而言不够充分。

已获批准的许可

以下是正式版目标设备的已获批准许可:

生产目标中不得包含未采用上述任一许可且未明确获得豁免的代码。

受限互惠类别的许可不会获准在 Fuchsia 中使用。

特定异常

以下代码库已针对生产目标设备获得特定豁免:

这些豁免仅适用于这些特定代码库,而不适用于任何其他代码库,无论它们看起来有多相似。

专有异常

在特殊情况下,如果合作伙伴不愿根据开源许可提供某些技术,Fuchsia 可能只能根据更严格的许可条款向公众提供已编译的二进制文件。

凡是属于此例外的所有专有库(例如多个兼容驱动程序)都将单独提供,并明确标记为专有材料,并注明相关许可条款。

在 Fuchsia 生态系统中,不支持专有许可异常,只有在技术能够显著提升 Fuchsia 功能或互操作性、没有足够的开源替代方案,并且代码或二进制文件可以与 Fuchsia 的开源代码库分离时,才会允许异常。任何第三方都无权获得 Fuchsia 许可政策的例外情况。

开发目标

本部分适用于开发者构建 Fuchsia 内容时使用的所有代码,包括工具、调试程序、实用程序和示例。允许用于正式版目标的所有许可也适用于开发目标。在本文档中,“开发目标”是指 Fuchsia 开发者(而非最终用户)使用的非生产版 Fuchsia 设备。

已获批准的许可

此外,开发目标还可以使用以下许可:

托管开发工件

如需出于开发目的在 Google 存储空间上托管工件(二进制文件或 tarball 文件),您必须执行以下操作:

  • 验证所有传递依赖项均采用已获批准的许可。
  • 验证所有依赖项的确切来源是否托管在 https://fuchsia.googlesource.com/ 上。
    • 如果某些组件托管在其他位置,请与开源审核委员会 (OSRB) 联系,检查托管安排是否符合 Fuchsia 项目的要求。
  • 生成一个文件,其中包含二进制文件和所有传递依赖项的许可文本。将此文件与工件一起提供(即在 tar 中)。

修改外部代码

修改外部代码的过程与修改 Fuchsia 项目代码的过程相同。请务必及时更新相应的 README.fuchsia 文件,并对上游的更改进行概要说明。更改外部代码时,请勿修改任何现有版权通知或许可文件。

支持联系人

添加新的外部代码

如需了解如何添加新的外部代码,请参阅开源审核委员会 (OSRB) 流程

问题

如果您对 Fuchsia 的外部政策或这些政策与 Fuchsia 项目的关系有疑问,请发送电子邮件至 external-code@fuchsia.dev