技术编辑:徐九丨发自 思否办公室
2020 年 5 月 22 日,OpenCV 技术委员会在一次会议中提出,拟将授权协议从 BSD 协议改为 Apache License 2 协议。和 BSD 相比,Apache License 2 是一个更规范和更详细的开源协议。
更改协议为哪般?
对于开源授权协议的定义,我们可以参考百度百科词条:
自由软件/开源软件是自由的,免费的,源代码开放的,我们可自由下载安装和使用。同时,为了维护作者和贡献者的合法权利,保证这些软件不被一些商业机构或个人窃取,影响软件的发展,开源社区开发出了各种的开源许可协议。
开源许可协议有很多种,OpenCV 现在采用的是 BSD 协议。
BSD 许可协议原先是用在加州大学柏克利分校发表的各个 4.4BSD/4.4BSD-Lite 版本上面(BSD 是 Berkly Software Distribution 的简写)的,后来也就逐渐沿用下来。1979 年加州大学伯克利分校发布了 BSD Unix,被称为开放源代码的先驱,BSD 许可证就是随着 BSD Unix 发展起来的。BSD 许可证一度也被 Apache 和 BSD 操作系统等开源软件所采纳。
但这是一个只有三条简单条款的「简陋」协议,在某些情况下无法有效的保护用户。对此,OpenCV 举了一个例子来说明:
某名为“发明”的公司为某算法申请了专利,并发表了论文。因算法效果优秀,某 CV 爱好者依论文编写了代码,并以 BSD 协议将代码提交到 OpenCV。这个过程中没人知道算法已申请专利,隐患便被埋下。另一名为“发财”的公司将 OpenCV 中的这个算法应用到其产品中。依照现有 BSD 协议,此公司可以商业销售产品,只需注明产品使用了OpenCV,而无需对用户开源。
“发明”发现“发财”使用了其专利技术,遂起诉“发财”要求赔偿和停止侵权,并顺带起诉或要求开源社区停止侵权。一旦发生这样的案例,“发财”肯定要破财。开源软件声誉也会受到负面影响。
为了避免发生类似的情况,OpenCV 技术委员会才决定将 BSD 协议改为 Apache License 2 协议。
该协议和 BSD 类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。但 Apache License 2 更规范也更详细:
- 需要给代码的用户一份 Apache Licence
- 如果你修改了代码,需要在被修改的文件中说明。
- 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
- 如果再发布的产品中包含一个 Notice 文件,则在 Notice 文件中需要带有 Apache Licence。你可以在 Notice 中增加自己的许可,但不可以表现为对 Apache Licence 构成更改。
其第三条「Grant of Patent License」明确规定了专利所有人通过代码向使用者进行“永久性的,全球性的,非排他性的,免费的,免版税的,不可撤销的”授权。也就是说,专利所有人同意永久授权,不可再起诉用户侵权。
目前 OpenCV 核心团队正在讨论更换协议的详细步骤。
常见的开源协议
开源软件的许可证都是基于开源许可协议的,常见的开源许可协议除了我们上文中提到的 BSD 和 Apache 之外,还有 GPL、LGPL、MIT。
一、GPL
General Public License,简称 GPL。GPL 同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。
GPL 协议最主要的几个原则:
- 确保软件自始至终都以开放源代码形式发布,保护开发成果不被窃取用作商业发售。任何一套软件,只要其中使用了受 GPL 协议保护的第三方软件的源程序,并向非开发人员发布时,软件本身也就自动成为受 GPL 保护并且约束的实体。也就是说,此时它必须开放源代码。
- GPL 大致就是一个左侧版权(Copyleft,或译为“反版权”、“版权属左”、“版权所无”、“版责”等)的体现。你可以去掉所有原作的版权 信息,只要你保持开源,并且随源代码、二进制版附上 GPL 的许可证就行,让后人可以很明确地得知此软件的授权信息。GPL 精髓就是,只要使软件在完整开源 的情况下,尽可能使使用者得到自由发挥的空间,使软件得到更快更好的发展。
- 无论软件以何种形式发布,都必须同时附上源代码。例如在 Web 上提供下载,就必须在二进制版本(如果有的话)下载的同一个页面,清楚地提供源代码下载的链接。如果以光盘形式发布,就必须同时附上源文件的光盘。
- 开发或维护遵循 GPL 协议开发的软件的公司或个人,可以对使用者收取一定的服务费用。但还是一句老话——必须无偿提供软件的完整源代码,不得将源代码与服务做捆绑或任何变相捆绑销售。
Linux 采用的就是 GPL。GPL 协议和 BSD、Apache Licence 等鼓励代码重用的许可很不一样。GPL 的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代 码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种 linux,包括商业公司的 linux 和 linux 上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。
GPL 协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL 协议的产品作为一个单独的产品使用没有任何问题, 还可以享受免费的优势。
由于 GPL 严格要求使用了 GPL 类库的软件产品必须使用 GPL 协议,对于使用 GPL 协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。
二、LGPL
LGPL 是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,旧称GNU Library General Public License (GNU 库通用公共许可证),后来改称作Lesser GPL,即为更宽松的 GPL,在宽松程度上与 BSD, Apache,XFree86 许可证相似。
GPL(General Public License)和 LGPL 是 GNU 的两种 License。越来越多的自由软件(Free Software)使用 GPL 作为其授权声明,如果对 GPL 一点都不了解,有可能在使用自由软件时违反 GPL 的授权,恐怕会有被起诉的风险。所以任何公司在使用自由软件之前应该保证在 LGPL 或其它 GPL 变种的授权下。
LGPL 是 GPL 的一个为主要为类库使用设计的开源协议。和 GPL 要求任何使用/修改/衍生之 GPL 类库的的软件必须采用GPL协议不同。LGPL 允许商业软件通过类库引用(link)方式使用 LGPL 类库而不需要开源商业软件的代码。这使得采用 LGPL 协议的开源代码可以被商业软件作为类库引用并发布和销售。但是如果修改 LGPL 协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用 LGPL 协议。因此 LGPL 协议的开源 代码很适合作为第三方类库被商业软件引用,但不适合希望以 LGPL 协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
GPL/LGPL 都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。
三、MIT
MIT 是和 BSD 一样宽范的许可协议,作者只想保留版权,而无任何其它的限制。
也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。MIT协议又称麻省理工学院许可证,最初由麻省理工学院开发。被授权人权利:
- 被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。
- 被授权人可根据程式的需要修改授权条款为适当的内容。
被授权人义务:在软件和软件的所有副本中都必须包含版权声明和许可声明。