本文說明 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
目錄中。如果程式碼是託管在自己的存放區中,則必須對應至包含名為 third_party
的目錄路徑,並在簽出為 Fuchsia 平台來源樹狀結構的一部分時。特定程式碼部分允許的授權組合取決於該程式碼的使用方式,請參閱下方的清單,瞭解適用於正式版目標和開發目標的核准授權。
Fuchsia 建構作業中使用的所有程式碼,都必須託管在 Google 執行的 Gerrit 伺服器上。在幾乎所有情況下,程式碼都必須託管在 https://fuchsia.googlesource.com/。
執行 jiri update
時,必須下載所有原始碼。建構步驟不會下載其他原始碼。套件管理系統的程式碼 (例如 Dart 的 Pub 或 Rust 的 Crate 中的套件) 必須提供給 https://fuchsia.googlesource.com/,並遵守與專案中任何其他程式碼相同的授權規定。
授權和追蹤
請參閱「什麼是授權?」一文。,瞭解開放原始碼授權的意義和重要性。 https://fuchsia.googlesource.com/ 上託管的所有專案都必須根據核准的授權發布,且程式碼旁須附上完整授權文字。僅以參照方式說明授權 (例如「BSD3」) 並不夠,必須附上實際文字。在多數情況下,專案應為整個存放區,授權文字應位於存放區的頂層,且檔案名稱為 LICENSE、COPYRIGHT 或類似名稱。在極少數情況下,Fuchsia 專案需要在單一存放區中代管多個邏輯專案 (例如 Fuchsia 的 Dart 發布供應商存放區),每個專案都必須位於自己的目錄中,並附上該專案的授權文字,且存放區中的頂層檔案必須說明子目錄使用的授權組合。
為方便追蹤,除了授權文字外,每個包含外部程式碼的專案都必須包含 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) 授權 ID,與授權相符。如需進一步說明授權,則可加入更多文字。Fuchsia 專案程式碼 (即 Fuchsia 作者擁有著作權的程式碼,以及根據 Fuchsia 專案標準授權發布的程式碼) 不需要這個檔案。
程式碼類別和允許的授權
生產目標
本節適用於在 Fuchsia 裝置上執行的所有程式碼,且這些裝置是由一般使用者使用。本文將「正式版目標」定義為使用者使用的正式版 Fuchsia 裝置。「正式版目標」包括在裝置上執行的核心、驅動程式、系統服務、架構、程式等,無論部署方式為何。如果程式碼是根據下列其中一種授權發布,且僅適用該授權,則允許在目標中加入程式碼。如有其他限制 (例如 IP 授權或其他額外條款),則授權核准不足以涵蓋該部分程式碼。
已核准的授權
以下是通過核准的正式版目標裝置授權:
BSD 3-clause 授權,具體而言是位於 https://opensource.org/license/BSD-3-Clause 的文字
BSD 2-clause 授權,具體而言是 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」/third_party/github.com/intel/libva/va/x11/va_dri2.c的文字。
X11-lucent 授權,具體來說是位於 https://scancode-licensedb.aboutcode.org/x11-lucent.html 的文字
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 的文字
阿帕契 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 的文字
Curl 授權,具體來說是 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 的文字。
創用 CC 姓名標示 3.0 未本地化授權,網址為: https://creativecommons.org/licenses/by/3.0/legalcode
創用 CC 姓名標示 4.0 國際授權,網址為: https://creativecommons.org/licenses/by/4.0/legalcode
Intel-ACPI 授權,特別是 https://github.com/acpica/acpica/blob/master/LICENSE#L3-L107 的文字
如果程式碼不適用上述任一授權,且未明確獲得豁免,則不得用於正式版目標。
特定例外狀況
下列存放區已獲准生產目標裝置的特定豁免:
- https://fuchsia.googlesource.com/third_party/llvm/
- https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/LICENCE.iwlwifi_firmware
這些豁免條款僅適用於這些特定存放區,不適用於任何其他內容,無論這些內容看起來多麼相似。
專有例外狀況
在特殊情況下,如果合作夥伴不提供開放原始碼授權下的特定技術,Fuchsia 可能只能在更嚴格的授權條款下,向大眾提供編譯後的二進位檔。
凡是屬於這項例外情況的專有程式庫 (例如多個相容的驅動程式),都會獨立存在,並清楚標示為專有素材,附上相關授權條款。
Fuchsia 生態系統不建議使用專有授權例外狀況,只有在技術大幅提升 Fuchsia 功能或互通性、沒有合適的開放原始碼替代方案,且程式碼或二進位檔可與 Fuchsia 的開放原始碼存放區分開時,才會例外。任何第三方均無權豁免遵守 Fuchsia 授權政策。
開發目標
本節適用於開發人員為 Fuchsia 建構項目時使用的所有程式碼,包括工具、偵錯工具、公用程式和範例。開發目標可使用所有允許用於生產目標的授權。本文將「開發目標」定義為 Fuchsia 開發人員使用的非正式版 Fuchsia 裝置,而非一般使用者。
已核准的授權
此外,開發目標也允許使用下列授權:
GNU 通用公眾授權 2.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 Public License Version 2.0 (MPL 2.0),具體而言,請參閱 https://spdx.org/licenses/MPL-2.0.html#licenseText 的文字
Open Font License 1.1 (OFL 1.1),具體而言是位於 https://github.com/u-boot/u-boot/blob/master/Licenses/OFL.txt 的文字
代管開發構件
如要在 Google 儲存空間上代管構件 (二進位檔或 tarball),以供開發用途,請完成下列步驟:
- 確認所有遞移依附元件都採用核准的授權。
- 確認所有依附元件的確切來源都託管在 https://fuchsia.googlesource.com/。
- 如果部分元件託管於其他位置,請洽詢開放原始碼審查委員會 (OSRB),確認託管安排符合 Fuchsia 專案的需求。
- 產生檔案,內含二進位檔和所有轉換依附元件的授權文字。請連同構件 (即 tar 檔案) 一併提供這個檔案。
修改外部程式碼
修改外部程式碼的程序與修改 Fuchsia 專案程式碼的程序相同。請務必使用上游的變更高階說明,讓適當的 README.fuchsia
檔案保持在最新狀態。變更外部程式碼時,請勿修改任何現有的著作權聲明或授權檔案。
支援聯絡人
新增外部代碼
如要瞭解如何新增外部程式碼,請參閱「Open Source Review Board (OSRB) Process」。
問題
如果您對 Fuchsia 的外部政策有疑問,或想瞭解這些政策與 Fuchsia 專案的關係,請傳送電子郵件至 external-code@fuchsia.dev。