Ted、Rex,Bob好,
經基金會那邊告知才知道這邊有討論串,那我一併將經驗分享節錄如下,分享一下處理相關事務的經驗!
不過是這樣,OCF 協助 g0v 補助專案來處理金流,但 OCF 不直接涉入 g0v 專案的運作,所以採用 AGPL-3.0 做為補助專案申請,哪些開源的部份要公開或提交給 g0v 獎助金專案,可能還是需要 g0v 獎助金專案法律顧問 Isabella Hu 的確認。但就開源授權的管理和處理,我就個人身份,提供一些實務上協助過的處理意見。
大致是:
1、如果我猜的沒錯,Ted 預定使用 AGPL-3.0,是因為其高度的授權拘束性,希望其他人拿了程式源碼去用後,也必須把自己改作的部份再提供出來?
2、然而有些部份您本身是不希望採開放源碼處理的。
3、AGPL-3.0 的基本框架是,一個統合軟體作品(as a whole),各部份不能切割使用時,或副元件大部份的功能都必須依賴主元件,並且開發上也必須亦步亦趨參考主元件時,該副元件視為主元件的一部份,所以若主元件是 AGPL-3.0,則副元件也必須得是 AGPL-3.0。
4、然而當主元件、副元件的作者都是同一個人的時候,當然「自己不會告自己」,所以這個爭議當主元件及副元件作者歸一時,現實上就不會存在,但是會容易引發誤會,因為主元件開源出去,若別人改了就要開源,原作者自己再做副元件,為何不用開源,雖然可以一次一次的說明,但畢竟容易產生誤會,所以我的個人建議是盡量不要讓它太複雜。
5、實務上另一個處理方式,就是主元件是一個類似 MongoDB 這樣資料庫、函式庫(database / library)的作品,其提供 Well defined API,來供其他應用程式存取,並且 API 部份,會採寬鬆的開源授權釋出,例如過往 MongoDB 在 API/driver 的部份,就採 Apache-2.0 來提供,由此來和其他開發者表示:
(1) 改到 AGPL-3.0 的部份,就要照 AGPL-3.0。
(2) 但如果擔心 AGPL-3.0 的擴散範圍被過度解釋,則可以去看那些原作者提供的,採 MIT 或 Apache-2.0 提供的 API,如果只是抄這些 API 的必要函式來寫應用程式,最後 bundle 在一起使用,那解釋上這些個別的應用程式,或呼叫介面,並不是 AGPL-3.0 授權的衍生作品,從而就沒有 AGPL-3.0 授權擴散的爭議。
大意是外圍的社群開放者提報問題,詢問使用 ansible 部份源碼來寫 inventory plugin,會不會讓這個 plugin 被 GPL-3.0 拘束?
ansible 開發團隊的簡要回覆是:
(1) 不一定,但用到就要變 GPL-3.0,這不是本團隊的解釋態度。
(2) 一般來說重製了本來檔案裡的源代碼到另外的 plugin,可能會啟動 GPL-3.0 授權拘束。
(3) 但如果這個 inventory plugin 從頭到尾都是由社群朋友自己寫,那團隊的態度是,該 inventory plugin 可以由撰寫者自行決定授權。
(4) 在一些 Interface 的溝通資訊,ansible 是採 permissive license 來提供,若是僅取用這個部份,就更沒有問題。(the shared code that gets mixed into modules you write is explicitly BSD)
(6) 其實 Linux Kernel 從去年開始,部份有 API 特性的檔案,作者們也有的主動標上 BSD、MIT 這類寬鬆的授權了,就是要消弭類似的爭議。
大致如上,簡單來說:
1、g0v 補助專案可能會和您確認您要開源的範圍,該範圍視為一個獨立作品。
2、當開源的範圍確定之後,建議您另行採 MIT/BSD/Apache-2.0的授權主動提供一些 API 的說明或檔案。
3、一般來說,API 聯動的雙方,可以被視為獨立的不同元件,這樣您主程式採 AGPL-3.0,以及操作介面要另採非開源的方式,在解釋上可以成立,也比較不會產生使用者的誤會。
以上一些經驗供參。
20190115 15:30 Lucien