下一個:,上一層:不應接受的補丁   [目錄][索引]


9.1 在功能於 GNU 上運作之前,請勿安裝

不要為在 GNU 系統上比在某些非 GNU 系統上功能更差或更少(或沒有)的功能編寫或安裝程式碼。

任何 GNU 程式的主要目的是增強 GNU 系統的能力,以賦予使用者自由,因此 GNU 套件的每個功能都應該在 GNU 作業系統的自由發行版(https://gnu.dev.org.tw/distros/)上可用且有用。 為此目的,「功能」是指對使用者來說實質上有用的操作,而不是實作的技術細節。我們將在下面進一步解釋這一點。

僅在某些非 GNU 作業系統上運作或在這些系統上運作得更好的功能會破壞主要目的;更糟的是,它會以犧牲 GNU 為代價來推廣該非 GNU 系統。 儘管從「開放原始碼」哲學的角度來看,安裝造成這種情況的功能會被認為是理想的,但這種情況會直接違反將使用者從這些系統中解放出來的目標。

由於計算使用上的自由是總體目的,我們需要明確地以該自由為目標。 我們需要透過我們的實際決策——以及對這些決策的解釋——來表明,我們所追求的東西比「更好的軟體」和「更多的便利性」更深刻、更重要。 這將讓使用者有機會反思我們採取與大多數程式設計師不同的道路的原因。 請參閱 https://gnu.dev.org.tw/philosophy/open-source-misses-the-point.html

因此,當您作為 GNU 維護者收到在 GNU 系統上無法運作的功能貢獻時,請解釋此規則及其必要性。 解釋說,我們需要 GNU 套件中的所有功能都在 GNU 系統上正常運作,以便它們能夠相互增強並使 GNU 系統變得更好。 因此,變更不應以目前的形式安裝。

這並不表示變更永遠不能安裝。 如果在 GNU 系統上對相同功能的同等良好支援可以同時安裝,則可以稍後安裝。 解釋這一點是要求人們協助編寫程式碼以支援 GNU 上功能的絕佳機會。 此外,告知貢獻者有關學習如何在 GNU 上支援此功能的資源,以便他們可以考慮做這項工作,或招募其他人來幫忙。

如果程式碼的某些部分與系統無關,並且將完成支援 GNU 系統上功能的部分工作,您可以立即安裝它們。 或者您可以將它們放在套件儲存庫中,而無需實際安裝它們,放在 'wip-name' 分支中。 將它們放在儲存庫中可能有助於並鼓勵人們完成在 GNU 上實作該功能。

如果您認為它非常重要,您可以自己實作對 GNU 系統上該功能的支援。 如果您認為將來在 GNU 上擁有該功能是非常理想的,您可以做出特殊安排,將非 GNU 系統特定的程式碼放入套件儲存庫中,但不安裝它——請參閱 儲存庫中未安裝的程式碼

如果某個功能在 GNU 上至少也能同樣良好地運作,即使它在不同系統上的實作方式不同、在其運作實作中使用了不同的系統設施,或在某些細節上對使用者來說看起來有所不同,那麼為非 GNU 系統實作或支援該功能是可以接受的。 以方便或傳統的方式在每個系統上實作這些小細節是可以接受的,以使功能運作。 重點是程式和功能應該「在 GNU 上運作最佳」。

如果其他系統上的系統設施在沒有任何特殊應用程式碼的情況下,提供了 GNU 上沒有的功能,則無需執行任何工作來阻止其運作。 在這種情況下,我們應該努力在 GNU 中實作該功能。

我們不將控制或配置特定操作的介面細節,或實作操作的細節視為「功能」。 同樣地,系統設施(包括系統隨附的程式庫)是實作功能的手段,但設施的使用本身並不是功能。

例如,程式設計平台通常提供一個介面,用於在低階層級控制電腦或作業系統。 在非 GNU 系統上支援低階控制功能是可以接受的,前提是套件也支援 GNU 系統上的相同功能,即使在不同系統之間呼叫功能的細節有所不同。 但是,務必使跨系統呼叫此功能的方式保持一致,對於多個系統支援的特定操作。

主要用於與其他使用者電腦通訊,或在未設定為作為群組緊密耦合使用的電腦之間通訊的功能,完全是另一回事。 只有當通訊功能與 GNU 系統的自由發行版互通操作時,它才真正與 GNU 上的「功能相同」——例如 TCP/IP 就是如此。 非 GNU 系統的不可移植、系統特定的通訊設施是對社群的濫用,因此請勿安裝對它們的支援。 如果有機會在不相關的電腦之間移動這些檔案,則此點也適用於程式之間通訊使用的檔案格式。 (例外:如果可以做到,編寫程式碼從此類檔案中提取使用者資料是值得稱讚的。)

最後,請注意不要讓安裝或支援非 GNU 系統的系統特定程式碼佔用您太多時間。 請參閱 GNU 編碼標準 中的 GNU 編碼標準

假設有人要求在某些非 GNU 系統上支援功能 F,而功能 F 在 GNU 上確實可以運作。 如果您願意,您可以說是,但您沒有義務編寫或維護該程式碼。 您可以告訴他們,編寫和維護程式碼是他們的責任。 如果他們為其編寫了良好且乾淨的程式碼,您可以批准安裝,但這並不表示您或任何其他人有義務支援它。 如果有一天程式碼因位元腐爛而損壞,如果使用者不修復它,您可以刪除它。

請參閱 建議的回應,其中包含一些文字,如果您願意,可以使用或改編這些文字來拒絕這些補丁。 其目的是邀請他們在新功能中同樣良好地支援 GNU 系統。 如果沒有希望做到這一點,那麼只需說「不,謝謝」就足夠了。


下一個:,上一層:不應接受的補丁   [目錄][索引]