开源许可证教程

作者: 阮一峰

日期: 2017年10月11日

作为一个开发者,如果你打算开源自己的代码,千万不要忘记,选择一种开源许可证(license)。

许多开发者对开源许可证了解很少,不清楚有哪些许可证,应该怎么选择。本文介绍开源许可证的基本知识,主要参考了 OpenSource.com (12)。

一、什么是开源许可证

开源许可证是一种法律许可。通过它,版权拥有人明确允许,用户可以免费地使用、修改、共享版权软件。

版权法默认禁止共享,也就是说,没有许可证的软件,就等同于保留版权,虽然开源了,用户只能看看源码,不能用,一用就会侵犯版权。所以软件开源的话,必须明确地授予用户开源许可证。

二、开源许可证的种类

目前,国际公认的开源许可证共有80多种。它们的共同特征是,都允许用户免费地使用、修改、共享源码,但是都有各自的使用条件。

如果一种开源许可证没有任何使用条件,连保留作者信息都不需要,那么就等同于放弃版权了。这时,软件可以直接声明进入"公共领域"(public domain)。

根据使用条件的不同,开源许可证分成两大类。

  • 宽松式(permissive)许可证
  • Copyleft 许可证

三、宽松式许可证

3.1 特点

宽松式许可证(permissive license)是最基本的类型,对用户几乎没有限制。用户可以修改代码后闭源。

它有三个基本特点。

(1)没有使用限制

用户可以使用代码,做任何想做的事情。

(2)没有担保

不保证代码质量,用户自担风险。

(3)披露要求(notice requirement)

用户必须披露原始作者。

3.2 常见许可证

常见的宽松式许可证有四种。它们都允许用户任意使用代码,区别在于要求用户遵守的条件不同。

(1)BSD(二条款版)

分发软件时,必须保留原始的许可证声明。

(2) BSD(三条款版)

分发软件时,必须保留原始的许可证声明。不得使用原始作者的名字为软件促销。

(3)MIT

分发软件时,必须保留原始的许可证声明,与 BSD(二条款版)基本一致。

(4)Apache 2

分发软件时,必须保留原始的许可证声明。凡是修改过的文件,必须向用户说明该文件修改过;没有修改过的文件,必须保持许可证不变。

四、Copyleft 许可证

4.1 Copyleft 的含义

Copyleft 是理查德·斯托曼发明的一个词,作为 Copyright (版权)的反义词。

Copyright 直译是"复制权",这是版权制度的核心,意为不经许可,用户无权复制。作为反义词,Copyleft 的含义是不经许可,用户可以随意复制。

但是,它带有前提条件,比宽松式许可证的限制要多。

  • 如果分发二进制格式,必须提供源码
  • 修改后的源码,必须与修改前保持许可证一致
  • 不得在原始许可证以外,附加其他限制

上面三个条件的核心就是:修改后的 Copyleft 代码不得闭源。

4.2 常见许可证

常见的 Copyleft 许可证也有四种(对用户的限制从最强到最弱排序)。

(1)Affero GPL (AGPL)

如果云服务(即 SAAS)用到的代码是该许可证,那么云服务的代码也必须开源。

(2)GPL

如果项目包含了 GPL 许可证的代码,那么整个项目都必须使用 GPL 许可证。

(3)LGPL

如果项目采用动态链接调用该许可证的库,项目可以不用开源。

(4)Mozilla(MPL)

只要该许可证的代码在单独的文件中,新增的其他文件可以不用开源。

五、常见问题

本节回答一些开源许可证的常见问题。

5.1 什么叫分发(distribution)?

除了 Affero GPL (AGPL) ,其他许可证都规定只有在"分发"时,才需要遵守许可证。换言之,如果不"分发",就不需要遵守。

简单说,分发就是指将版权作品从一个人转移到另一个人。这意味着,如果你是自己使用,不提供给他人,就没有分发。另外,这里的"人"也指"法人",因此如果使用方是公司,且只在公司内部使用,也不需要遵守许可证。

云服务(SaaS)是否构成"分发"呢?答案是不构成。所以你使用开源软件提供云服务,不必提供源码。但是,Affero GPL (AGPL) 许可证除外,它规定云服务也必须提供源码。

5.2 开源软件的专利如何处理?

某些许可证(Apache 2 和 GPL v3)包含明确的条款,授予用户许可,使用软件所包含的所有专利。

另一些许可证(BSD、MIT 和 GPL v2)根本没提到专利。但是一般认为,它们默认给予用户专利许可,不构成侵犯专利。

总得来说,除非有明确的"保留专利"的条款,使用开源软件都不会构成侵犯专利。

5.3 什么是披露要求?

所有的开源许可证都带有"披露要求"(notice requirement),即要求软件的分发者必须向用户披露,软件里面有开源代码。

一般来说,你只要在软件里面提供完整的原始许可证文本,并且披露原始作者,就满足了"披露要求"。

5.4 GPL 病毒是真的吗?

GPL 许可证规定,只要你的项目包含了 GPL 代码,整个项目就都变成了 GPL。有人把这种传染性比喻成"GPL 病毒"。

很多公司希望避开这个条款,既使用 GPL 软件,又不把自己的专有代码开源。理论上,这是做不到的。因为 GPL 的设计目的,就是为了防止出现这种情况。

但是实际上,不遵守 GPL,最坏情况就是被起诉。如果你向法院表示无法履行 GPL 的条件,法官只会判决你停止使用 GPL 代码(法律上叫做"停止侵害"),而不会强制要求你将源码开源,因为《版权法》里面的"违约救济"没有提到违约者必须开源,只提到可以停止侵害和赔偿损失。

(完)

留言(33条)

FLOSS授权 ~軟體授權法制與自由軟體授權模式介紹
http://s5rst.qiniucdn.com/120501-ossf-freedom/index.html
上千页的相关教程幻灯
分享大家...

言简意赅,通俗易懂

文中要是提一下FB的React就好了

还是有点云里雾里啊

使用和修改的约束是不一样的吧

5.1 简单说,分发就是指将版权作品从一个人转移到另一个人。这意味着,如果你是自己使用,不提供给他人,就没有分发。另外,这里的"人"也指"法人",因此如果使用方是公司,且只在公司内部使用,也不需要遵守许可证。

5.4 很多公司希望避开这个条款,既使用 GPL 软件,又不把自己的专有代码开源。理论上,这是做不到的。


这两句话是不是矛盾?

比较迷啊,因为如果只是个人或者小团队的开源作品的话,就算被不遵守许可证的盗版了也没什么办法,而世界上的个人开发者不在少数吧,改版权也很常见(比如把ss盗版成例如xxvpn这样),这种情况时开源许可证就是摆设。
另,开源许可证是在世界上普遍具有法律效力的吗?

引用石樱灯笼的发言:

文中要是提一下FB的React就好了

React是bsd+patents,参考5.2条就好了

通篇文章我看完了,但是我还是没理解阮老师的“自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)”到底是上面4中常见的许可中的哪一种?BSD(二条款版)、BSD(三条款版)、MIT、Apache 2。

引用lululau的发言:
5.1 简单说,分发就是指将版权作品从一个人转移到另一个人。这意味着,如果你是自己使用,不提供给他人,就没有分发。另外,这里的"人"也指"法人",因此如果使用方是公司,且只在公司内部使用,也不需要遵守许可证。

5.4 很多公司希望避开这个条款,既使用 GPL 软件,又不把自己的专有代码开源。理论上,这是做不到的。


这两句话是不是矛盾?

不矛盾吧,公司的产品总不能只有自己用吧

React 事件。许可的更改有什么相关的要求呢。开源后再闭源,从一个许可证到另一个许可证,是以时间节点算的吗?

Debian项目有一个wiki页面,说明那些License是Debian认为自由的,对其他项目也应该有参考价值。

https://wiki.debian.org/DFSGLicenses

FSF貌似也有一个,我找不到链接了

对于一个项目,不学习研究它里面精妙的实现,而是关注它的开源许可证,是逐本求末的。

引用业余草的发言:

通篇文章我看完了,但是我还是没理解阮老师的“自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)”到底是上面4中常见的许可中的哪一种?BSD(二条款版)、BSD(三条款版)、MIT、Apache 2。

CC许可证是被创造来用于文字出版领域的,它的目标就不包括软件分发领域。

引用Bachue Zhou的发言:

对于一个项目,不学习研究它里面精妙的实现,而是关注它的开源许可证,是逐本求末的。

"逐本求末",那要看你追的“本”是什么, 如果只是学习和参考,那就是无所谓。但如果你要拿来使用,就要好好看看许可证,最近闹的React许可证风波就是教训, 如果你用了React然后丧失了起诉FB的权利,这划算么? 你业务小无所谓,如果你业务大而且还要和FB刚正面呢?比如snapchat类型的公司

引用东风异客的发言:

React 事件。许可的更改有什么相关的要求呢。开源后再闭源,从一个许可证到另一个许可证,是以时间节点算的吗?

看DivX历史。

很多公司希望避开这个条款,既使用 GPL 软件,又不把自己的专有代码开源。理论上,这是做不到的。因为 GPL 的设计目的,就是为了防止出现这种情况。
————————————————————————————————
如果专有代码完全没有用gpl代码是可以的吧,做成lib就行了吧,gpl里面调用这个lib就行,gpl部分开源,lib不开源

感觉对于小型开源项目的保护力度有限啊。。。
真侵权了小型开源项目作者有几个有精力去折腾官司的。。。
有没有类似案例的例证?
其实我是想到了SSR侵权SS的案例,不过SSR后来还是开源了(不知道是不是被舆论逼的)
然而后续是这么一闹SSR作者给自己引了一堆事,最后结果导致人身攻击作者删除整个SSR项目
当然后续SS和SSR有人在继续维护是后话,我这里也不想过多讨论这件具体事例,谁是谁非的,只是想援引结果,这么一折腾很明显其中没有一方获得胜利
当然SSR的例子比较特别,从应用自身敏感性质和参与进项目的有限人数都注定不可能去走法律途径维权的
不过这也正好反映出项目本身有各种情况,开源许可证能提供的保护能力似乎真的有限,很多时候侵权了只能靠舆论去对抗
而这么一对抗搞不好就是一个双败的结果

还是希望国内的大公司,例如阿里巴巴,能开源解决方案。
我相信,阿里巴巴的技术, 可以覆盖90%以上的需求。
这样也算是给国内IT 一些贡献。
毕竟国内90%的公司的解决方案 都是不好的。
@马云

引用业余草的发言:

通篇文章我看完了,但是我还是没理解阮老师的“自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)”到底是上面4中常见的许可中的哪一种?BSD(二条款版)、BSD(三条款版)、MIT、Apache 2。

不是软件,不适用软件许可证

看到博主的博文里,有些关键字有链接,不知道是博主在写博客的时候自己手动加的,还是使用了什么技术?
如果使用了什么技术,希望能够告知一下,很好奇。
谢谢博主!

博主你好,建一个网站多少钱?

引用renwei的发言:

CC许可证是被创造来用于文字出版领域的,它的目标就不包括软件分发领域。

CC许可不只是文字内容,并没有排除软件。软件也是著作权法意义上的作品类型之一

引用南琴浪的发言:

比较迷啊,因为如果只是个人或者小团队的开源作品的话,就算被不遵守许可证的盗版了也没什么办法,而世界上的个人开发者不在少数吧,改版权也很常见(比如把ss盗版成例如xxvpn这样),这种情况时开源许可证就是摆设。
另,开源许可证是在世界上普遍具有法律效力的吗?

开源许可证和前面朋友提到的CC协议,暂时在法律上没有特别明确的法律地位。

既不是一种法律明文规定的权利,也不是一般意义的合同。但它仍然具备一定的法律效力。

此前研究过一些CC协议的司法判例,某些情况下会被法院所采纳与支持。毕竟CC协议和开源许可证,在法律世界里的根基是著作权。其他人如果不遵守约定,作者还是可以拿起著作权来保护自身权益。

引用lululau的发言:

5.1 简单说,分发就是指将版权作品从一个人转移到另一个人。这意味着,如果你是自己使用,不提供给他人,就没有分发。另外,这里的"人"也指"法人",因此如果使用方是公司,且只在公司内部使用,也不需要遵守许可证。

5.4 很多公司希望避开这个条款,既使用 GPL 软件,又不把自己的专有代码开源。理论上,这是做不到的。


这两句话是不是矛盾?

不矛盾啊,5.4说的是不分发的情况下才做不到

“版权法默认禁止共享”
这里的版权法是中国的还是美国的?

总算对许可证有了个了解,感谢博主分享

所以亚马逊云的基于MySQL修改的Aurora因为只提供服务,不是分发,可以闭源?

引用大妈的发言:

FLOSS授权 ~軟體授權法制與自由軟體授權模式介紹
http://s5rst.qiniucdn.com/120501-ossf-freedom/index.html
上千页的相关教程幻灯
分享大家...

是也乎,( ̄▽ ̄)
被迫迁移了域名:
http://s5.zoomquiet.top/120501-ossf-freedom

对应还有:

自由与开源 (built by S5)
http://s5.zoomquiet.top/071020-freedom-zeuux/index.html

FLOSS license (powered by S5)v1.1~080131
http://s5.zoomquiet.top/080130-floss-license/index.html

可供参考,
当然, 都有对应演讲的录音, 看大家挖掘了...

引用kanglq的发言:

很多公司希望避开这个条款,既使用 GPL 软件,又不把自己的专有代码开源。理论上,这是做不到的。因为 GPL 的设计目的,就是为了防止出现这种情况。
————————————————————————————————
如果专有代码完全没有用gpl代码是可以的吧,做成lib就行了吧,gpl里面调用这个lib就行,gpl部分开源,lib不开源

可以,那你的项目代码 结构就应该是,

你的壳程序(开源) --引用/静态链接> GPL 代码,
- - 可执行程序调用/动态链接> 你的专有代码lib。

注意哦,必须是动态连接, 也就是说你的壳程序的代码调用的你专有代码得像 访问mysql连接 或者 restful请求似的,才可以。

引用刀尖红叶的发言:

所以亚马逊云的基于MySQL修改的Aurora因为只提供服务,不是分发,可以闭源?

是这样,不过这不应该叫闭源。

想象成一条河,你挖了一个运河分流了主河道并且你这条河发展起来了下游;最初你没控制,上游流下了多少水,水就哗啦啦的从你这儿流到下游多少,这(对于你的下游)就是开源; 后来你建了一个水坝,把一部分水截留下来不给下游了,这(对于你的下游)就是闭源。

开源闭源都是对于你的下游而言的。

而别人就建了一个水库,没有根本就下游,人家也不准备发展下游,就一潭死水,那就不涉及开源闭源。

如何获取开源许可证呢?

最后一段:但是实际上,不遵守 GPL,最坏情况就是被起诉。如果你向法院表示无法履行 GPL 的条件,法官只会判决你停止使用 GPL 代码(法律上叫做"停止侵害"),而不会强制要求你将源码开源,因为《版权法》里面的"违约救济"没有提到违约者必须开源,只提到可以停止侵害和赔偿损失。

中国没有版权法这个概念,所以我猜这里的书名号应该是外国的版权法;在该种事实成立时,可以通过版权来起诉侵权,也可以通过许可证要求的内容起诉合同违约,就可以通过合同约定的方式来要求开源。

这是我的观点,欢迎批评。

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接