本文档介绍了 Fuchsia 项目中的开源许可和相关政策。
Fuchsia 项目代码
所有 Fuchsia 项目代码都托管在 https://fuchsia.googlesource.com/ 上。Fuchsia 项目文件标头将列出 Copyright <year_of_file_creation> The Fuchsia Authors
。
许可
Fuchsia 受多个许可使用:
- Fuchsia 内核通过以下 MIT 式许可发布:/zircon/kernel/LICENSE。
- 所有 Fuchsia 用户空间组件都是根据 BSD 式许可 /LICENSE 或 Apache 2.0 许可 (https://fuchsia.googlesource.com/infra/+/main/LICENSE) 发布的。
- 所有获得 BSD 许可的代码都拥有额外的 IP 授权:/PATENTS。
根据本政策,任何具有不同版权持有者或依据不同许可发布的代码均被视为外部代码,且必须遵循本文档中的外部代码政策。
外部代码
除非特定例外情况或专有例外情况部分中另有列,否则在 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)必须发布到 https://fuchsia.googlesource.com/,并遵守与项目中的任何其他代码相同的许可要求。
许可和跟踪
请参阅什么是许可?了解什么是开源许可及其重要性。 在 https://fuchsia.googlesource.com/ 上托管的所有项目都必须根据已获批准的许可发布,并在代码中包含完整的许可文本。仅用引用(即“BSD3”)来声明许可是不够的,必须包含实际文本。在大多数情况下,项目应该是整个代码库,并且许可文本应该位于代码库顶层的名为“许可”“版权”或类似内容的文件中。在极少数情况下,Fuchsia 项目需要在单个代码库中托管多个逻辑项目(例如,在 Fuchsia 的 Dart Pub 供应商代码库中),每个项目都必须位于自己的目录中,其中包含该项目的许可文本,并且代码库中的顶级文件必须解释子目录使用的许可集。
为方便跟踪,除了许可文本之外,每个包含外部代码的项目还必须包含一个 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 授权或其他附加条款),则许可批准不足以满足这部分代码的需要。
已批准的许可
以下是已获准用于生产目标设备的许可:
BSD 3 条款许可,具体而言见 /LICENSE
BSD 2 条款许可,具体而言是 https://opensource.org/licenses/BSD-2-Clause 中的文本
BSD AES 变体,特别是 https://fedoraproject.org/wiki/Licensing:BSD#AES_Variant 上的文本
MIT 许可,具体而言见 /zircon/kernel/LICENSE
MITNFA 许可,特别是 https://spdx.org/licenses/MITNFA.html 中的文本
X11 许可,特别是 /third_party/github.com/intel/libva/va/x11/va_dri2.c 中的文本
Zlib 许可,具体而言是 https://fuchsia.googlesource.com/third_party/zlib/+/main/README#85 中的文本
Libpng 许可,具体而言就是 https://fuchsia.googlesource.com/third_party/libpng/+/main/LICENSE 中的文字
Boost 许可 1.0,具体而言是 https://fuchsia.googlesource.com/third_party/asio/+/main/asio/LICENSE_1_0.txt 中的文字
OpenSSL 许可,特别是 https://fuchsia.googlesource.com/third_party/boringssl/+/upstream/master/LICENSE 中的文本
FreeType 项目许可,具体而言是 https://fuchsia.googlesource.com/third_party/freetype2/+/main/docs/FTL.TXT 中的文字
Apache 2.0 许可,特别是 https://fuchsia.googlesource.com/third_party/flatbuffers/+/main/LICENSE.txt 中的文本
独立的 JPEG 组许可 (IJG),具体而言是 https://fuchsia.googlesource.com/third_party/iccjpeg/+/main/LICENSE 中的文本
ICU 许可,具体而言是 https://fuchsia.googlesource.com/third_party/icu/+/main/LICENSE 中的文字
卷曲许可,特别是 https://fuchsia.googlesource.com/third_party/curl/+/main/COPYING 上的文字
伊利诺伊大学 / NCSA 开源许可 (NCSA),具体是指 https://fuchsia.googlesource.com/third_party/clang/+/main/LICENSE.TXT 页面上的文本
ISC 许可,具体是指 https://fuchsia.googlesource.com/third_party/boringssl/+/upstream/master/LICENSE#143 上的文本
IBM-Pibs 许可,特别是 https://github.com/u-boot/u-boot/blob/master/Licenses/ibm-pibs.txt 中的文本
R8a779x_usb3 许可,特别是 https://github.com/u-boot/u-boot/blob/master/Licenses/r8a779x_usb3.txt 中的文本
知识共享署名 3.0 未移植许可位于:https://creativecommons.org/licenses/by/3.0/legalcode
知识共享署名 4.0 国际版许可 (https://creativecommons.org/licenses/by/4.0/legalcode)
生产环境目标中不允许使用不属于上述任一许可并且未明确获得豁免的代码。
特定例外情况
以下代码库已获准针对生产目标设备授予特定的豁免权限:
- https://fuchsia.googlesource.com/third_party/llvm/
- https://git.kernel.org/pub/scm/linux/kernel/git/代显固件
这些豁免仅适用于这些特定的代码库,不适用于任何其他代码库,无论它们看起来有多相似。
专有例外情况
在特殊情况下,如果合作伙伴不根据开源许可提供某些技术,Fuchsia 可能只能根据更严格的许可条款向公众提供已编译的二进制文件。
属于此例外情况的任何专有库(如多个兼容的驱动程序)都将单独进行处理,并用相关许可条款明确标记为专有材料。
Fuchsia 生态系统不支持专有许可例外情况,只有当技术显著改善了 Fuchsia 的功能或互操作性,没有适当的开源替代方案,并且代码或二进制文件可以与 Fuchsia 的开源代码库分离时,才能出现例外情况。任何第三方均无权享受紫红色许可政策的例外情况。
开发目标
本部分适用于为 Fuchsia 构建内容的开发者使用的所有代码,包括工具、调试程序、实用程序和示例。对于开发目标,允许使用生产目标允许的所有许可。在本文档中,“目标开发平台”是指由 Fuchsia 开发者(而非最终用户)使用的非基于 Fuchsia 的非正式版设备。
已批准的许可
此外,还可以针对目标开发平台提供以下许可:
GNU 通用公共许可 v2.0 (GPL 2.0),具体而言是 https://fuchsia.googlesource.com/third_party/gdb/+/main/COPYING 上的文字
GNU 库通用公共许可 2.0 (LGPL 2.0),具体而言是 https://spdx.org/licenses/LGPL-2.0.html#licenseText 上的文本
GNU 宽通用公共许可证 2.1 (LGPL 2.1),具体而言是 https://spdx.org/licenses/LGPL-2.1.html#licenseText 上的文本
Mozilla 公共许可版本 2.0 (MPL 2.0),具体而言是 https://spdx.org/licenses/MPL-2.0.html#licenseText 中的文本
开放字体许可 1.1 (OFL 1.1),具体而言是 https://github.com/u-boot/u-boot/blob/master/Licenses/OFL.txt 中的文本
托管开发工件
如需在 Google 存储空间上托管用于开发用途的工件(二进制文件或 tar 压缩文件),您必须执行以下操作:
- 验证所有传递依赖项均使用已批准的许可。
- 验证所有依赖项的确切来源是否都托管在 https://fuchsia.googlesource.com/ 上。
- 如果某些组件托管在其他位置,请与 Open Source Review Board (OSRB) 联系,以检查该托管安排是否符合 Fuchsia 项目的要求。
- 生成一个文件,其中包含二进制文件和所有传递依赖项的许可文本。随工件提供此文件(即,以 tar 的形式提供)。
修改外部代码
修改外部代码的过程与修改 Fuchsia 项目代码的过程相同。请务必使相应的 README.fuchsia
文件保持最新状态,其中包含对上游更改的简要说明。更改外部代码时,请勿修改任何现有的版权声明或许可文件。
支持团队联系人
添加新的外部代码
如需了解如何添加新的外部代码,请参阅开源审核板 (OSRB) 流程。
问题
如果您对 Fuchsia 的外部政策有疑问,或者对这些政策与 Fuchsia 项目的关系有疑问,请发送电子邮件至 external-code@fuchsia.dev。