之前講了一大串,覺得好像會有點混淆,最後給個簡單結論
假設你的程式使用了別人的 library,這裡暫稱為 libA,有幾種情況
1. libA 是私有授權 (例如微軟 .NET)
一般來說,你的程式可以 open source,用任何你想要的 license
但是你能否提供 libA 的 dll 給使用者,則要看 libA 的授權合約是否允許再散佈
很多商用的版權軟體 dll 是不能複製散佈的,但像是 VC++ runtime redist 這種
微軟允許再散佈的套件就可以,否則使用者需要自行取得 libA dll
2. libA 是 LGPL 授權
a. 如果你動態連結 libA 的 dll,你的程式可以用任何授權,不受 libA 影響
甚至也可以不需要 open source
b. 如果你靜態連結 libA,你需要提供你程式的 object files 讓使用者如果修改
"libA" 之後,可以重新 link 你的程式產生新執行檔,但你的程式不一定
需要是 open source,也不一定要是 LGPL or GPL
c. 如果你修改了 libA 添加你要的功能,修改過的 "libA" 必須用 LGPL or GPL
釋出並且 open source,但你主程式剩餘部份如果是動態連結,則不受影響
詳細說明: https://www.gnu.org/licenses/gpl-faq.html#GPLStaticVsDynamic
3. libA 是 GPL 授權
不管你是靜態連結、動態連結 dll,還是複製他的部份或全部 code 過來用,
你的程式如果對外發布,一定只能用 GPL 授權且 open source,沒有其他選項
你的程式如果放在電腦裡自用,不對外發布,可以不用 open source
坊間有很多規避 GPL 的手段,但這些手段是不是有效都有爭議,至於是否真的合法
這需要各國法院認證,目前訴訟的判例並不多。
4. libA 是 MIT 授權
你的程式可以用任何授權,要不要 open source 都可,基本上沒什麼限制
複製一份 libA 到你自己的程式碼裡面,甚至修改他,也都是沒問題的
這樣應該會比較清楚了,希望幫助到想發 open source 程式的朋友
注意事項很多,但其實也沒這麼困難,歡迎大家來弄 open source.