保持自由軟體自由的另一個方面是鼓勵開發自由外掛,並阻止開發專有外掛。許多 GNU 程式可能根本沒有任何類似外掛的東西,但那些有的程式應該遵循這些實踐。
首先,一般外掛架構設計應該將外掛與原始碼緊密結合,使得外掛和基礎程式成為一個擴展程式的一部分。例如,對於 GCC 來說,外掛接收和修改 GCC 的內部資料結構,因此顯然與基礎 GCC 形成一個擴展程式。
其次,您應該要求外掛開發者聲明他們的外掛是以適當的許可證發布的。這應該通過簡單的程式化檢查來強制執行。例如,對於 GCC 來說,外掛必須定義全域符號 plugin_is_GPL_compatible
,從而聲明該外掛是以 GPL 相容許可證發布的(請參閱Plugins,出自GCC Internals)。
通過在您的程式中添加此檢查,您並不是在創建新的法律要求。《GPL》本身就要求外掛必須是自由軟體,並以相容許可證授權。只要您遵循了上述第一條規則,保持外掛與您的原始程式緊密結合,《GPL》和《AGPL》就已經要求這些外掛以相容許可證發布。外掛中的符號定義——或任何在您的程式中效果最佳的等效方法——使得任何可能分發專有外掛的人更難以在法律上為自己辯護。如果有關此事的案件訴諸法庭,我們可以指出該符號作為證據,證明外掛開發者理解許可證有此要求。