各种开源协议
开源协议简介
很多软件开发者和设计者都有将自己的软件作品以开源的形式公之于众的想法。他们希望其他人也可以分享自己的作品,使用自己的作品。开源社区之所以能蓬勃发展就是因为人们有这样的愿望。开源软件如此的丰富,任何你能想到的应用领域里都能找到它们的身影。 大部分的设计人员都已经把使用开源软件和开源代码作为日常工作不可缺少的一部分了(WordPress, Drupal 和许多其它的内容管理系统都是开源软件)。
但是很多的软件作者和设计者都对各种不同的开源许可协议的内容和含义不甚了了。当你选择了某种开源许可协议时,你都放弃了哪些权力?在没有能明白各种开源协议的确切含义前,在不知道它们最适用于什么情况下时,软件开发者不可能在关于哪个许可协议最适合自己的软件的问题上做出准确的抉择。
什么是软件许可协议?
关于究竟什么是许可协议的问题上有很多事实而非的说法。当你给软件附上许可证时,意味着你将保留对软件的所有权利。你将对你的作品拥有原创版权(或者是专利权,如果你申请到了)。许可协议用来授权其他人具有某种使用你的作品的权利。
依靠许可协议将你的作品对外开源或者对你的作品的各个方面逐一进行授权,是一个不错的方法。一旦对外开源,你将失去所有对你的作品的版权,别人也没有义务将你标注为作品的原创者或捐献者。而我说的后一种情况里,估计你需要从设计和开发的工作中抽出更多的时间来处理遇到的各种侵权问题。
开源许可协议 使人们免去了研究那些专业的许可条款的麻烦,使人们更方便的对开源项目贡献出自己的代码。而且它还能保护你作为作品的原创作者,确保你至少拥有由于贡献参与而带来的署名荣誉。它还能用来阻止其他人企图声明对你的作品拥有所有权的行为。
GNU General Public License 通用公共许可协议
GNU General Public Licence 通用公共许可协议 (GPL) 可以说是在开源项目中使用最广泛的一种协议来。 GPL 对开发开源软件的开发者们在权利上进行了周详的认可和保障。本质上讲,它允许用户对软件进行合法的拷贝,传播和修改。这意味着你可以:
- 随意复制
- 随意传播
- 收费传播
- 随意修改
如果你想增加或删减一些功能,那就干吧。如果你想在其它项目里使用它里的一部分代码,也是允许的。只是有一点,这个其它项目也必须是使用 GPL 授权的。
请注意一个非常重要的概念:对源代码的传播和对已编译代码的传播是两个完全不同的事情。因此,有些应用程序的许可协议对着两种形式的代码分别进行了不同的使用授权。 更多的信息可以参考文章 GPL 协议实用手册 (作者 @PierreJoye)。要想使用
GPL, 你还必须在代码里添加一些协议相关信息,还要有一份许可协议的副本拷贝。
GNU Lesser General Public License 次通用公共许可协议
你还需要了解另外一种 GNU 许可协议: Lesser General
Public Licence 次通用公共许可协议 (LGPL)。它对作品的使用保留了更少的权利。通常,LGPL 适用于一些类库,它允许这些类库能够被非GPL或非开源软件引用。因为 GPL 要求,要想使用 GPL 保护下的代码,你必须把你的软件也置于 GPL 协议之下。开发者不能够在商业的和具有私有权的软件里使用GPL协议下的程序。而 LGPL 放弃了这些限制,它不要求其它程序也必须使用相同的协议才能使用这些代码程序。
BSD 许可协议
BSD 协议有很多分支,它们都代表了一种宽松的自由软件协议,相对其它协议,例如GPL,来说,它们对软件的传播给予了更少的限制。
在这种协议的各种版本中,有两个版本格外的重要: 新 BSD 协议/修订版 BSD 协议和简化 BSD 协议/FreeBSD 协议。这两类协议都实现的对 GPL 兼容的自由软件协议,而且被 Open Source Initiative 认可为开源软件协议。
新 BSD 协议(”3-clause license”)无任何限制的允许你以任何目的二次分发这种软件,唯一的要求是必须保留拷贝权的声明和协议里的软件权利放弃条款。这种协议还有一个限制,未经许可不得使用这个作品的所有曾经捐助者的署名。 新 BSD 协议和简化 BSD 协议的最主要的区别是后者删除了署名条款。
MIT 许可协议
MIT 协议应该是在流行的开源协议中最简短的、使用最广泛的一种协议。它的条款非常的宽松,而且跟其它协议相比更自由。 这种协议最基本的条款 ( the information that it is provided without warranty, which comprises the final paragraph)
如下:
特此授权,任何人都可免费获得这个软件以及相关文档(the “Software”)的拷贝,可以无限制的使用这个软件,包括无限制的权利去使用、复制、修改、合并、发布、附加从属协议,以及/或者出售软件的拷贝, 同时,为了让软件的提供者有权利做到这些,下面的条件必须遵守:
上面的拷贝权声明和许可声明必须包含在所有的这个软件拷贝里和实际分署部分里。
这也就是说:
- 你可以随意使用,复制,修改这个软件。没有人能够阻止你在任何工程里使用它,你可以复制任意次数、以任何形式,或按你的愿望修改它。
- 你可以向外免费发放,或出售。你可以随意的分发它,没有任何限制。
- 唯一的限制是你必须接受协议条款。
MIT 协议是目前最少限制的协议。它基本上就是任何人可以对这个协议下的软件的做任何的事情,只要你能认可这个协议。
Apache 许可协议
Apache 许可协议, 2.0 版本, 授予了用户大量的权利。这些权利可以应用于拷贝权,也可以用于专利权。因为很多许可协议只能适用于拷贝权,不适用于专利权,所以这个灵活性就成了让有专利的开发者们选择许可协议时的一个显著参考因素 (要想明白两者之间的不同,请参考 How Stuff Works 上的这篇文章 )。
下面是关于 Apache 许可协议所允许的事项的详细说明:
- 权利永恒。
- 权利无疆界。
- 授权无需付费和支付酬劳。
- 权利不排他。
- 权利不可变更。
权利一旦授予,不可剥夺。也就是说,你在使用这个软件的过程中,你无需担心这种情况:当你开发出了令人羡慕的基于这种授权软件的衍生产品时,有人突然跳出来对你说,“抱歉,你将不再被允许使用这个程序。”(在这个协议里有个条款声明:如果你控告别人在这个许可协议下的产品有侵犯专利的行为,那你的授权将会自动终止,但这只是适用于有专利权的作品。只要你不搞有专利作品的诉讼,你永远无需担心这种问题。)
对再分发的作品还有个特殊要求,总的就是说要给予这些程序的作者和许可协议的维护者适当的名誉。
Creative Commons 知识共享协议
Creative Commons (CC) 许可协议并不能说是真正的开源协议,它们大多是被使用于设计类的工程上。 CC 协议种类繁多,每一种都授权特定的权利。 一个 CC 许可协议具有四个基本部分,这几个部分可以单独起作用,也可以组合起来。下面是这几部分的简介:
- 署名
作品上必须附有作品的归属。如此之后,作品可以被修改,分发,复制和其它用途。 - 相同方式共享
作品可以被修改、分发或其它操作,但所有的衍生品都要置于CC许可协议下。 - 非商业用途
作品可以被修改、分发等等,但不能用于商业目的。但语言上对什么是“商业”的说明十分含糊不清 (没有提供精确的定义),所以你可以在你的工程里对其进行说明。例如,有些人简单的解释“非商业”为不能出售这个作品。而另外一些人认为你甚至不能在有广告的网站上使用它们。 还有些人认为“商业”仅仅指你用它获取利益。 - 禁止衍生作品
这意味着你可以复制和分发它们,但你不能以任何方式修改它们,或基于它们进行二次创作。
CC许可协议
上面提到过, CC 许可协议的这些条款可以自由组合使用。大多数的比较严格的CC协议会声明 “署名权,非商业用途,禁止衍生”条款,这意味着你可以自由的分享这个作品,但你不能改变它和对其收费,而且必须声明作品的归属。这个许可协议非常的有用,它可以让你的作品传播出去,但又可以对作品的使用保留部分或完全的控制。最少限制的CC协议类型当属 “署名”协议,这意味着只要人们能维护你的名誉,他们对你的作品怎么使用都行。
CC 许可协议更多的是在设计类工程中使用,而不是开发类,但没有人或妨碍你将之使用与后者。只是你必须要清楚各部分条款能覆盖到的和不能覆盖到的权利。