本文的内容主要来自以下页面。如果有兴趣,可以直接看原文。我只是把里面的要点做了一个简单的总结,并加入了少许自己的理解,方便更多的人参考。
http://www.cnx-software.com/2011/10/10/open-source-licenses-overview-gpl-lgpl-apache-bsd/
众所周知,自由软件有四大好处:
1、自由使用;
2、自由学习;
3、自由拷贝;
4、自由修改并分发修改的拷贝;
但是要注意,自由并不意味着免费,有些开源软件是收费的,比如Montavista Linux。
总的来说,自由软件许可证分为两大类:
1、The copyleft license:修改的代码必须用同样的许可证发布;
2、The non-copyleft license:修改的代码可以保持私有,但需要在软件的发行时做说明。
实在找不到合适的中文来翻译上面两个词,所以直接用了原文。其实不必纠结中文的意思,只要理解这两类许可证的区别即可。这也是许多中国人学习英语的误区,首先要把英文翻译成中文才能理解。其实真正学习英语就是不用翻译成中文也能很好的理解原文的意思。比如一听到“狗”,你脑子里肯定第一时间浮现一条狗;但如果你听到"dog",你如果第一时间是找到对应的中文“狗”,然后脑海中再浮现出一条狗,那你的反应速度肯定慢半拍。所以学习英文要尽量培养自己的直接映射,也就是许多人所说的英语语感。
言归正传。
GPL许可证就是属于copyleft许可证。超过50%的自由软件属于GNU GPL(General Public License)许可证,比如:Linux 内核, Busybox和需要其它应用程序。 任何基于GPL软件派生出的软件必须同样用GPL发布。同样,如果一个程序只是链接使用了基于GPL的软件,也必须按GPL发布。 GPLv3是2007年发布的,其中一个主要变化就是发布给用户的嵌入式设备必须支持更新的软件版本。现实中,许多公司在发布二进制软件之后,过了几个月甚至几年之后才发布源代码。
LGPL(Lesser General Public License)许可证也是属于copyleft许可证。大约10%的软件项目属于LGPL,主要用于软件库。如果修改了基于LGPL的库的源代码,那么修改的代码必须按LGPL发行。与GPL不同的是,如果程序只是链接使用基于LGPL的库,那么就不必开源,可以保持私有。这就是LGPL与GPL的主要区别,也是为什么LGPL主要用于软件库的原因,包括C库和ffmpeg。但是软件不能静态链接基于LGPL的库,只能动态链接。要求动态链接的原因就是用户可以独立更新库。
对于基于Non-copyleft的软件,可以修改源代码,并且将修改保持私有,但是必须在软件的发行宣传册或者网站上做出明确说明使用了什么Non-copyleft的第三方软件。Non-copyleft许可证主要包括以下几种:
1、Apache 许可证;
2、BSD许可证;
3、MIT许可证;
4、 X11许可证;
如果修改了了基于copyleft许可证的第三方软件,又不想开源所有的源代码,那么需要将软件分成两部分:1、将所有需要保持私有的源代码写入一个单独的应用程序中;2、实现一个简单的agent来封装修改过的第三方软件。然后采用进程间通信技术使这两部分交互,这样只需要开源第2部分Agent的源代码。
最后,记住要使用单独的patch或者版本控制工具管理任何修改。这样就便于将修改应用到新的第三方库版本中。
文章转载自零君聊软件,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




