查看原文
其他

步进式解读Apache许可证

开源中国 2020-09-02

The following article is from 微月人话 Author 卫sir

我们知道,朋友之间或者有一定信任的人之间发生经济往来时(比如借贷或租房之类),虽然也会写借据或合同,但大多比较简单,一页纸就完事了,因为通常不会出事,写多了见外。但如果是机构行为,就会严谨和正式很多,洋洋洒洒好几页,各种通常不会发生的情况都会考虑进去,因为说不准会遇到什么人呢!

MIT许可证就是那种一页纸的协议,一共就三段话,非常宽松,看样子基本上不会去打官司。

Apache许可证也很宽松,但行文上就严谨很多,篇幅也变长很多(大约是MIT的10倍!),设计者在撰写时,显然考虑了种种复杂情况,并随时准备对簿公堂(虽然极少发生)。

不过许可证稍微一长,大家就没有耐心看了。更不要说还是法律语言写成的。

Apache 2.0许可证是ASF(Apache Software Foundation,Apache软件基金会)在2004年发布的,以帮助ASF实现其目标:“通过开源软件开发协作,提供可靠且长久不衰的软件产品”。ASF出品的软件一般都采用Apache 2.0许可证。当然,非ASF的项目也可以使用,Apache许可证设计出来是供所有人使用的。

有人专门做过分析1,Github上使用率最高的许可证,前5名是MIT、Apache 2.0、GPL 2.0、GPL 3.0和bsd-3-clause。本公众号已经在前面专门介绍过MIT。

本文的目的,是从浅入深弄懂Apache许可证,并完全忠于原文。

文章较长,我将以“步进式”方式解读,最精华的放在最前面,以便于你在不能读完的情况下,也能get到精华。

不过,越往后看,会有越多的料。强烈建议读完。

如果对全文翻译不感兴趣,可以迅速拉过第五节。

注:本文不区分“Apache 2.0许可证”、“Apache许可证”、“Apache协议”,视作完全等同。

一、Apache一句话要旨

Apache许可证全文读下来,需要一点功夫。

如果你只想记一句话,那就是“要留我的名,改哪了你得说!”

二、Apache协议精要

从最精简的角度讲,Apache协议想说的是这些:

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

不能用我的商标!

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

你在分发时,必须做到:

1、带上本许可证!

2、保留本软件的所有版权、专利等说明!

3、你改过的文件,你得说改了哪!

4、NOTICE文件中的信息得保留!

5、在遵循本许可证的条件下,你可以再许可!

本作品就这样了,我不会负任何责任的!你想负责你可以负,但别拉上我!

三、能稍微详细一点吗

下面是一个人话精简版(对应Apache许可证的第1到9节)。

1、本软件又叫本“作品”,可以是源码,也可以是编译或转换后的其他形式。“衍生作品”是在本作品的基础上修改后的有原创性的工作成果。本作品的“贡献者”包括许可人和其他提交了贡献的人,以下统称“我”。

2.我授予你权利:你可以免费复制、使用、修改、再许可、分发本作品及衍生作品(可以不用公开源码)。

3. 如果本软件涉及我的专利(或潜在专利),我在此授予你专利许可,你可以永久性地免费使用此专利,用于制作、使用、出售、转让本作品。如果你哪天居然告本作品侵权,你的专利许可在你告我那天被收回。

4.你在复制和分发本作品或衍生作品时,要满足以下条件。

* 带一份本许可证;

* 如果你修改了什么,要在改动的文件中有明显的修改声明。

* 如果你以源码形式分发,你必须保留本作品的版权、专利、商标和归属声明。

* 如果本作品带了“NOTICE”文件,你就得带上NOTICE文件中包含的归属声明。即便你的发布是不带源码的,你也得带上此文件,并在作品某处予以展示。

* 你可以对自己的修改添加版权说明。对于你的修改或者整个衍生作品,你可以使用不同的许可,但你对本作品的使用、复制和分发等,必须符合本许可证规定。

5. 你提交贡献就表明你默认遵守本许可的条款和条件。当然,你可以和我签订另外的专门的条款。

6. 你不许使用我的商品名、商标、服务标志或产品名。

7. 本作品是“按原样”(AS IS)提供的,没有任何保证啊,你懂的。

8. 我可不负任何责任。除非我书面同意,或者法律有这样的要求(例如对故意和重大过失行为负责)。

9. 你可以向别人提供保证,你可以向别人收费,但那都是你的事,别给我惹麻烦。

注意以上的“我”,既包含了许可人,也包含了每位贡献者。

上面提到的归属声明,英文是attribution notices,attribution在这里的含义是“归功于”,或者说是一种credit,表明一个作品归功于谁。除了归功于自己之外,归属声明主要强调的是归功自己用到的其他作品(即第三方作品)。

比如chrome浏览器使用了非常多的其他开源作品,在其“关于”中,可以看到:

打开“开源软件”后,就能看到长长的credit列表。

四、Asim质疑go-chassis事件

2018年1月,发生了这么一件事,go-micro项目的作者Asim质疑go-chassis项目不合理地使用了其代码2

这两个项目都是使用Apache许可证的。

当时,go-chassis项目在其README中是这么写的:

意思是说“本项目受go-micro启发, 但并不是基于它的改善,我们做了更多”。

项目在third-party目录下放了go-micro的5个源代码文件,也带了go-micro的LICENSE文件(内含版权信息),但没有很明显地予以归功(比如在NOTICE文件中)。

1月27日,go-micro的作者Asim,在go-chassis的仓库下发贴(issue#28)提出异议。

标题是“This is not inspired by go-micro”:

大意是说,“你这哪里是受启发,你这分明就是基于我代码的改进,我哪哪都能看到我的代码。与其直接拿走我的代码,不如讨论一下你能怎么回馈go-micro”。(有81个吃瓜群众点了赞。)

Asim咄咄逼人的气势搞的go-chassis非常窘迫。

很快,go-chassis项目的主要维护人tianxiaoliang承认了错误:

1月31日,go-chassis完成了整改,在LICENSE文件和NOTICE文件中都对go-micro给予了credit,并把所有用到的go-micro的文件都放入了third-party目录下。

2月1日,项目在README中也明确做了说明,承认项目是“基于go-micro”(based on)的。

此事才算暂告一段落。

感兴趣的去看看这个issue:

https://github.com/go-chassis/go-chassis/issues/28




下面对Apache协议进行全文翻译,如果你没有时间,可以快进到第六节,阅读后续情况。

五、全文翻译!

看到这里,有人会说,上面这些是不是就够用了?

nonono,那当然是不够的,如果真遇到事,还是得看原文,一切以原文为准。

而且是以英文为准!在ASF官网上关于Apache许可证的FAQ里,明确指出,翻译只是便于理解,只有英文版本才有法律效力。

英文全文的官方网址在:https://www.apache.org/licenses/LICENSE-2.0.html

本人的翻译和解读如下。排版方式是:

英文,灰底蓝色文字

译文,灰底红色文字

里面的难句都会有分析,可以顺便学学英语!

注意:本译文无意逐字逐词对照,目的是说清楚,以通达为首要原则。

下面开始:

Apache License

Version 2.0, January 2004

http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION)

Apache许可证

版本2.0,2004年1月

http://www.apache.org/licenses/

使用、复制和分发的条款与条件

1.Definitions.

”License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

”Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

1.定义

“许可证”就是有关使用、复制、分发的条款和条件,具体在本文的第1到9节定义。

“许可人”就是使用本许可证进行许可的版权所有人(或版权所有人授权的实体)。

“Licensor”这句的结构是:“Licensor" shall mean the copyright owner( or entity ( authorized by the copyright owner ) )that is granting the License.

”Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

“法人实体”是指行为实体以及所有控制它的实体、它控制的实体、或和它处于共同控制之下的实体。

“控制”是指:

(i)通过合同或其他方式,直接或间接地,指导或管理该实体的权力。

或(ii)占流通股百分之五十(50%)及以上的所有权。

或(iii)对该实体拥有受益所有权。

注意第一句比较难,其结构是:LE mean the union of the acting entity and all other entities ( that ( control ) , ( are controlled by ) , or ( are under common control with ) that entity. ) ), 最后这个"that entity"就是前面的acting entity。

分解开来就是,LE mean the union of A and entities that control A, entities that controlled by A, entities that are under common control with A.

举个例子:A是行为实体

A控制了B、C

D、E控制了A

F、G和A都受H控制

那么这个法人实体就是A、B、C、D、E、F、G、H的联合。

然后是对“控制”的定义,从文字上看,control就是power、就是所有权。这是对的,因为有权的人才能控制。里面的beneficial ownership是“受益所有权”,拥有“受益所有权”的人即最终控制人和最终受益方,也就是我们常说的“实际控制人”。

“法人实体”可简称为“法人”。(注意法人不是人,法人是一个组织。)

”You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.

“你”(或“你们”),就是那个正被授予权利的人或者法人。

"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

“源码”形式是指便于人类修改的形式,包括但不限于软件源代码、源文档和配置文件。

”Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

“目标”形式是指“源码”经过机器转换或翻译后的结果,包括但不限于编译后的目标代码、生成的文档以及转换成的其他媒体类型。

目标代码(object code)是源码经编译后的产物(所谓“目标”),通常是机器代码(或称二进制代码)。这里所说的目标形式,除了目标代码,还包含将其进一步转换而成的可执行文件和库文件。

生成的文档(generated documentation)通常是指从源码中自动产生的文档,如Doxygen之类的工具就可以干这种事。

什么是媒体类型(media type)?像文本、音频、视频、图片等等这些都是媒体形式,可以想象一下这些类型:pdf格式的源码、视频形式的源码,图片格式的源码,甚至是音频形式的源码(有点意思!),不过,这些类型都不便于人类修改,还是纯文本的源码最好!!

”Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

“作品”是指可通过本许可证获取的作者的工作成果,它以源码形式或目标形式存在,作品含有或附有版权提示。(本许可证附录部分有样例)

”Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

“衍生作品”是指基于(或源于)某“作品”的原创性工作成果,其所做的编辑修订、注释、深化或其他修改等等,从整体而言,有原创性。就本许可而言,衍生作品不应包括这些作品:可与本衍生作品分离的作品、仅仅通过接口链接(或绑定)起来的作品。

上面这段第一句这样读:”Derivative Works" shall mean any work, ( whether in Source or Object form, ) that is based on ( or derived from ) the Work and ( for which ) the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, ) an original work of authorship.

and for which那个从句,可以看成是:and the editorial revisions…… for the Work, as a whole, is an original work of authorship.

"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."

“贡献”包括作品的原始版本以及对该作品或衍生作品的任何修改或增补,这些内容是版权人(或是被版权人授权的个人或法人)有意“提交”给许可人以将其包含在作品中的。“提交”可以通过电子、口头或书面形式,包括但不限于电子邮件列表,源码控制系统、问题跟踪系统等(这些系统通常是许可人用来讨论和改进作品的),但是那些被显著标识了“并非贡献”的内容,不能视为被提交的内容。

注意这里有许可人(Licensor)和版权人(copyright owner )的区别,许可人在上面有定义,就是发布许可的人,版权人不仅包括主作者,也包括提交修改的作者;同样的,贡献不仅包括那些修修补补,也包括主作品本身。

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

“贡献者”是指许可人以及那些做出贡献的个人或法人。许可人从这些人手中接收贡献并将其纳入到作品中。

这句这样读:”Contributor" shall mean Licensor and any individual or Legal Entity ( on behalf of whom ( a Contribution has been received by Licensor ( and subsequently incorporated within the Work. ) )

比较难懂的是on behalf of whom这块,是谁代表了谁?

是“Contribution”代表了前面的“any individual or Legal Entity”,这个句子的后半部分其实就是:on behalf of an individual or a Legal Entity, a Contribution has been received and incorporated by Licensor .

2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

2. 版权许可。在遵守本许可的条款和条件的前提下,每位贡献者特此授予你永久的、全球性的、非排他性的、免费的、免版税的、不可撤销的版权许可,以复制、准备衍生作品、公开展示、公开使用、再许可、分发本作品和其衍生作品(无论是以“源码”还是“目标”形式)。

非排他性是指不限定只给某人、某团体、某地区等等,而是给所有人都一样的权利。

不可撤销是指一旦授予,将不能再收回。

关于再许可(sublicense)的理解:你是本许可的被许可人(licensee),所谓再许可,就是你分发作品时,可以再次向你的licensee进行许可。至于具体有什么要求,要看许可证第4节第5款。

3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

3.专利许可。在遵守本许可的条款和条件的前提下,每位贡献者特此授予你永久性的,全球性的,非排他性的,免费的,免版税的,不可撤销的(本节列出的例外除外)专利许可,用于制作、委托制作、使用、要约出售、出售、进口、转让本作品,你获得的专利许可,仅仅是有权利向你许可的贡献者授予你的,该贡献者的贡献或者其贡献和本作品结合起来后,不可避免地造成了对该贡献者专利的侵权。如果你针对任何实体(包括诉讼中的交叉索赔或反索赔)提起专利诉讼,指称本作品或贡献直接或间接构成侵权,则本许可授予你的任何专利许可在诉讼提起之日终止。

这段比较难理解,也容易被误解34

where引导的这个从句比较复杂:where such license applies only to those patent claims ( licensable by such Contributor ) that are necessarily infringed ( by their Contribution(s) alone or by combination of their Contribution(s) with the Work ( to which such Contribution(s) was submitted. ) )

上面这段文字可以说的再明白一些:如果作品涉及了某位贡献者的专利(他可能已经拥有专利了,或者以后会拥有专利5),那么,贡献者在此授权你可以实施该专利,(注意你并不是拥有专利,而是获得了专利的实施权),使得你可以制作、使用、……销售作品。(如果不给你专利授权,你是没有权利做这些事的)

如果你提起诉讼说本作品侵犯了什么专利,那么我们立即撤回已经授予你的专利许可。我总不能让你用了我的专利,然后你又反过来告我吧!(比如你将其修改后,申请了新的专利,然后说我侵权。)

make是自己制作,have made是让别人制作

contributory infringement可以翻译为共同侵权或间接侵权,本文译作间接侵权。比如曾有电影公司状告BT造成间接侵权(共同侵权)。

4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

4.重新分发。你可以复制和分发本作品或衍生作品,可通过任意媒介,可以修改或者保持原样,可以是源码形式或目标形式,但前提是满足以下所有条件。

* You must give any other recipients of the Work or Derivative Works a copy of this License; and

* 你必须给接收者一份本许可证的拷贝;

* You must cause any modified files to carry prominent notices stating that You changed the files; and

* 你必须在任何修改过的文件中,带有明显的声明,表明你已更改文件;

* You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and

* 在你分发的衍生作品的源代码中,你必须保留本作品源码中的所有版权、专利、商标和归属声明,但与衍生作品无关的除外;

上面这段要求了在源码中“留名”。注意那个excluding,对于那些在你衍生作品中已经不存在的部分,就不用再留名了。

* If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.

* 如果本作品在分发时包含了一个“NOTICE”文本文件,则你分发的任何衍生作品都必须要有该NOTICE文件所包含的归属声明(与衍生作品无关的声明除外),该归功应位于以下至少一个位置中:衍生作品分发时所带的NOTICE文件;衍生作品所带的源码或文档;衍生作品生成的展示页面中(如果能正常显示这些第三方声明,不管在什么地方都行)。NOTICE文件的内容仅仅是信息性的,不可以修改其中的许可证。你可以在衍生作品中附加自己的归功,在NOTICE文本里面直接添加或者以附录形式出现,前提是附加的归功不能造成对许可证的更改。

上面这段浓墨重彩地强调了对“留名”的要求,包括对第三方作品的留名。

尤其是,即便不带源码,也要留名。

third-party notices是指第三方作品的声明,比如你在A的基础上发布衍生作品B,你和用户是第一、二方,你用到的A以及其他作品就是第三方了。后面章节会有实例说明这点。

值得注意的是,很多使用Apache许可证的项目,并没有带NOTICE文件,而是会有类似CREDITS这样的文件,原则上应该把这类文件等同于NOTICE文件对待。(ASF的项目通常都很规范,都会带一个NOTICE文件)

“if and wherever such third-party notices normally appear. ”这句不太好理解,他的意思是,首先你要能展示(if),才有此要求,有的软件根本没有任何地方可以显示信息(比如一个完全没有显示屏的硬件中),那就不做这个要求。如果能展示,那就不限定在哪里(wherever)展示。

* You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwisecomplies with the conditions stated in this License.

* 在你自己的修改中,你可以添加你的版权声明,并可提供附加的或不同的许可条款和条件,以供他人使用,复制或分发你的修改或整个衍生作品,前提是你对本作品的使用、复制和分发等符合本许可规定的条件。

这段主要说的是“再许可”(sublicense),一个作品A被人拿来做了修改产生了作品B,他在分发B时,可以加上其他许可条款,也可以使用完全不同的许可条款,但他在使用A、修改A、生成B、分发B时,都必须遵循本许可证。

其中的otherwise在这里并非“否则”的意思,而是“其他”、“等等”的意思,指的是A、B、C and otherwise。

5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

5.提交贡献。除非你另有明确说明,否则你有意提交给许可人的任何贡献(用于包含在作品中)都默认遵守本许可的条款和条件,并且再没有任何其他的条款或条件了。尽管是上面这么说,本文中的任何内容都不能取代或修改你和许可人之间(可能)另外签订的有关此贡献的其他任何条款。

6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

6.商标。本许可不授权使用许可人的商品名、商标、服务标志或产品名,除非在描述本作品来源时和复制NOTICE文件时,有必要合理地、符合常规地引用。

7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

7.没有保证。除非适用法律要求或以书面形式同意,否则许可人是“按原样”提供本作品的(每个贡献者也如是提供其贡献),没有任何类型保证或条件(无论明示或暗示的),包括但不限于任何权利担保、非侵权保证,适销性保证、适用性保证或条件。你自行负责确定使用或重新分发本作品的适当性,并承担和你行使权利(本许可授予你的)有关的任何风险。

WARRANTY OF TITLE即“权利担保”,是指卖方应保证其出售的货物享有合法的权利,没有侵犯任何第三人的权利,并且没有任何第三人就该货物向买方主张任何权利。

8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

8.责任范围。不论是任何情况或任何法理依据,任何贡献者均不会对你的损失承担责任,无论其产生于侵权(包括过失)、合同还是其他情形,除非适用法律要求(例如故意和重大过失行为)或书面同意。这些损失包括由于本许可产生的、或由于使用或不能使用本作品而引起的、任何直接的、间接的、特殊的、偶然的、或伴随结果而产生的任何性质的损失(包括但不限于因商誉受损、停工、计算机故障或失效、以及任何其他商业性损坏而带来的损失),即使贡献者已经被告知此类损失的可能性。

9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

9.承担保证或其他责任。在重新分发本作品或其衍生作品时,你可以提供支持、保证、担保以及其他责任、义务及权利,并因此收费,但必须满足以下前提:符合本许可证的条款条件;在承担这些责任时,你只能代表你自己(也只能单独承担责任),不能代表任何其他贡献者;如果因你承担这些保证和责任导致任何贡献者产生任何损失或被追责,你同意担保、保护每位贡献者不受损失和免于责任。

END OF TERMS AND CONDITIONS

条款和条件结束

第9节However后面那句比较长,看起来容易犯晕。其结构是这样的:in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, ( not on behalf of any other Contributor, and ) only if You agree to indemnify( , defend, and hold each Contributor harmless ) for any liability( incurred by ( , or claims asserted against, ) such Contributor ) by reason of your accepting any such warranty or additional liability.

indemnify主要指“担保不受到损失或损害,即便受到损失也同意予以补偿”,hold harmless是指“自己承担责任而免去对方的责任”。

APPENDIX: HOW TO APPLY THE APACHE LICENSE TO YOUR WORK

附录:如何在你的作品中使用APACHE许可证

You should include a copy of the Apache License, typically in a file called LICENSE, in your work, and consider also including a NOTICE file.

你应该在作品有一个LICENSE文件,里面是Apache许可证的拷贝,你还应考虑放一个NOTICE文件。

To apply the Apache License to specific files in your work, attach the following boilerplate declaration, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.

将Apache许可证应用于你作品中某一特定文件时,请附加以下样板声明,“ [ ]”括起来的字段应替换为你自己的标识信息。(不要包括方括号!),这段文本应该位于该文件的注释当中。我们还建议将文件名或类别名以及用途说明,和版权声明放在同一“打印页面”中,以便更容易地将第三方文档区分开来。

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

上面这段不翻译了,原样放上去就是了。

六、go-chassis事件后续

还记得上面说的go-chassis事件吗。

我以前对此并不了解,研究Apache许可证之后才发现还有过这事。

我当然要去求证一下。

于是便去github仓库上看,令我非常惊讶的是,在其third-party目录下,已经没有了go-micro。

仔细翻了翻history,才发现,2018年3月28日, third_party/forked/go-micro目录被移除干净。

同日,PR#151以标题“adjust license&notice”出现,提议在LICENSE、NOTICE和README中,删掉go-micro。该PR得到了项目维护人tianxiaoliang的approve。

asim在issue#28里再次表达了他的不满:

并在PR#151的对话中写道:

大意是说,“你的作品是基于go-micro的,即便你修改和清除了go-micro的代码,你也是基于我而来的,你不能删掉我的版权和许可。我仍然可以指出你的哪部分代码像我的。

不过这次抗议并没有得到回应。

2018年9月17日,README中删除了“本项目基于go-micro”这句。

2019年10月22日,NOTICE中的归功被删掉,licenses/LICENSE-go-micro文件被删掉。

至此,go-chassis和go-micro不再有关系了。

asim也没有再说什么。

我又去看看了go-micro,发现asim虽然维权意识很强,但在版权声明上做的还不够,go-micro项目没有NOTICE文件(这个还好,这不是必须的,尤其是没有第三方可以归功的时候);在所有的源文件中,都没有版权和许可信息,只是在LICENSE文件中Apache许可证的附录部分,声明了一下版权(这种做法也不常见,通常是不动Apache许可证整个内容的):

另外一点让我感觉意外的是,go-chassis虽然说已经和go-micro无关了,但删的并不干净,在其代码中还是能找到go-micro的字样!

下面是在go-chassis中搜索go-micro的结果(2020年5月10日):

我只能认为,这可能是个疏忽。

七、我该怎么归功

从Apache许可证和一些纠纷看,大家是很重视“留名”的。

毕竟,做开源的人,如果连“名”都图不上,那可就差点意思了。

如何留下作者和贡献者的名?

常见的做法是源代码里面留名。源码的首部应该放上版权信息和许可信息。但我在github上翻了翻,发现很多项目并没有做到这点,有的完全没有版权和许可信息,有的则是只写许可不写版权。

究其原因,估计作者一是太懒,二是没有这个意识。

做得比较好的项目,不仅在源码中有声明,还会专门在根目录下放上诸如AUTHORS、CONTRIBUTORS、OWNERS、CREDITS这类文件,对作者和贡献者予以明确的归功。(这些不是必须的,但是推荐的。)

关于版权那行,有一种写法是很讲究的6,值得欣赏和学习:

Copyright <year> <primary authors> and contributors

比如下面这个例子:

这并不是必须的,因为即便不这么写,贡献者也是自动拥有其版权的。只不过这样写,显得格外尊重贡献者。

如何留下作品的名?

如果你使用(或依赖)了第三方作品,要在NOTICE和LICENSE中说明。

NOTICE文件是专门干这事的。

对于ASF的项目,一般都会有NOTICE文件,但非ASF项目,用的就不太多,即便是使用Apache许可证的。

下面是Kafka项目的NOTICE文件,属于比较标准的ASF项目写法。除了致敬所用到的ASF作品外,Kafka特意对jersey做了归功(以下为NOTICE全文)。

在下面这个非ASF项目Hangfire7中,其NOTICE文件也很规范,文字表述非常详尽,值得学习(以下为文件首部)。

关于LICENSE文件,除了放本项目的许可证,还应放上所用其他项目的许可证。下面以Apache Kylin项目为例看一下,Kylin使用了一些其他作品(它称为子部件,subcomponent),这些作品使用的许可证在LICENSE文件中作了说明:

注意上面的截图,是从207行开始的,上面的200多行,就是Apache许可证全文,然后是他所用到子部件的许可证。

如果用到的作品比较多,也可以专门建一个licenses目录做这件事,go-chassis就是这样做的。

为了很好地对贡献者和第三方作品致敬,有的项目还会在网站上予以展示:

比如selenium项目8就密密麻麻地列出了贡献者的名字和头像,看上去颇为壮观。

以下仅仅为部分节选,有兴趣的话可以去其网站观摩一下。

总之,尽可能尊重贡献者和你用到的作品,充分地给予他们荣誉。这是开源人应有的礼仪。

七、关于“再许可”的迷思

为了更好理解Apache许可证,现在看一个我虚构出来的测试案例。

Alice有一个作品A,用Apache许可证发布,里面只有一个foo.c,文件的内容可概括为:

版权 年份 Alice

Apache许可信息

源码

作品还带了一个LICENSE和NOTICE。LICENSE里面就是Apache许可证全文。NOTICE里声明了Alice对A的版权所有(也即对自己归功)。

现在Bob复制了作品A,把foo.c略微修改了一下,改为:

版权 年份 Alice

“各位注意:我修改了许可信息,从Apache改为了MIT”

MIT许可信息

源码(未做实质性改动)

Bob原样保留NOTICE,在LICENSE中放了两个许可证:MIT许可证、Apache许可证。

Bob将这个作品命名为B,然后开始分发B。

这样,Bob从实质上把A从Apache许可证转成了MIT许可证这意味着用B的人无需遵守Apache协议了,我们知道,MIT协议比Apache更宽松,现在,用B的人连修改哪了都不用说了。 

Alice发现这个情况,说,“你这算什么啊,还有你这种骚操作?”

Bob说,“我怎么了,我违反哪一条了?”

从行为上看,B保留了A的版权信息,保留了许可证信息,声明了修改,保留了归属信息。这一切都遵循了Apach许可证的条款和条件。

Alice翻遍许可证,犀利地指出:

“根据第4节第5条,你只能对你修改的部分修改许可。”

Bob说:“那条还说了,我可以对整个衍生作品修改许可!”

Alice又翻了翻许可证,再次犀利地指出:

“根据第1节对衍生作品的定义,你这不是衍生作品!因为你没有原创性!”

Bob:“……”

Bob翻了翻许可证,说:“好吧,我这不是衍生作品,但我确实有权利修改这个文件,而且我对我修改的部分做了声明,我还保留了你的版权和归属,我的所有操作都没有违反Apache许可证要求。”

Alice:“……”

你怎么看呢。

也许ASF是允许这种情况的,具体要看ASF如何解释Apache许可证了。

为了遏制这种情况,A应该将自己的版权、仓库地址、License都放在NOTICE文件中。

这样,即便一个人拿到B,他也会知道B其实就是A,A的原License是什么,源代码在哪里。这个人可能会更倾向于直接使用A,毕竟A更正宗。

-END-


  1. https://www.kaggle.com/mrisdal/safely-analyzing-github-projects-popular-licenses 

  2. https://mp.weixin.qq.com/s/ipvkZYp_z8173-Q0SPCmDQ 

  3. Jeffrey Robert Kaufman: https://opensource.com/article/18/2/how-make-sense-apache-2-patent-license 

  4. 薛亮:如何理解Apache 2.0许可证中的专利许可条款?https://linux.cn/article-9402-1.html

  5. http://www.apache.org/foundation/license-faq.html#PatentScope 

  6. https://opensource.stackexchange.com/questions/5508/what-does-and-contributors-in-the-copyright-byline-imply 

  7. https://www.hangfire.io/licensing/third-party.html 

  8. https://www.selenium.dev/documentation/en/front_matter/copyright_and_attributions/ 

推荐阅读

TIOBE 5月榜单:时隔五年,C语言重返第一

微软开源MsQuic,QUIC的跨平台实现

上游开源项目闭源,相关仓库被GitHub要求下架

从Copyright到Copyleft,聊聊版权与开源协议

Redis 6.0.0 GA

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存