如何选择开源许可证?

作者: 阮一峰

日期: 2011年5月 2日

如何为代码选择开源许可证,这是一个问题。

世界上的开源许可证,大概有上百种。很少有人搞得清楚它们的区别。即使在最流行的六种----GPLBSDMITMozillaApacheLGPL----之中做选择,也很复杂。

乌克兰程序员Paul Bagwell,画了一张分析图,说明应该怎么选择。这是我见过的最简单的讲解,只用两分钟,你就能搞清楚这六种许可证之间的最大区别。

下面是我制作的中文版,请点击看大图。

(完)

珠峰培训

简寻

留言(39条)

请问比如像 Javascript 这样的客户端脚本,是不是不加密就算开源了?

千言万语,不如一张图。

对于 LGPL的描述有问题。

恩, 只有对LGPL做连接/调用而不是源代码包含/修改, 才可以避免自己也同样成为LGPL.

翻译的图跟原图不一样啊

图不一样,原作者已更新了图表

引用Peter的发言:

Javascript 这样的客户端脚本,是不是不加密就算开源了?

如果没有版权说明的话,那么就属于保留全部版权,你只能借鉴,不能直接拿过来用。

引用Jacobmee的发言:

对于 LGPL的描述有问题。

已经修改过了,现在的版本应该是正确的。

引用ray5的发言:

翻译的图跟原图不一样啊

原图的英语表述,有些地方不明确,我把它改掉了。

另外,原图还区分不同许可证的版本。我一律选择各个许可证的最新版本。

哈哈 好东西,总算分清这几个许可证了。。。阮老师威武

引用wadefelix的发言:

图不一样,原作者已更新了图表

翻译的新图
http://blog.csdn.net/wadefelix/archive/2011/05/02/6384317.aspx
请指正

楼上的图更详细一点,但辨识程度似乎没有阮一峰作的好——1.没有是和否的区别,单凭红蓝箭头大家就能知道?2.判断流程的箭头过于庞大,几乎和判断条件一样大,导致整个图的大小超出了页面范围,右边的都看不清楚是什么。

抓住几个关键节点后,用图表来区分这些复杂的分类确实要方便很多了。

您好,请问CC Lisence是属于哪种的,他的性质又是如何,是否是最开放的,谢谢。

用了,写了这么多年的程序,第一次把这几种开源许可弄明白…

呵呵,这个都可以写个简单的脚本判断了

引用Chri的发言:

您好,请问CC Lisence是属于哪种的,他的性质又是如何,是否是最开放的,谢谢。

我来回答一下吧。
cc是一系列授权的总称,究竟是什么性质看你选择哪种授权方式。
在官网有介绍:
http://creativecommons.org/licenses/
总的来说和软件授权并不对应。比如CC有 ND(禁止演绎)这种形式,开源软件就没哪个协议不允许你演绎(修改代码)的(不修改就能用的情形不多吧);NC(禁止商业使用)也没有,即使如GPL,你做的二进制程序卖钱也可以,只是要提供所有源代码并且以GPL发布(虽然别人可以直接抓下去编译出来,但可没禁止你标价贩卖)。

之前看那些个概念介绍,的确很晕,这个就清晰明了。

很好,但是与原图不同啊.

引用Chri的发言:

请问CC Lisence是属于哪种的,他的性质又是如何,是否是最开放的,谢谢。

cc主要用于内容文档,不是为分享代码而设计的。

MIT是最少约束的选择。GPL是最多约束的。
如果是个人随意作品,建议MIT许可。
如果是公司或者需要严格保护,GPL。

这绝对是我见到过的最好的开源License说明,感谢一峰的劳动和介绍。

http://hginit.com/00.html
feng哥,你知道joel的hg系列里面的图片是怎么画的么?
像是用手画的,但是边框又很直,然后上面的命令行的图片发现其实是css效果来的的,太有意思了

引用南 靖男的发言:

MIT是最少约束的选择。GPL是最多约束的。
如果是个人随意作品,建议MIT许可。
如果是公司或者需要严格保护,GPL。

最少约束的直接发布在Public Domain中,知名的SQLite即是发布在公开领域

这些许可证难道都是这么绝对互补的吗

我有点不信

gpl 应该和lpgl互补度更高

中间的mozilla许可或许太唯一太顽固太投机,反而是不可持续的许可

所有不和gpl和lgpl兼容的许可,迟早被淘汰

包括商业公司和商业许可

谢谢阮兄的文章,未经您的同意已转载至我们的论坛,如果您不允许,请通知我删除。

还是这张图比较简明. 收藏!!!

引用Register的发言:

谢谢阮兄的文章,未经您的同意已转载至我们的论坛,如果您不允许,请通知我删除。

看来阮老师需要再写一篇关于CC的文章了。

果然是一图胜千言啊
以前看条款,怎么看都没感觉
这图一看就明白了(至少明白了个大概)

阮兄,问个问题,如果现有的使用GPL许可的,比如mysql;在被oracle收购后,改成了闭源,新的版本限制对旧版本的mysql生效么?

引用南明离火的发言:

如果现有的使用GPL许可的,比如mysql;在被oracle收购后,改成了闭源,新的版本限制对旧版本的mysql生效么?

许可证改变,对改变之前的用户不起作用。

哦~ 明白了~ 谢谢。

《开源之道》讲了好几章的东西,不如这么一张图,大赞

阮老师请问AGPL是什么样的开源协议?它与GPL又有什么不同?

"新增代码是否采用同样许可证?"应该改为"链接代码是否采用同样许可证?"吧

一张图胜过千言万语。

今天算是明白了啥叫豁然开朗。

引用Urumchi的发言:
恩, 只有对LGPL做连接/调用而不是源代码包含/修改, 才可以避免自己也同样成为LGPL.

请问这个连接是不是对于静态连接和动态连接都是一样的

老师您好,这张图我看到都是从修改了源码开始的。如果我单单是用了这个软件而没有修改源码的话是什么情况呢?

我要发表看法

«-必填

«-必填,不公开

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