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 时,必须下载所有源代码。任何 build 步骤都不得下载其他源代码。来自软件包管理系统的代码(例如来自 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 所做的修改(如有)。许可的简短说明应为与许可匹配的软件软件包数据交换 (SPDX) 许可标识符,但如果需要更详细地说明许可,则可以添加更多文字。Fuchsia 项目代码(即 Fuchsia 作者拥有版权的代码以及根据 Fuchsia 项目的标准许可发布的代码)不需要此文件。

代码类别和允许的许可

生产目标

本部分适用于最终用户使用的生产 Fuchsia 设备中运行的所有代码。在本文档中,“正式版目标平台”是指最终用户正在使用的基于 Fuchsia 的正式版设备。“生产目标”包括在设备上运行的内核、驱动程序、系统服务、框架、程序等,无论它们是如何部署的。如果代码根据以下许可之一(且仅根据这些许可)发布,则允许在相应目标平台中使用该代码。如果存在其他限制(例如 IP 授予或其他附加条款),则许可批准不足以涵盖相应部分的代码。

已获批的许可

以下是生产目标设备的许可:

未采用上述许可之一且未明确获得豁免的代码不得用于生产目标平台。

受限互惠类别的许可不会获批用于 Fuchsia。

特定例外情况

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

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

专有例外

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

属于此例外情况的任何专有库(例如多个兼容的驱动程序)都将单独提供,并明确标记为专有材料,同时附上相关许可条款。

Fuchsia 生态系统不提倡使用专有许可例外情况,只有在以下情况下才会做出例外处理:技术可大幅提升 Fuchsia 的功能或互操作性,没有合适的开源替代方案,并且代码或二进制文件可以从 Fuchsia 的开源代码库中分离出来。任何第三方均无权获得 Fuchsia 许可政策的例外情况。

开发目标

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

已获批的许可

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

托管开发制品

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

  • 验证所有传递依赖项是否都采用已获批准的许可。
  • 验证所有依赖项的确切来源是否托管在 https://fuchsia.googlesource.com/ 上。
  • 生成一个文件,其中包含二进制文件及其所有传递依赖项的许可文本。将此文件与制品(即在 tar 中)一起提供。

修改外部代码

修改外部代码的流程与修改 Fuchsia 项目代码的流程相同。请务必及时更新相应的 README.fuchsia 文件,其中应包含来自上游的更改的高级说明。更改外部代码时,请勿修改任何现有的版权声明或许可文件。

支持团队联系人

添加新的外部代码

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

问题

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