軟體包貢獻
此頁面適用於希望貢獻軟體包的開發者。如果您想安裝已貢獻的軟體包,請參閱 安裝已貢獻的軟體包 。
我們非常感謝才華橫溢且勤奮努力的社群成員為 Qubes OS 貢獻軟體軟體包。此頁面說明了此類軟體包的納入標準和程序,以及相關人員的角色和職責。
納入標準
為了被接受,軟體包必須:
不得以任何方式削弱 Qubes OS 的安全性。
以開源授權發佈(請參閱 Qubes OS 授權)。
遵循我們的 程式碼撰寫指南。
經過徹底測試。
為 Qubes 使用者提供明確定義的使用案例。
審查時不會造成過度負擔。
(請注意,我們保留隨時對此列表新增標準的權利。)
貢獻程序
在您開始對軟體包投入大量工作之前,我們建議您先在 :ref:`qubes-devel 郵件列表 <introduction/support:qubes-devel>`上與 Qubes 開發者和更廣泛的社群討論您的想法。一旦您準備好了一個可以成為 Qubes OS 一部分的軟體包,請遵循以下程序:
確保您的軟體包符合納入標準。
如果您的程式碼尚未在 GitHub 上,請建立一個包含您程式碼的 GitHub 儲存庫。您可以參考一個名為 qubes-skeleton 的範例軟體包。
如果您還沒有,請 簽署您的程式碼。
在 qubes-issues 中建立一個標題為
[Contribution] your-package-name的議題。包含您儲存庫的連結、軟體包的簡短說明,以及您認為它應納入 Qubes 的簡短理由。請注意,Qubes 核心開發者非常忙碌。如果您提交貢獻時他們正處於高負載狀態,可能需要很長時間他們才有時間審查您的軟體包。如果發生這種情況,請不要氣餒。如果您認為他們可能忘記了您待處理的貢獻,您可以透過在議題上留言來「推」您的請求,但請*非常節制*地這麼做(即每月不超過一次)。感謝您的理解!您可能會被詢問後續問題。如果我們決定接受您的貢獻,您將被邀請加入 GitHub 上的 QubesOS-contrib 組織,作為您貢獻的公開認可(但沒有推送權限;請參閱 審查程序),而 QubesOS-contrib 將 fork 您的儲存庫。如果我們決定不接受您的貢獻,我們將說明原因並關閉議題。
更新程序
任何人都可以為已貢獻的軟體包提供更新(修補程式),不僅僅是貢獻該軟體包的人!更新程序對所有人都相同,包括原始軟體包貢獻者。
如果您想更新一個已貢獻的軟體包(特別是 QubesOS-contrib 擁有的 fork),請向該儲存庫提交一個 已簽署、可快轉合併的拉取請求,包含您的變更。請注意,您的拉取請求**必須**同時是 已簽署 且可快轉合併的,否則它將在未經進一步審查的情況下被關閉。一位或多位審查者可能會在您的拉取請求上發表評論。請準備好閱讀並回覆這些評論。
審查程序
此審查程序涵蓋原始軟體包貢獻(請參閱 貢獻程序)以及對這些軟體包的所有後續更新,包括來自原始軟體包貢獻者的更新(請參閱 更新程序)。所有變更將由 Qubes Core Reviewer(QCR)和 :ref:`軟體包維護者 <developer/general/package-contributions:package maintainers>`(PM)審查。在所有情況下,QCR 將是 Qubes 核心開發者。在某些情況下,QCR 和 PM可能是同一個人。例如,如果有人貢獻了一個軟體包然後消失,且找不到合適的替代者,那麼核心 Qubes 開發者很可能會同時擔任該軟體包的 QCR 和 PM 角色,至少直到另一位合適的候選人自願成為該軟體包的 PM 為止。
審查程序如下:
某人 S 想要對軟體包 P 進行變更。
S 向 QubesOS-contrib 擁有的 P 儲存庫 fork 提交一個可快轉合併的拉取請求。
PM 審查拉取請求。如果拉取請求通過 PM 的審查,PM 會在拉取請求上新增一個 已簽署 評論,說明它已通過審查。(在 S = PM 的情況下,PM 可以在提交拉取請求之前,簡單地在 HEAD 提交上新增一個 已簽署 標籤。)如果拉取請求未通過 PM 的審查,PM 會在拉取請求上留言說明原因。
QCR 審查拉取請求。如果拉取請求通過 QCR 的審查,QCR 會將一個 已簽署 標籤推送到 HEAD 提交,說明它已通過審查,並以快轉合併方式合併拉取請求。如果拉取請求未通過 QCR 的審查,QCR 會在拉取請求上留言說明原因,並且 QCR 可能決定關閉拉取請求。
在所有情況下,QCR 審查要驗證的第一個條件是確保貢獻**不會**劫持 QubesOS 的任何核心軟體包,當然也不會劫持 QubesOS-contrib 的任何軟體包。更具體地說,將特別關注整個建置管線,並具體審查:
軟體包相依性,
建置腳本(包括下載的)、
所有下載的元件應根據靜態雜湊值進行驗證,
RPM/DEB 安裝指令稿(例如檢查那些會劫持其他軟體包的限制條件),
Makefile,
軟體包建置的`可重現性 <https://reproducible-builds.org/>`__
以及任何會導致合法元件部分/完全受損的步驟。對於這部分,您可以參考一個名為 qubes-skeleton 的範例軟體包。
軟體包維護者
如果您貢獻了一個軟體包,我們會假設您將成為該軟體包的維護者,除非您告知我們否則。作為軟體包的維護者,您的權利和責任是:
審查 針對該軟體包提出的每個拉取請求。
決定軟體包何時達到新版本,並在發生時通知 Qubes 核心開發者。
如果您不希望成為軟體包的維護者,請告知我們。如果您在很長一段時間內且至少在收到一次提醒後仍未履行對某個軟體包的維護職責,我們將假設您不再希望成為該軟體包的維護者。