开源软件的许可(License)
- 自由软件基金会(Free Software Foundation):FSF
 
0. GNU
GNU (GNU is Not Unix 的递归缩写)计划,又称革奴计划,是由 Richard Stallman 在 1983 年 9 月 27 日公开发起的。它的目标是创建一套完全自由的操作系统。Richard Stallman 最早是在 net.unix-wizards 新闻组上公布该消息,并附带《GNU 宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。
为保证 GNU 软件可以自由地“使用、复制、修改和发布”,所有 GNU 软件都有一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,GNU 通用公共许可证(GNU General Public License,GPL)。即“反版权”(或称 Copyleft)概念。
1985 年 Richard Stallman 又创立了自由软件基金会(Free Software Foundation)来为 GNU 计划提供技术、法律以及财政支持。尽管 GNU 计划大部分时候是由个人自愿无偿贡献,但 FSF 有时还是会聘请程序员帮助编写。当 GNU 计划开始逐渐获得成功时,一些商业公司开始介入开发和技术支持。当中最著名的就是之后被 Red Hat 兼并的 Cygnus Solutions。
- 到了 1990 年,GNU 计划已经开发出的软件包括了一个功能强大的文字编辑器 Emacs 。
 - GCC(GNU Compiler Collection,GNU编译器集合),是一套由 GNU 开发的编程语言编译器。以及大部分UNIX系统的程序库和工具。唯一依然没有完成的重要组件就是操作系统的内核(称为HURD)。
 
1991年 Linus Torvalds 编写出了与 UNIX 兼容的 Linux 操作系统内核并在 GPL 条款下发布。Linux之后在网上广泛流传,许多程序员参与了开发与修改。1992 年 Linux 与其他 GNU 软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称 Linux。(尽管如此 GNU 计划自己的内核 Hurd 依然在开发中,已经发布 Beta 版本。)
GNU 包含3个协议条款,
- GPL:GNU通用公共许可证(GNU General Public License)
 - LGPL:GNU较宽松公共许可证 (GNU Lesser General Public License), ) ,旧称 GNU Library General Public License (GNU 库通用公共许可证);
 - GFDL : GNU 自由文档许可证(GNU Free Documentation License )的缩写形式。
 
1. 所谓自由
这里指的自由,并不是价格免费,这和价格无关而是使用软件对所有的用户来说是自由的。GPL 通过如下途径实现这一目标:
- 1、 它要求软件以源代码的形式发布,并规定任何用户能够以源代码的形式将软件复制或发布给别的用户。
 - 2、如果用户的软件使用了受 GPL 保护的任何软件的一部分,那么该软件就继承了 GPL 软件,并因此而成为 GPL 软件,也就是说必须随应用程序一起发布源代码。
 - 3、GPL 并不排斥对自由软件进行商业性质的包装和发行,也不限制在自由软件的基础上打包发行其他非自由软件。 
由于 GPL 很难被商业软件所应用,它要求调用它的库的代码也得 GPL,全部开放,并且一同发布,不能直接连接。所以后来 GNU 推出了 LGPL 许可证
在 GPL 与 LGPL 许可证保护下发布源代码的结果很相似,对旧代码所做的任何修改对于想知道这些代码的人必须是公开的,唯一真正的不同之处在于私人版权代码是否可以与开放源代码相互连接,LGPL 允许实体连接私人代码到开放源代码,并可以在任何形式下发布这些合成的二进制代码。只要这些代码是动态连接的就没有限制。(使用动态链接时,即使是程序在运行中调用函数库中的函数时,应用程序本身和函数库也是不同的实体) 
2. 如何商用?
GPL 只是规定用户在获取你的程序的时候必须可以获得源代码,但并没有规定必须免费(GPL 可以免费,也可以收费),因此理论上说,你仍然可以收取费用。不过,由于 GPL 规定你不得阻止用户再分发,因此用户完全可以从你这里买来代码之后再免费送给所有其它人,因此对于 GPL 代码想要收费发布难度是很大的,目前比较可行的办法是像 Redhat 那样,通过提供订阅和服务的方式来收费,提供一些额外的增值服务吸引用户交费。
当然,如果你的程序只是自己内部使用,并没有分发给用户的话,那就不存在必须开源的问题了。程序的生成物是不被看作程序的一部分的,因此你使用一个开源的库搭建了一个网站,如果仅仅将生成物,也就是生成的 HTML 页面,展示给用户,而不出售网站本身的代码的话,是不需要开源的。
如果你的确需要发布你的程序,但又不想开源,规避 GPL 的方法是通过 LPC 或者 RPC 间接调用库里的接口。只要库和你的程序不运行在同一进程下,就不需要开源。
另外,你需要区分 GPL 和 LGPL。LGPL 的要求比 GPL 低,你可以动态链接一个 LGPL 的库而不需要开源你自己的程序,而 GPL 是不行的。
3. GPL 与 AGPL
GPL,是 General Public License 的缩写,是一份 GNU 通用公共授权非正式的中文翻译。它并非由自由软件基金会所发表,亦非使用GNU通用公共授权的软件的法定发布条款─直有GNU通用公共授权英文原文的版本始具有此等效力。
AGPL(The GNU Affero General Public License),AGPL是GPL的一个补充, 在GPL的基础上加了一些限制。原有的GPL协议,由于现在网络服务公司兴起(如:Google)产生了一定的漏洞,比如使用GPL的自由软件,但是并不发布与网络之中,则可以自由的使用GPL协议却不开源自己私有的解决方案。AGPL则增加了对此做法的约束。
开源软件的许可(License)的更多相关文章
- 几种常见的开源软件许可协议(GPL, LGPL, Apache License, BSD)
		
GPL GPL授予程序接受人以下权利,或称“自由”: * 以任何目的运行此程序的自由 * 以学习程序工作机理为目的,对程序进行修改的自由(能得到源代码是前提) * 再发行复制件的自由 * 改进此程序, ...
 - 开源软件License汇总
		
用到的open source code越多,遇到的开源License协议就越多.License是软件的授权许可,里面详尽表述了你获得代码后拥有的权利,可以对别人的作品进行何种操作,何种操作又是被禁止的 ...
 - tl;drLegal ——开源软件license的搜索引擎
		
TLDRLegal - Open Source Licenses Explained in Plain English可以很方便查询各个开源license的总结(能做什么,不能做什么),还能比较不同的 ...
 - License分类 + 引入开源软件时License的注意事项
		
License分类 GPL: linux.openJDK,openJFX,mysql 融合感染,单独子模块不感染(自己的模块与引入模块的通信方式是socket) openJDK(GNU General ...
 - 开源软件授权协议详解(GPL/MPL/LGPL/BSD/Apache Licence/Creative Commons/MIT)
		
开源在今天的软件业已经很普遍,但开源是否意味着使用者可以对开源后的代码为所欲为呢? 答案是否定的. 开源运动同样有自己的游戏规则和道德准则. 不遵行这些规则不但损害开源运动的健康发展,也会对违规者造成 ...
 - 痞子衡嵌入式:开源软件协议(MIT/BSD/Apache/LGPL/MPL/GPL)
		
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是关于开源软件协议基本知识. 牛顿曾说过:"如果我比别人看得更远,那是因为我站在巨人的肩上".在软件开发中如果说也存在巨 ...
 - 微软、谷歌、亚马逊、Facebook等硅谷大厂91个开源软件盘点(附下载地址)
		
开源软件中有大量专家构建的代码,大大节省了开发人员的时间和成本,热衷于开源的大厂们总是能够带给我们新的惊喜.2016年9月GitHub报告显示,GitHub已经有超过 520 万的用户和超 30 万的 ...
 - GPL协议中国第一案尘埃落定,相关开源软件应如何风控?
		
导读:2019年11月6日,数字天堂(北京)网络技术有限公司(以下简称 “数字天堂公司”)诉柚子(北京)科技有限公司.柚子(北京)移动技术有限公司(以下简称 “柚子公司”)侵犯计算机软件著作权纠纷一案 ...
 - 2014 年最热门的国人开发开源软件 TOP 100 - 开源中国社区
		
不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是 ...
 
随机推荐
- C#调用oracle存储过程自定义表类型
			
http://blog.csdn.net/studyzy/article/details/11524527
 - android 登录和设置IP/端口功能
			
本人第一个Android开发功能:登录以及设置IP/端口. 本人是j2ee开发工程师,所以这个可能有一些处理不太完善的地方,欢迎评论在下面,我会认真改进的. 首先是配置strings.xml文件添加用 ...
 - 在Qtcreator中,KDE的Hello World(安装kdelibs5-dev)
			
我刚开始为KDE编程,我面临的问题是我不知道KDE项目的pro文件是什么,我有一个想法. 我还尝试了 file: 库 += -lkdeui 我还是找不到KApplication的问题 代码 main. ...
 - item.imageInsets =
			
直接上代码: item.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);//设置图片居中 阅读全文 本文已收录于下面专栏: wanglixin1999 +关注 ...
 - thinkphp3.2.3 自动验证 正则验证
			
<?php namespace Home1\Model; use Think\Model; class ShopYuyueInfoModel extends Model { // protect ...
 - angular自定义指令相关知识及代码
			
原文地址 https://www.jianshu.com/p/0c015862156d 大纲 1.自定义指令之——属性指令 2.自定义属性指令的运行原理 3.自定义属性指令代码实践 4.自定义结构指令 ...
 - android开发音乐播放器--Genres和Art album的获取
			
最近在做一个项目,其中涉及到音乐播放器.当用到Genres和Art album时花费了一些时间才搞定,今天把方法草草列出,以供自己以后忘记时查看,也希望可以帮助碰到同样问题的道友!! 一.Genres ...
 - Android 在Service里面启动Activity
			
直接在代码: Intent dialogIntent = new Intent(getBaseContext(), YourActivity.class); dialogIntent.addFlags ...
 - Oracle 12C R2 on Linux 7.X 单实例静默安装文档
			
禁用防火墙systemctl stop firewalld.servicesystemctl disable firewalld.service 禁用SELinuxcat /etc/selinux/c ...
 - CGI原理解析之二------WEB服务和CGI交互数据
			
#include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/wait.h ...