身為軟體工程師 — 你懂軟體授權嗎?

一次搞懂自由軟體、開源軟體、免費軟體,以及學校沒教工程師該避免掉的商業授權問題

William
WilliamDesk
9 min readFeb 26, 2022

--

現在工程師和以往不同,有很多非常棒的第三方開源套件 (package / library/ gem)可以 import 進你的專案裡,如果是非營利,那都好說。

但如果你是一間軟體公司的工程師,靠著經營 SaaS 服務或販售 package 軟體獲利,那可就要留意套件授權問題!

先來看一則 Ruby on Rails 的近期授權爭議吧!

簡單來說,就是 Rails 是 MIT License 家族,裡有個內建叫做 Active Storage 的功能,它採用的底層爸爸是 mimemagic 這個套件,是 MIT License 家族

但是 mimemagic 也還有其依賴的爸爸套件,其中一個套件是 shared-mime-info,是 GPL-2.0 License

這就有問題啦!因為 GPL-2.0 License 的版權規範比 MIT License 更為嚴謹,因此上層的 mimemagic 混到了這個套件,那他就不能是 MIT License。

而最上層的 Rails 則不用說了,還是 MIT License 絕對會引起非常大的爭議,因為一來使用的人多、而且是有法律相關問題,因此必須解決。

最後結果是 mimemagic 解決了 License 爭議 (不再使用 GPL 爸爸套件),因此在 0.3.7 版以後就回到了 MIT License。Rails 也就能好好引用這個套件啦。

詳細也能看這幾個 Rails issue ticket,瞭解更多當時是如何發生並解決的:

瞭解自由軟體、開源軟體和免費軟體不同之處

要講套件的 License 之前,我們要先瞭解這三者的不同之後才能繼續下去:

自由軟體 (Free Software)

  • 使用者 (個人/為了公共利益) 可以執行、複製、散佈、研究、更動和改善該軟體的自由。
  • 可能 要收費

開源軟體 (Open Source Software)

  • 開放 Source Code。 (也就是通常會放在 Github 上面供人觀看及clone)
  • 所有權人 可決定 授權要不要收費

免費軟體 (Freeware)

  • 免費 使用
  • 可能會限制僅能個人使用,非商業盈利。
  • 不需開放 Source Code,開放也不一定使用者有權更動。

筆記時間:

自由軟體皆屬於開源軟體 (否則作者就不能讓你執行這些動作了對吧)

開源軟體不一定是自由軟體 (因為自由軟體是基於個人/或公共利益下的自由,如果是私人公司或是政府,則會是受限的一環。)

所以,那剛剛上面所述的 MIT License / GPL-2.0 License 又是哪一種呢?

答案是: 自由開源軟體 (Free Open Source Software, FOSS)

自由開源軟體

由於「自由軟體』 和「開源軟體」常常混淆,但其實不需要太廢時間理解,只要記得能讓你看到 Sorce Code 的必為開源軟體,自由的權利是有其受限的自由。

那現在大部分套件都是自由開源軟體,有什麼特性呢?

四大自由
- 可以自由執行程式
- 可以自由研究和修改
- 可以再散佈
- 散佈修改版本,回饋社群並促進群起改良自由

基於以上,自由是一個開放共享循環,基於為了讓程式更好的一個群體貢獻而精神實踐 (使用 => 覺得能改進因此修改 (因為開源因此能易於修改)=> 重置後散佈,如此循環 ),但不代表不需要錢。

但不代表不需要錢就能使用

但不代表不需要錢就能使用

但不代表不需要錢就能使用

常見的 License 種類以及特性

全部的授權版本可以參照開放原始碼促進會 (Open Source Initiative, OSI) 的網頁。

MIT License

  • 基於MIT,發佈時並未要求一定要提供 Source Code。

Apache 2.0

  • 基於APL,發佈時並未要求一定要提供 Source Code。

BSD-2-Clause / BSD-3 Clause (BSD 系列)

  • 基於BSD,發佈時並未要求一定要提供 Source Code。

LGPL

授權嚴格要留意

  • 重置或發佈時必須要提供Source Code。

GPL

授權嚴格要留意

  • 若使用到,套件擁有者有權要求你提供Source Code。

AGPL

授權嚴格要留意

  • 和 GPL 幾乎無異
  • 若有更動到套件,無論你的程式是否有發佈,要提供 Source Code

好,其實我只列了最重點的重點,就是不同 License 的規範的有不同嚴謹程度。假設你開發的程式混到感染了各式各樣的 License 授權,那必須要從嚴遵守。

例如:今天用了 MIT 和 AGPL 授權,那我的程式勢必就得遵守 AGPL 授權規範,詳細可以看這張圖或者請求律師事務所協助確認。

A compatibility diagram indicating the relationship between common open-source licenses. Source: Adapted from David A. Wheeler under the Attribution-Share Alike 3.0 License. (https://2015.igem.org/Team:Cambridge-JIC/OpenHardwareRevolution, 2022/02/26)

重點筆記:

要是引用了(感染) LGPL、AGPL、 或 GPL 這類非常嚴謹的自由開源授權條款 (尤其是 AGPL 和 GPL 魔王),又是商業利用的程式,請特別小心。

因為混到 G 相關的授權套件,基本上是必需要公開 Source Code 供別人檢查是否有重置或修改相關套件以及是否有付相關的商業授權金或客製化費用給作者。

雖然理論上不公開根本不會有人知道你 server 或 application 用了什麼套件,但只要公司夠大,有心人士一定會有方法知道並開告、質疑並要求檢查確認並公開 Source Code。

不怕一萬,只怕萬一,所以定期檢查目前使用的套件狀況是非常重要的。如果使用上不確定是否會有問題,請記得找律師事務所幫忙釐清和提供協助。

總結:使用上請盡量只使用 MIT / BSD / Apache 相關的自由開源授權套件,如果你的程式是商業使用且不太允許公開 Source Code 的話。

如何檢查和匯出有引用的套件

以下提供幾個較常見的檢查小工具,把有使用的套件通通 export 出來:

Ruby on Rails 常見的 License 誤區

Ruby on Rails 整套是 MIT License 規範,因此使用上很方便,不需要太多理會授權問題,但有一個套件你需要留意:Sidekiq。

Sidekiq 是一個 Ruby on Rails 開發上最常被使用到的套件,主要在做異步處理。在 Ruby on Rails 圈子裡應該是獨霸一方,其他異步套件看不到他的車尾燈。

但是,Sidekiq 的 License 是 LGPLv3 license,是非常強的感染套件,要是你的程式有使用到並作為商業用途,就必須公開 Source Code。

因此 Sidekiq 有提供了 Sidekiq Pro 和 Sidekiq Enterprise 的版本,Pro 和 Enterprise 的授權就是商業利用規範,因此如果是公司行號採用 Ruby on Rails 開發,有需要用到此套件請記得考慮買商業版本以免後續法律麻煩上身。

Sidekiq license (screenshot at 2022/02/27)

--

--