如何为自己准备选择一个开源协议

开源推动了软件的发展,对于这个结论,至今应该不会有人再有意见了。但是最近最好的开源社区卖身给了曾经最反对开源的组织–微软。em….好像有一种奇怪的感觉,但是好在如今微软对开源的态度已经和以往截然不同了,希望微软能在这一点上继续坚持下去,好好推动开源软件的发展。

说到开源,好像一直就有一些误解。很多人认为开源就是免费,其实这两者是有本质的差别的。因为如果开源就等于免费,那开源这件事基本上是没有办法继续下去了。比如 A 发布了一个开源的软件,非常好用,然后 B 将这个开源软件的源码修改之后就不再开源,并且将这些软件拿去卖钱,这样一来,A 不干了,说我采用的是 GPL 开源协议,B 这样干是违法的。B 如果对于开源协议不了解,就会一脸懵逼,说好的开源呢?其实这里 B 对于开源就有很深的误解了。

对于一份代码来说,会涉及到很多的内容,比如说代码的协议和版权信息,代码的商标,代码造成犯罪的责任承担等等,大体上可以分成以下的:

  • a 协议和版本信息:在代码中保留作者提供的协议和版权信息
  • b 声明变更:在代码中声明对原来代码的重大修改和变更
  • c 公开源码:源码必须公开
  • d 商业使用:代码用于商业活动
  • e 责任承担:代码的作者承担代码使用后造成的后果
  • f 商标使用:可以使用作者的姓名、作品的 LOGO或者商标
  • g 附加协议:在原来的协议的基础上增加新的附加协议

下面是常见的六种开源协议上对这些规则的限定:

协议 要求 允许 禁止
Apache a b d g e f
GPL a b c d e g
MIT a d e
BSD a d g e
LGPL a c d g e
Mozilla a c d g e f

当然,看完这些之后,你是不是还是一头雾水,当然了,一下子要记住这么多晦涩的东西确实不是一件简单的事情,那么还有一个更简单的方法来帮助你选择,下面这张图是阮一峰大神从国外汉化过来的,可以说是很清晰了: