深度报告:开源协议那些事儿




什么是License、许可协议

传统意义而言,许可协议(Licensing Agreement)是技术贸易的一种主要形式。是指许可人同意受许可人使用、制造或销售其专利物,或同意受许可人使用其商标,而由受许可人支付一定的报酬作为取得此项使用权的对价的一种合同。


软件许可是软件开发者与其用户之间的一份合约,用来保证在符合许可范围的情况下,用户将不会受到控告。软件的许可方式大致可分为专属软件与自由开源软件。其主要区别在授予用户的权利有所不同。


自由开源软件将两个权利都授予用户,将可修改的源代码与软件捆绑在一起,这个情况称为“开源”。专属软件通常不会授予这些权利,因此会将源代码隐藏起来,这种情况则称为“封闭源码”。


开源软件授权里,其中较普遍的授权方式,是开放源代码促进会(OSI)在其开源定义下所认可的授权。


开源许可协议使人们免去了研究那些专业的许可条款的麻烦,可以更方便的对开源项目贡献出自己的代码。而且它还能保护你作为作品的原创作者,确保你至少拥有由于贡献参与而带来的署名荣誉。它还能用来阻止其他人企图声明对你的作品拥有所有权的行为。


开源协议(Open Source License)就是一种用于计算机软件开源使用的许可证,目前世界上有多达上百种开源许可证,不过我们最常用的主流开源协议主要有GPL、LGPL、EPL、MPL、Apache、MIT和BSD这几种。


协议就是“契约” ,简单理解就是:说好的,都写下来,写下来的,我都认。

示例:“我允许你们XXX,我许可你们XXXX,你们可以XXXX,但是,你们必须XXXX,如果你们XXXX了,你们就必须XXXX,对了,对于XXXX这些情况,我可不负责。“

你要同意,就用,不同意就别用。

如果你用了,但违反了许可证的要求,我可能会告你啊!


关于开源促进会(OSI,Open Source Initiative)

OSI是国际开源领域最官方的组织,其认证的开源协议被世界上大部分开源基金会和开源社区所采纳。开源促进会(OSI)是美国加利福尼亚州的一家公益公司,成立于1998年,拥有 501(c)3注1 免税资格,促进会的目的就是促进开放源代码软件的使用,本质上,OSI是一家美国企业。


目前被OSI批准的在用开源协议有八十多种,常用的有九种。被OSI接受的中国开源协议:北京大学联合西南大学、华为、电子标准院等产学研各界16家单位制定的开源协议“木兰宽松许可证”(MulanPSL-2.0)注2


注1–501(c)3

是美国国税局发布的所有组织的类型之一, 501(c)(3)— 宗教、教育、慈善、科学、文学、公共安全测试 (Testing for public safety)、促进业余体育竞争和防止虐待儿童或动物等七个类型的组织。


注2–木兰宽松许可证

由北京大学作为国家重点研发计划“云计算和大数据开源社区生态系统”的子任务牵头单位,依托全国信标委云计算标准工作组和中国开源云联盟,联合国内开源生态圈产学研各界优势团队、开源社区以及拥有丰富知识产权相关经验的众多律师,在对现有主流开源协议全面分析的基础上,共同起草、修订并发布的开源许可证。


OSI的开源定义(OSD)

开源定义是开放源代码促进会(OSI)出版的文件,来确定一个软件许可证是否可以被标记为开源证书。定义基于Debian自由软件指导方针。


OSI对开源的定义以及自由软件基金会(FSF)对自由软件的官方定义基本上参考相同的软件许可证。


人们口中的“开源”软件意指与自由软件大致相同的类别。但它们不是完全相同的软件类别:开源软件接受一些我们认为过于限制的许可证,并且没有接受部分自由软件的许可证。但是,类别扩展的差异很小:几乎所有的自由软件都是开源的,几乎所有的开源软件都是自由的。”


开放源代码不仅仅意味着可以访问代码。开源软件发行需要服从以下准则:

① 自由再分发:不限制其他方出售或者分发该软件,许可证不应该要求专利费或其他销售费用

② 源代码:程序必须包含源代码,需要有完整的源代码和可编译的形式;不能只发布预处理器或编译器的输出文件

③ 衍生作业:许可证必须允许修改和衍生作业,需要像原来的许可证那样发布

④ 作者源代码的完整性

⑤ 不歧视个人或团体

⑥ 不歧视领域:许可证不能限制任何人将程序用在某个特定的领域。例如,不能要求人们不可以把程序用在商业领域或者基因研究

⑦ 许可证的分发

⑧ 许可证不能对一个产品特化

⑨ 许可证不能限制其他软件

⑩ 许可证必须是技术中立的


开源许可协议

开源促进会(OSI,Open Source Initiative) 批准的许可证超过80种,其中被广泛使用的许可证包括以下8种:

① Apache License 2.0 (Apache-2.0)

② 3-clause BSD license (BSD-3-Clause) /三句版BSD

③ 2-clause BSD license (BSD-2-Clause) /两句版BSD

④ GNU General Public License (GPL)  / GNU通用公共许可证

⑤ GNU Lesser General Public License (LGPL) / GNU次通用公共许可证

⑥ MIT license (MIT)

⑦ Mozilla Public License 2.0 (MPL-2.0)

⑧ Eclipse Public License version 2.0 (EPL-2.0)


根据使用条件的不同,开源许可证分为两大类,即Permissive许可证(宽松式许可证)和Copyleft许可证(反版权许可证)。


Permissive许可证(宽松式许可证)特点:

① 允许用户不经许可可以随意复制、修改和发布,但是并不要求分发时必须使用相同的许可证,用户可以在修改代码后选择闭源。

② 常见的Apache、BSD、MIT属于此类宽松式许可证


Copyleft许可证 (反版权许可证)特点:

① Copyright(版权)的意思是未经许可,用户无权复制和使用。

② Copyleft License(反版权许可证)作为Copyright的反义词,意为未经许可,用户也可以随意复制、修改和发布,但要求分发者必须使用相同的许可证发布修改后的衍生作品,以保证衍生作品也能被其他人自由使用,常见的AGPL, GPL, LGPL, MPL属于Copyleft许可证。


PostgreSQL许可属于宽松式许可证,用户可以随意分发,类似MIT或者BSD,但以更自由的方式进行。


MySQL的GPL属于反版权许可证,要求分发者必须使用相同的许可证发布修改后的衍生作品


以下图示说明了不同许可协议的主要约束、宽松度的差异: 

1611114908723727.png

图自:https://blog.csdn.net/wadefelix/article/details/6384317


说明:

①  DRM:Digital Restrictions Management

②  使用GPLv2,用户只能依赖于暗含的专利授权,希望提供软件的公司不会因专利侵权而控告他们或者接受他们拷贝的用户。

③ GPL v3能提供用户比GPL v2更为明确的专利保护,而且GPL v3也能防范未来出现一些不利于自由软件发展的商业合作(如微软与Novell)。有趣的是,GPL v3并没有直接禁止这些商业合作,而是以巧妙的定义让这类商业合作能够让整个开源社群都受益,这相当于釜底抽薪的效果。


不同版权说明

MIT,BSD和ISC许可证–协议简单,主要就是“随便你怎么做,但是不要起诉我”

Apache许可证也说“随便你怎么做,但是不要起诉我”,但是用了更多的文字来说明(律师们喜欢这样)。它还包含专利许可和报复条款,旨在防止专利(包括专利流氓Patent Troll)妨碍软件项目。


GPL许可证(GPLv3,GPLv2,LGPL,Affero GPL)都包含某种类似共享的许可证。他们实质上是说“如果您对此进行派生,并在某些情况下将其分发给他人,则您必须根据此许可提供源代码。”这里要了解的重要一点是,“衍生工作”和“某些情况”都需要进行法律分析,以了解项目的含义和影响。

1611114990164773.png

图片来源:zh.wikipedia.org(自由及开放源代码软件许可证比较)


BSD在最初散播的时候,其许可证内含有一项额外的条款,要求所有从以BSD许可证授权的软件派生著作,都必须要包含一段文字以交代源代码的来源。该条文列于原BSD许可证的第三条


1999年7月22日,William Hoskins,也就是伯克利技术许可办公室的主管(director of the office of technology licensing for Berkeley),删除了BSD许可证的第三条:


3. 所有提及本软件功能或是本软件使用之宣传材料,都必须包还含下列之*交待文字:

 * “本产品内含有由伯克利加州大学及其软件贡献者所开发的软件。”


原来的许可证有时被称为“BSD-old”(老BSD)或“4-clause BSD”(四句版BSD)

当前的BSD许可证有的被称为“BSD-new”(新BSD)、“revised BSD”(修订的BSD)或“3-clause BSD”(三句版BSD)。


NetBSD基金会表示自2008年6月20日开始,采用两句版许可的许可,也就是2-clause BSD-like License,也就是删掉了许可证的第三句和第四句。这样就跟MIT许可证功能上等价了。这也是唯一被允许用作特定库(如KDE)的BSD风格许可证。


开源许可证的使用趋势

宽松(permissive)的开放源代码许可证的采用继续增长(67%);Copyleft许可证(尤其是GPL系列)的使用则继续减少;MIT和Apache 2.0许可证再次在2019十大最受欢迎的开源许可证排行榜上分别排名第一和第二,各自比去年增长了百分之一


开源许可种类

1611119245303186.png

信息来源:https://resources.whitesourcesoftware.com/blog-whitesource/top-open-source-licenses-trends-and-predictions


PostgreSQL与MySQL的许可协议

PostgreSQL如何获得许可?

PostgreSQL是在OSI批准的PostgreSQL许可证下发布的。即使在商业软件产品中使用也不收取任何费用。其许可在PostgreSQL国际社区网站有完整描述,如下图:

1611119315555739.png

图片原文链接:https://www.postgresql.org/about/licence/


具体中文含义:

PostgreSQL是根据PostgreSQL许可证发行的,该许可证是自由的开源许可证,类似于BSD或MIT许可证。

PostgreSQL数据库管理系统

(以前称为Postgres,然后称为Postgres95)

部分版权所有?1996-2020,PostgreSQL全球开发小组

部分版权所有?1994,加利福尼亚大学董事会


特此授予在任何目的下免费使用,复制,修改和分发本软件及其文档的许可,且无任何书面协议,前提是上述版权声明和本段以及以下两段均出现在所有副本中。


在任何情况下,加利福尼亚大学均不对任何一方承担直接,间接,特殊,偶发或继发性损害的任何责任,包括由于使用本软件及其文档而造成的利润损失,即使已告知可能发生此类损坏的加利福尼亚大学也是如此。


加利福尼亚大学明确拒绝任何担保,包括但不限于针对特定目的的适销性和适用性的默示担保。此处提供的软件是按“原样”提供的,加利福尼亚大学不承担提供维护,支持,更新,增强或修改的义务。


PostgreSQL由PostgreSQL全球开发组共同开发,完全免费和开源,并且已根据PostgreSQL许可证发布。


MySQL项目的源代码已根据GNU GPL向公众开放,并带有多个专有协议。


MySQL两个许可选项是GPLv2(用于社区版)和企业版商业许可。两个许可证之间的主要区别是可用的功能和支持,比如社区版不包含Threadpool之类的功能,这些功能可能会对数据库和查询性能产生重大影响。

 

MySQ原开发者为瑞典的MySQL AB公司,该公司于2008年被Sun Microsystems收购;2009年,甲骨文公司(Oracle)收购SUN公司,MySQL成为Oracle旗下产品,它现在由Oracle公司拥有,提供各种付费版本以用于商业用途。


因为MySQL被Oracle公司拥有,其创始人因担心Mysql的发展,随后创建了完全兼容MySQL的MariaDB,它完全通过GNU GPL许可,而MySQL采用双重许可方法。MariaDB使用的是GPLv2协议,而GPL协议规定只要使用了它的项目都必须开源,不管是否在销售。


什么公司“拥有”PostgreSQL?

没有任何一家公司“拥有”PostgreSQL。PostgreSQL由志愿者和公司组成的不具备法人资格的社团,这些公司和公司根据PostgreSQL许可证共享代码。PostgreSQL项目涉及数十家公司,这些公司要么支持PostgreSQL贡献者,要么直接将公司项目贡献给PostgreSQL的存储库。


PostgreSQL的一些主要公司赞助商位于“赞助商”页面上(赞助级别及是否列入由社区赞助委员会决定)


主要赞助公司:

美国 6/16

日本 3/16

澳大利亚 2/16

法国 1/16

俄罗斯 1/16

英国1/16

德国 1/16

瑞典 1/16


其他赞助公司:

美国 5/8

德国 2/8

俄罗斯 1/8


PostgreSQL会被转换成商业软件吗?

目前没有任何一家公司控制PostgreSQL;PostgreSQL全球开发小组将继续致力于永久免费提供PostgreSQL作为免费和开源软件。并没有计划更改PostgreSQL许可证或以其他许可证发布PostgreSQL。


为什么要开源?

都是“谁” 在开源?

① 个人(个人兴趣、求职需要等)

② 企业(推广自己的产品、增加知名度、培养团队等)

③ 大学及科研机构(科研项目、研究课题等)


最早的开源项目大都来自于大学及科研机构,这些开源或者免费软件等的发起者,大都是兴趣、分享精神或者看不惯这种商业驱动的行为,我们可以将他们称之为一些无私奉献、崇高的、利他的、类似推行教义的一些人,“原教旨主义开源”。


活雷锋确实是存在的。比如1991年的Linux、比如理查德·斯托曼在1983年9月27日公开发起GNU计划等。


开源的意义,主要体现在以下几个方面:

① 开源为之奋斗的是软件的自由修改权,如何不受商业公司控制 ;

② 开源反哺商业、刺激商业繁荣,比如很多商业公司的从软件战略到服务战略的转型(Redhat);

③ 开源是顶尖公司开拓和维持市场地位,快速推动技术变革的重要平台;

④ 开源是伴随互联网的分享精神而普及(免费赚口碑,通过其他方式收费的商业模式);

⑤ 计算机人才更热衷于去能够产出优秀软件的公司,通过开源在社区赢取口碑也成为中小型公司吸引人才的重要手段 (企业影响力)。

⑥ 政府、机构能够依托开源自主创新、低成本的支撑线上办公,数据管理。


对于个人、企业、高校具体的价值内容,如下:

个人

① 自我价值的体现,提升个人影响力

② 成就感

③ 更多同行者的积极交流,促进产品的成熟和完善

④ 我助人人,人人助我


企业

① 将公司开发人员从低价值工作转变为高价值工作,不重新造轮子

② 更低的总拥有成本(TCO),无需为使用底层知识产权付费,采用开源软件通常具有较低的前期成本

③ 获得帮助,使产品更好 ==》 免费增值策略,以推动采用

④ 非真正业务核心的东西开源,继而进入公共领域,他们的开源本质是想让社区进行众包研发,使项目完善得更好

⑤ 开源的分布式协作与同行代码审核

⑥ 开源模式通过将售前周期前移,可以极大的减少整个销售周期;而良好的开源社区声望还可以极大降低市场推广的成本

⑦ 资本市场的认可

⑧ 发掘潜在员工


高校学生

① 从项目中学习:没有教室的限制。在专业社区中学习时,学生学习了远远超出课堂成果的技术和技能

② 专业互动:与开源社区互动时,学生将获得专业技能,包括沟通,团队合作和解决问题的能力

③ 外部机会:帮助学生在课堂外成长,与顶尖企业技术人员的直接沟通交流

④ 更好地了解实际技术:收获在标准教室无法给与的程度上的计算机科学世界的真实面貌

⑤ 快乐:学生会在公开的真实项目上工作感到兴奋


政府

① 低成本的构建网上办公平台、流程信息化生产、高效安全管控数据

② 基于或参照优秀开源软件打在自主创新的软件系统,譬如OS、DB、中间件等基础软件

③ 基于开源软件发展信息化产业生态,促进人才交流、就业


开源协议详细解读

1. GNU GPL(GNU通用公共许可证)

GNU General Public License,GNU通用公共许可证,缩写GNU GPL或GPL。最初有FPF为GNU项目所撰写。

GPL是一个Copyleft许可证,只要软件中包含了遵循GPL协议的产品或代码,该软件就必须也遵循GPL许可协议,也就是必须开源免费,不能闭源收费,因此这个协议并不适合商用软件,GPL强迫后续版本必须一样是自由软件


遵循GPL协议的开源软件数量极其庞大,包括Linux系统在内的很多开源软件都是基于这个协议的,也是历史最悠久的开源协议


主要特点:复制自由、传播自由、收费传播、修改自由

版本:

GPL v1 – 1989/02

GPL v2 – 1991/06

GPL v3 – 2017/06


使用GPL协议的常见项目

Inkscape(GPL v2)

MySQL(GPL v2 + 商业许可证)

MariaDB(GPL v2)


2. LGPL许可协议(GNU宽通用公共许可证)

LGPL,是Lesser General Public License的缩写,LGPL是GPL的一个为主要为类库使用设计的开源协议,是由自由软件基金会FPF公布的自由软件许可证 (1991 v1, 1999 v2, 2007 v3)。


允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。


如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。


LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。


GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。例如:Mozilla(主要推广Firefox互联网浏览器及相关技术支持)。


3. BSD(伯克利软件发行许可证)

BSD开源协议是一个给于使用者很大自由的协议,基本上使用者可以”为所欲为”,是使用最广泛的许可协议之一,可以自由的使用、修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。


当你发布使用了BSD协议的代码,或者以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

① 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议;

② 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议;

③ 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。


很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者 二次开发;鼓励代码共享,但需要尊重代码作者的著作权;BSD许可证并不允许受让方将其删除或替换为其他许可证。


BSD许可证被认为是copycenter(中间著作权),介乎标准的copyright与GPL的copyleft之间,BSD开源协议有三种版本:

① 初版的4句版许可证

② “修订版”3句版许可证

③ “简化版”2句版许可证。


这三种版本都在使用理念上高度接近MIT许可证。事实上,2句版BSD许可证和MIT许可证之间的实际差异很小。3句版和4句版BSD许可证增加了对名称重用和广告的更多要求。如果你想保护自己的产品或品牌名称,可以考虑使用这两版许可证。


采用BSD开源协议的常见项目:

① Django (三句版BSD):Django是用python语言写的开源web开发框架(open source web framework),它鼓励快速开发,并遵循MVC设计。

② Redis(三句版BSD):是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。


4. MIT(Massachusetts Institute of Technology)

MIT许可协议之名源自麻省理工学院,又称“X许可协议”(X License)或“X11许可协议”。


MIT内容与三条款BSD许可协议(3-clause BSD license)内容颇为近似,但是赋予软件被许可人更大的权利与更少的限制。作者只想保留版权,而无任何其他的限制;你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的;它也是GitHub上最受欢迎的许可证。


采用MIT许可的项目:Angular.js、Putty、X窗口系统、Ruby on Rails、Lua等


MIT许可原文链接:https://mit-license.org/


5. Apache许可协议

著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权、同样允许代码修改、再发布(作为开源或商业软件)链接。它也是GitHub 上排名第二的许可证。


特点:

? 永久权利,一旦被授权,永久拥有;

? 全球范围的权利;

? 授权免费,且无版税, 前期,后期均无任何费用;

? 授权无排他性,任何人都可以获得授权;

? 授权不可撤消,一旦获得授权,没有任何人可以取消。比如,你基于该产品代码开发了衍生产品,你不用担心会在某一天被禁止使用该代码。


在修改需要满足的条件(与BSD类似):

? 需要给用户一份Apache License;

? 如果你修改了代码,需要在被修改的文件中说明;

? 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议、商标、专利声明和其他原来作者规定需要包含的说明;

? 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache License。你可以在Notice中增加自己的许可,但不可以表现为对Apache License更改。


一句话要旨:

“要留我的名,改哪了你得说!”

你可以随便用!不会因版权和专利找你麻烦的!

不能用我的商标!

你分发本作品或衍生作品时,可以不再提供源码!

Apache许可原文链接:https://apache.org/licenses/


6. MPL - Mozilla Public License

该协议出现的原因是为了平衡开发者对源代码的需求和他们利用源代码获得的利益;允许开发者免费重新发布、免费修改,但要求修改后的代码版权归软件的发起者。这种授权维护了商业软件的利益,它要求基于这种软件的修改无偿贡献版权给该软件。


总结

开源的许可证主要的限制还是在Re-distribution(二次发布),所以个人/商业公司开发的软件包含了GPL的代码,只要你不发布,是可以任意使用的。

开源的许可按严格程度排序:GPL > LGPL > MPL > Apache > BSD == MIT

适合商用的协议:BSD、MIT、Apache Licence 2.0、LGPL


参考链接

GITHUB开源的法律保护及如何选择 http://suo.im/5GKuAA

自由及开放源代码软件许可证比较 http://suo.im/6aPkig

卫剑钒:从MIT协议谈契约精神  http://tinyurl.com/yansjptq

MIT许可协议具体限制了什么?http://tinyurl.com/y6uq72eb

各种License介绍 http://tinyurl.com/y9olcyys

GNU宣言http://tinyurl.com/y85645jh

PostgreSQL License https://www.postgresql.org/about/licence/

BSD 4-Clause “Original” or “Old” Licensehttps://spdx.org/licenses/BSD-4-Clause.html

BSD-2-Clausehttps://opensource.org/licenses/BSD-2-Clause

BSD-3-Clausehttps://opensource.org/licenses/BSD-3-Clause


作者: 中国PostgreSQL分会 周宝峰

社区公众号二维码
相关内容