GPL
GPL 协议是说,我的代码是开源和免费的,如果你用了我的代码,那么你的代码也必须遵循 GPL 协议 —— 也必须开源和免费。这就是所谓的”传染性”。
举个例子吧,linux 操作系统使用了大量的 GPL 开源代码,所以 linux 系统必须开源、免费。这就是今天为什么大家能够享受到免费的 linux。同样 linux 系统中大量的开源+免费的资源,也是因为授权许可的传染性,必须开源、免费向社会提供。
为什么有人要搞 GPL 授权许可?开源+免费,是不是疯了?这样子程序员是不是要喝西北风?
其实不然。我觉得有下面两个理由支持 GPL 存在的合理性:
- 对开发者而言:开发 GPL 产品短期效益是扩大知名度和影响力,从而博取长期利益。应用软件开发商而言:如果希望自己的产品闭源,还得老老实实向开源社区支付费用。
- 对硬件厂商而言:免费开发资源有利于硬件的推广销售。无论如何,像CPU、GPU这类底层硬件,绝对是技术增值链的上游产品,它们不需要靠软件盈利。因此,这类厂商会资助开源社区。
所以,你大可放心,开源社区的程序员不仅不用喝西北风,他们的收入都好着呢。当然,如果你写的代码是面向定制应用小众客户群的,建议你还是别忙着免费,开源了。如果你非得跟人家学,最后的结局估计真的喝西北风了。
LGPL
LGPL 协议宽松多了。如果你只是使用而没有修改我的代码,那你就可以随便使用和销售。LGPL 允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
举个例子,如果使用 LGPL 协议开源了一个 Android 类库,我们做开发时引用了此类库。之后我们将项目上架到 GooglePlay 而不开源,是没有违反协议的。但是,如果我们引用类库时,是以源码的形式引用的,那就必须要将项目开源了。
对于我们做商业应用开发的程序员来讲,LGPL真的是一大福利,只要仅仅引用编译好的类库,我们可以肆无忌惮地使用呀!
关于 MIT
最后讨论一下 MIT 吧!
如果说存在“屎上最宽松”的协议,那肯定就是 MIT 协议了!因为它允许你毫无节操地使用开源代码,你可以修改、闭源、商业化等等,MIT只提了两点要求:
- 你使用的时候要保留 MIT 许可声明。
我觉得这个要求不过分,你免费用了人家的东西,产品发行的时候给人家挂个名表示一下感谢总不过分吧? - 出了问题别找作者的麻烦。
这个要求也合情合理。人家没挣你的钱,开源代码是你自己自愿使用的,没人强迫你。如果因为开源代码造成了重大经济损失,你也别找人家赔偿。这个是一个愿打、一个愿挨,都是自己情愿的。