2020 年 3 月摄于北京奥林匹克森林公园
说起柚子(北京)科技有限公司,可能没多少人知道。要说 APICloud,那估计听说过的人就多得多了。APICloud 在 2018 年完成了近亿元人民币的 B 轮融资,由复兴领投 。
中国判决文书 是国内法院判决文书的官方展示平台,有接近 9000 万篇法律文书。其中一个案例是数字天堂(北京) 络技术有限公司起诉柚子(北京)科技有限公司。柚子科技在 站提供了 APICloud 软件的下载,数字天堂在 站提供了 HBuilder.window 软件的下载。数字天堂认为 APICloud 1.1.12 软件抄袭了 HBuilder.window.5.5.0 三个插件的源代码。证据之一是 APICloud 1.1.12 的 ResetPwdll.dll 文件属性显示的数字签名是“数字天堂(北京) 络技术有限公司”。这个判例在 2015 年一审的结果是柚子科技赔偿数字天堂 146 万,在 2018 年二审更改为 71 万元。
这个例子和开源软件许可证有什么关系呢?主要是在庭审中的双方举证。
一审判决书的内容显示,柚子科技认为“原告的 HBuilder 软件是 GPL 协议下的开源软件分支。根据 GPL 协议的规定,原告的 HBuilder 软件使用了受 GPL 协议保护的第三方软件源程序,其软件亦为开源软件,任何第三方有权在 GPL 协议授权下使用其代码并构建衍生软件产品。因此,被诉 APICloud 的软件中对于原告软件相关源程序的使用 无需经过原告许可,二被告的被诉行为未侵犯原告的著作权……原被告双方的涉案软件 均为免费软件”。 (我这里直接全文引用判决书内容)
这个案子也因此被部分人称为“ 中国 GPL 诉讼第一案”。
当然了,这个案件已经由法院做出了终审判决,尘埃落定。开源运动如火如荼,开源软件无孔不入。在当下,如何充分而优雅地利用开源软件,就是几乎所有科技公司和 CTO 不得不注意的问题。没看过合同文本就没资格谈法律,类似的,不了解开源软件许可就谈开源也无异于盲人骑瞎马、夜半临深池。
这周因为工作缘故,我学习了一些关于开源软件许可证的内容,这里做个整理和分享。主要内容包括三个方面:是不是必须有许可证、常见的许可证有哪些、如何选择许可证。
什么是开源软件?
有句话说的是“一流企业卖标准,二流企业卖技术,三流企业卖产品。”在这个之上,还有一个顶流企业做的事情,定概念。新事物的产生,一定是先衍生出概念,随着概念流传逐渐广泛,参与的人和企业越来越多,需要定标准;在统一标准之下,拼的是技术;在相同的技术水准之上,比的才是产品。就像是“百度一下”说的其实是用搜索引擎搜一下,而不一定是用百度搜一下;“淘宝”几乎等同于 购,而不一定是在淘宝 APP 里 购,这是最顶级的把产品做成行业概念的案例。
说回开源软件。你认为什么是开源软件?应该如何定义?现在广泛应用的开源软件的定义可以 参考 OSI 确定的标准,一共 10 条。列举其中几条
- 不受限制的自由分发 /Free Redistribution
- 代码开源 /Source Code
- 不得歧视任何个人或团体 /No Discrimination Against Persons or Groups
- 许可证不得限制其他软件 /License Must Not Restrict Other Software
- 许可证必须是技术中立的 /License Must Be Technology-Neutral
……
OSI,全称 Open Source Initiative,中文译为开放源代码促进会,或开放源代码组织,是一个旨在推动开源软件发展的非盈利组织,其官 十分“正统”,直接就是 Open Source :https://opensource.org/。
现行的各种开源软件许可证不下百种,其中经过了 OSI 认可的,相当于颁发了镀 了一层金,这是所有选择许可证的第一考虑因素:一定选择经过 OSI 认可的。
什么是开源软件许可证
开源软件许可证就是与 OSI 的开源软件定义一直的许可证,简言之,开源软件许可证允许软件自由使用、修改和分享(be freely used, modified, and shared)。
虽然都符合 OSI 的开源软件定义,但是不同的许可证对于使用、修改和分享的要求不同,因此具体使用中会有极大的差别。比如开头提到的 GPL 许可就被称为“病毒”,因为 GPL 许可证要求使用了包含 GPL 代码或动态连接到 GPL 库上的软件,也 必须使用 GPL 许可,就像病毒一样是层层传递下去的。其思想根源是开源软件应当具备自我保护和可持续发展的能力,或者更直白的说, 避免吸血和白嫖。
GPL 应用最广泛和最新的是第三个版本,也就是 GPL V3 。Linux 创始人 Linus Torvalds 也忍不住在多个场合一再 的吐槽 GPL V3,表示“GPL V3 is a nice licence but it violates everything that V2 stood for.”
GPL 还有衍生的版本 AGPL。Hadoop 领域仅存的独苗,曾经获得 Intel 7.5 亿美金投资后估值高达 41 亿美金、现在市值不到 20 亿美金的美股上市公司 Cloudera 就在去年宣布把旗下的许可证改为 GPL 系列许可的一种:AGPL-3.0。
也有一些十分任性和随意的许可证,比如我翻译为“爱咋咋地许可证”的 WTFPL(Do What The Fuck You Want To Public License)。这个许可文如其名,内容十分简单,风格极其粗暴,就是随便做什么都可以,我在下文截了个图。WTFPL 也有着像模像样的 站 www.wtfpl.net和 Wikipedia 词条。
正因如此,对于新手来说,如何选择合适的开源软件许可证也是个比较头疼的事情。
好在全球最大的程序员同性 交 站 GitHub 推出了一个“如何选择许可证”的 站 choosealicense.com,可以帮助大家轻松入门。
必须提醒的是,开源本身就是重在参与的,软件如此,许可证也是如此。所以你完全可以自己制定自己的许可证,只不过这个使用范围有多广,就要看你的推动力了。
到这里,就不能不提两种重要的许可证类别的:Permissive 和 Copyleft。Copyleft 要求使用相应许可证的软件的衍生版本(正式说法是“修改及延伸版本”)也都必须保持相同的许可证。Copyleft 许可证中最广为人知的就是 GPL 了,也就是开头的判例中涉及的,也被 Linus Torvalds 吐槽过的。
Permissive free software licence,译为宽松自由软件许可协议条款,或宽容式自由软件许可协议条款,不要求开源软件的衍生版本继续保持相应的许可证。Permissive 许可证中最广为人知的 MIT 许可证与 BSD 许可证。有时候 Permissive 也被称为 Copyfree。
简言之,Permissive 的要求更少,限制更低。
根据 WhiteSource 的数据,从趋势上也能看出,从 2012 年到 2019 年,Permissive 许可证的占比一步步反超了 Copyleft 许可证。
常见的开源软件许可证有哪些?
在 OSI 站上经过认可的许可证已经有 96 个,未经认可的更是不计其数。可想而知的是,这些许可证中的绝大部分是无人问津的,所以我们不应该求全责备,而是先抓西瓜,放着芝麻不管。
根据 WhiteSource 的数据,在 2019 年各种许可证的市场占比从高到低前三名分别是 MIT、AApache-2.0 和 GPL v3。下图的 top 10 名单基本就是当前比较热门的许可证了,尤其是 GPC 的三个版本、BSD 的 2 个版本都在其中出现了。
排名第一的 MIT 许可证 确实是起源于 MIT 大学的,源自上世纪 80 年代。MIT 许可证是 Permissive 许可证的代表之一,其要求极其宽松,比如开源软件 M2IT 使用了 MIT 许可证,修改后的 M2I2T 软件 可以不用 MIT 许可证,甚至可以改用 Copyleft 类型的 GPL 许可证。根据 GitHub 官方博客的数据,2015 年 GitHub 上最流行的就是 MIT 许可证,45% 的项目都用了这个许可证。
排名第二的 Apache-2.0 是 由阿帕奇基金会 ASF 在 2004 年通过的。Apache-2.0 不强制衍生软件使用相同的许可证,但它要求未修改部分必须应用相同许可证,并且在更改的许可文件中都 必须说明做过更改。
BSD 最早是用于操作系统的名字,即 Berkeley Software Distribution。BSD 操作系统最早由加州伯克利开发和分发,现在仍然有着庞大的家族如 FreeBSD, OpenBSD, NetBSD, or DragonFly BSD。BSD 许可证已经衍生出了一系列的许可证,比如 Zero-Clause BSD、3-clause BSD license 、2-clause BSD license、BSD+Patent。 现在比较常用的是 3-clause BSD,这是由最早的 4-clause BSD 延伸而来的。在前面提到的 2015 年度 GitHub 官方 告中,3-clause BSD 和 2-clause BSD 的占有率分别是 4.5% 和 2.7%。
Perl、PHP 和 Python 都在用什么许可证?
说起开源软件,不得不提到开源的编程语言,比如 PHP 和 Python。
你有没有好奇过,他们使用的是什么许可证?
实际上,在开源软件许可证中有一个大类是不可复用许可证(Non-reusable licenses),这在 OSI 的 站上也单独类为一个类别的。比如 Python 编程语言的许可证就是 Python-2.0。这个 Python -2.0 可不是 Python 版本的 2.0、3.0,而是“Python License, Version 2 ”的简称。PHP 编程语言的许可证就是 The PHP License 3.0 ,简称 PHP-3.0。Perl 编程语言的许可证是独一份的 Artistic license 2.0 (Artistic-2.0)。学术排版和印刷中广泛应用的 LaTeX 也有自己的许可证,那就是 LPPL-1.3c,全称是 LaTeX Project Public License, Version 1.3c 。W3C 也有自己的专用 license,The W3C? SOFTWARE NOTICE AND LICENSE ,简称 W3C。
如何选择开源软件许可证
对于大部分人来说,阮一峰在 2011 年制作的这张流程图就够用了,按照流程走下去,看看你
对于专业人士来说,还需要更加详细和覆盖更广的表格,这就不得不用到开头提过的 GitHub 专门建立的 站 choosealicense.com了。该 站从 12 个方面对比了 27 种 不同的许可证。如下图。这 12 个 方面分别是:
- 商业用途 /Commercial use
- 分发 /Distribution
- 修改 /Modification
- 专利授权 /Patent use
- 私用 /Private use
- 公开源码 /Disclose source
- 放置许可协议与版权信息 /License and copyright notice
- 使用 络分发 /Network use is distribution
- 使用相同协议 /Same license
- 声明变更 /State changes
- 承担责任 /Liability
- 使用商标 /Trademark use
开源协议中标注绿色为 允许,表示允许进行这样的行为,否则可能表示不允许。
开源协议中标注蓝色为 要求,表示使用者必须遵循的内容。
通过这个表格,我们也可以看到开源软件最大的共性就是允许商业用途、分发、修改和私有——这又回到了前面提到的 OSI 对于开源软件的定义中去了。
如果这个表格还不尽兴,想要更深一步的研究,那可能就需要去看许可证的文本了。
文章稍长,总结一下:
- 开源软件不仅仅是代码开源, 还包含自由分发、技术中立、不得歧视等原则
- 开源软件许可证种类众多,可以分为 宽松型 Permissive 如 BSD 和 MIT、严格型 Copyleft 如 GPL
- 每个人都可以 制作和发行自己的开源软件许可证 ,就如制作自己的开源软件一样;同时 Perl、PHP 和 Python 等是有着自己的独有许可证的
- 如何选择开源软件许可证,可以简单的按照阮一峰提供的流程图,稍微复杂的按照 GitHub 给出的对比表格,或者自己研究许可证文本。
- 文章错误或不当之处,欢迎直接指出。我还在学习中
链接
- 北京知识产权法院民事判决书(2015)京知民初字第 631
- 北京市高级人民法院民事判决书 (2018) 京民终 471
- https://www.youtube.com/watch?v=PaKIZ7gJlRU
- https://www.youtube.com/watch?v=OnmWFxlG2GA
- https://resources.whitesourcesoftware.com/blog-whitesource/top-open-source-licenses-trends-and-predictions
- https://github.blog/2015-03-09-open-source-license-usage-on-github-com/
-
https://zh.wikipedia.org/wiki/Apache%E8%AE%B8%E5%8F%AF%E8%AF%81
?这是 28 天瞎写营(第二季)系列 ?
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!