本文說明 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
的目錄中。如果程式碼是由自己的存放區代管,則在 Fauchsia Platform 原始碼樹狀結構中勾選時,必須將其對應至包含名為 third_party
目錄的路徑。特定部分程式碼可以使用的授權組合,需視程式碼的使用方式而定。請參閱下方有關實際工作環境目標和開發目標的已核准授權清單。
用於 Fuchsia 版本中的所有程式碼都必須託管於 Google 執行的 Gerrit 伺服器。在幾乎所有情況下,程式碼都必須託管於 https://fuchsia.googlesource.com/。
執行 jiri update
時,必須下載所有原始碼。沒有任何建構步驟可以下載額外的原始碼。套件管理系統的程式碼 (例如 Dart Pub 套件或 Rust 的 Cargo 的 Crate) 必須納入 https://fuchsia.googlesource.com/,並遵守與專案中其他任何程式碼相同的授權要求。
授權和追蹤
請參閱「什麼是授權?」一文。,解釋何謂開放原始碼授權及其重要性。託管於 https://fuchsia.googlesource.com/ 的所有專案都必須使用經核准的授權進行發布,而且程式碼旁須包含完整授權文字。僅以提及授權的方式 (例如「BSD3」) 說明授權內容並不足以提供足夠的內容,則必須加入實際的文字。在大多數情況下,專案應為整個存放區,授權文字應位於存放區頂層,且在名為 LICENSE、COPYRIGHT 或類似的檔案中。在極少數情況下,Fchsia 專案需要在單一存放區中代管多個邏輯專案 (例如在 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) 授權 ID,但如果需要較多授權,則可輸入更多文字。Fuchsia 專案代碼,也就是《Fuchsia Author》擁有程式碼版權,以及依 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 的文字
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
不具備上述任一授權,且未明確授予豁免的程式碼。
特定例外狀況
下列存放區已針對正式版目標裝置授予特定豁免項目:
- 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 授權政策的例外資格。
開發目標
本節適用於開發人員用於建構 Fuuchsia 內容的所有程式碼,包括工具、偵錯工具、公用程式和範例。開發目標允許用於正式版目標的所有授權。在本文件中,「開發目標」是指 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 Miner General Public License 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 儲存空間中代管構件 (二進位檔或 tarball),您必須執行下列操作:
- 確認所有遞移依附元件都獲得已核准的授權。
- 確認所有依附元件的確切來源都託管於 https://fuchsia.googlesource.com/。
- 如果某些元件在其他位置託管,請與開放原始碼審查委員會 (OSRB) 聯絡,檢查託管安排是否符合 Fuuchsia 專案的需求。
- 產生包含二進位和所有遞移依附元件授權文字的檔案。提供這個檔案和成果 (即使用 tar)。
修改外部程式碼
修改外部程式碼的程序與修改 Fuchsia 專案程式碼相同。請務必讓適當的 README.fuchsia
檔案保持在最新狀態,並同時提供從上游變更的概要說明。變更外部程式碼時,請勿修改任何現有的版權聲明或授權檔案。
支援聯絡人
新增外部程式碼
如要瞭解如何新增外部程式碼,請參閱開放原始碼審查委員會 (OSRB) 程序。
問題
如果您對 Fuchsia 的外部政策有疑問,或是這些政策與 Fuchsia 專案的關係,請傳送電子郵件至 external-code@fuchsia.dev。