之前讲了一大串,觉得好像会有点混淆,最后给个简单结论
假设你的程式使用了别人的 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.