農林漁牧網

您現在的位置是:首頁 > 農業

程式碼庫許可協議不相容導致的後果

2022-01-05由 暗澗幽火 發表于 農業

程式庫是什麼意思

整理 | 鄭麗媛

出品 | CSDN(ID:CSDNnews)

提到開源,不少人都認為是免費+自由,其實並非全然如此。

每個開源工作者的追求不同。有的人只想專心寫程式碼,不約束其他人對程式碼的使用範圍,開源閉源皆可;有的人則希望其開源專案能得到更廣泛的分享與改進,使用其原始碼的人也能堅持開源。

鑑於這種多樣性的追求,因此,為了維護開源工作者權益,保持其創作熱情,開源許可協議(開源許可證)就此誕生,用於規定使用開源專案時的權利及責任,即告訴使用者應該做什麼,不應該做什麼。

在眾多開源許可協議中,彼此之間是否可以相容也不盡相同。上週三就發生了一起因開源許可協議不相容引發的一場混亂:一個名為 mimemagic 的 Ruby 庫因包含了與其自身許可證不相容的部分程式碼,導致包括 Ruby on Rails 在內的五十多萬個專案受到影響。

MIT & GPL

在詳談之前,我們需要先了解與這起事件有關的兩種開源協議:MIT & GPL。

GNU GPL,全稱 GNU General Public License,即 GNU 通用公共許可證,簡稱為 GPL,為人熟知的 Linux 正是採用了 GPL 協議。

GPL 協議在於對程式碼開源、免費使用和引用、修改,對衍生程式碼開源及免費使用,但不允許修改後或衍生的程式碼用作閉源的商業軟體。

另外,GPL 協議還具有較為特別的“傳染性”:無論程式碼多少,但凡引用、修改遵循 GPL 程式碼的軟體都必須開源和免費,並且要採用同樣的 GPL 許可證。

相對而言,MIT 則是較為寬鬆的許可協議。

MIT 許可證之名源自麻省理工學院(Massachusetts Institute of Technology, MIT),因此又稱麻省理工學院許可證,最初由麻省理工學院開發。

採用該協議的開源作者一般只想保留版權,因此沒有任何其它的限制。即無論是以二進位制還是原始碼形式釋出,使用者須在發行版中包含版權宣告和原許可協議宣告,但這個發行版開源與否、商業化與否均由使用者自行決定,開源作者並不干涉。

而這次的事件就是由於在遵循 MIT 的專案中使用了部分 GPLv2 的程式碼。

開源許可協議並不相容

上週三,shared-mime-info 軟體庫的維護者 Bastien Nocera 告知 mimemagic 庫的維護者 Daniel Mendler:mimemagic 中包含了 shared-mime-info 的程式碼。不巧的是, mimemagic 庫採用的是 MIT 許可證,而 shared-mime-info 遵循的是 GPLv2 許可證,兩者並不相容。

Nocera 在 Issues 的帖子中寫道:“使用 GPL 檔案作為原始碼會讓你的整個程式碼庫成為衍生程式碼,因而需要使其全部採用 GPL 許可證,所以我認為在有人在純 MIT 程式碼庫或閉源應用程式中使用它之前,改正這個問題非常重要。”

程式碼庫許可協議不相容導致的後果

圖片

得知此事之後,Mendler 向 Nocera 表示感激,隨後立刻將 mimemagic 的最新版本 0。4。0 和 0。3。6 從 MIT 轉移至 GPLv2,並從 Ruby 開發者使用的軟體包登錄檔 RubyGems。org 上撤回了之前的版本。此外,他還存檔了 mimemagic 的 GitHub 儲存庫,表示此後不再支援被積極開發。

mimemagic 維護者的動作之快,令開源許可顧問 Paul Berg 都不禁讚賞:“mimemagic 維護者令人欽佩的是,一旦發現問題,他們就會做出反應,而不是對此保持沉默並讓問題繼續存在。”

然而,這件事情並沒有就此結束,它引發了一場規模龐大、難以解決的混亂。

Ruby on Rails 都受到影響

截止目前,這件事影響了 175 個軟體包,涉及到 578404 個不同的軟體儲存庫,其中就包括 Web 開發框架 Ruby on Rail,因為它使用了下架的 mimemagic 0。3。5 版本作為依賴項。

程式碼庫許可協議不相容導致的後果

圖片

目前,Rails 團隊正在研究替換方案,由於 mimemagic 主要是 mime 型別資料對映資料庫,因此 Rails 可能會考慮採用 2-clause BSD 許可的 libmagic 或 mime 資料的 Ruby 轉換,但不論哪種方式實現起來都並非易事。

對此,Berg 還提出了一種可能——將 Rails 從 MIT 改為採用 GPLv2 協議。不過考慮到使用 MIT 許可證的 Rails 的廣泛使用,眾多基於此框架開發的應用程式必定沒有遵守 GPL 協議,因而此方案會為這些專案帶來巨大影響,並不可行。

Berg 感慨道:“無論如何,鑑於 Rails 的受歡迎程度,它對行業至關重要,因此在短時間內解決此問題可能將是一份不小的工作。”

另外,除了 Rails 之外的那 50 多萬個專案也並非是立即受到影響,只是之後任何嘗試獲取從 RubyGems。org 撤下的 mimemagic 版本的構建過程都會失敗,除非在此之前就已經實現了依賴快取機制。因此目前所有使用 mimemagic 的軟體專案都面臨採用 GPLv2 協議帶來的影響。

上週四,mimemagic 團隊恰好印證了 Berg 的建議“mimemagic 可以嘗試替換程式碼中的 GPL 部分,保留其 MIT 許可證”,撤回 0。3。6 和 0。4。0 版本,更新了 0。4。1 版本,該版本恢復了 MIT 許可證並刪除了 GPL 相關的程式碼——the Freedesktop。org Shared Mime Types 資料庫,不過現在使用者必須自己提供 mime 型別資料庫了。

網友:我非常不喜歡 GPL

這件事的波及範圍較廣,因此眾多網友對此也進行了熱議。

評論1:

對於不太關注自由/開源軟體的人來說,這種型別的問題令人沮喪。當然,許可證很重要,但是普通使用者只是想讓事情正常執行。

程式碼庫許可協議不相容導致的後果

圖片

評論2:

我真的非常不喜歡 GPL。或者更確切地說,我非常非常不喜歡那些對“衍生”的意思有不合理且籠統想法的人。

程式碼庫許可協議不相容導致的後果

圖片

對於這件事,你有什麼看法嗎?歡迎評論區留言!