开源项目所说的 CLA 是什么?

自从 ohUrlShortener 短链接系统宣布开源并正式对外发布之后,陆续收到不少朋友问询:有的朋友提了功能需求、有的朋友表示愿意参与共建。本周早些时候,通过某位热心朋友贡献,迎来了第一个 Pull Request 补充了某项功能短缺。

在处理这个 Pull Request 之前,我正在考虑关于 CLA 的事情,并着手开始编写相关内容。没想到适用场景,出现的如此之快。那么,今天就来跟大家说说,开源项目所说的 CLA 到底是什么。

Contributor License Agreement

CLA 的全称是 Contributor License Agreement ,亦即「贡献者许可协议」。它主要是开源项目与贡献者之间的一些约定。在这样的一份协议中,开源项目(管理者或贡献的接受者)与贡献方之间,需要通过协议的方式做一定的约定,区分双方的权力和义务等。比如,ohUrlShortener 项目的 CLA 协议内容如下:

 1首先,ohUrlShortener 感谢您的支持和贡献,并向您表达崇高的敬意。
 2
 3本贡献者协议(以下简称“本协议”)由您与 ohUrlShortener 签署。您通过签署本协议同意接受本协议并受其约束。您基于本协议授予 ohUrlShortener 的权利自您首次向 ohUrlShortener “贡献” 之日起生效(其中包括您在同意本协议条款和相应条件之前已提交“贡献”的情况在内)。
 4
 5您同意如下条款:
 6
 7一、定义 
 8
 91. “您” 系指与 ohUrlShortener 签订本协议的著作权人、或经授权人授权的自然人或法人单位、组织等。
10
112. “贡献” 系指有您自愿提交并且被并入或存档于 ohUrlShortener 之中的代码、文案的或其他原创作品以及任何对现有作品进行修改或补充的原创作品(以下简称“作品”)。本条款定义的“提交”系指以电子、口头或书面交流任意形式发送给 ohUrlShortener 接受者的内容。
12
13二、著作权许可授权
14
15您基于本协议,特此就您(不论以源代码或目标代码形式)提交的“贡献” 永久的、全球性的、非独占的、免费的、免授权费的、不可撤销的、无附加限制的著作权授予 ohUrlShortener 的接受者。ohUrlShortener 的接受者可以复制、修改、开发衍生作品、公开展示、公开表演、再许可和分发您的“贡献”和相关衍生作品。
16
17三、专利权许可授权
18您基于本协议,您特此授予 ohUrlShortener 的接收者永久的、全球性的、非独占的、免费的、免授权费的、不可撤销的(本条款下述情形除外)专利许可,以制造、委托制造、使用、许诺销售、销售、进口和以其他方式转让其“贡献”。如果任何实体针对您或其他实体提起专利诉讼(包括诉讼中的交叉诉讼或反诉),指控您“贡献”或前述结合构成直接或间接专利侵权,则您根据本协议就该“贡献”或“作品”授予该实体的所有专利许可自该实体提起该诉讼之日起终止。
19
20四、如您拟提交非原创作品,您可以将该部分内容与您“贡献”进行区分后提交 ohUrlShortener,并根据您所知标识该部分内容的来源以及任何许可或其他限制的完整细节(包括但不限于相关专利、商标和许可协议)内容,并以显著方式注明“代第三方提交:[此处注明第三方名称]”
21
22五、除非您自愿,否则您无需为您“贡献”提供支持服务。即您既可以选择不提供支持服务,也可以选择免费或收费提供支持服务。除非适用的法律要求或经书面同意,您提供“贡献”仅是“按原样”提供,不附带任何明示或默示担保及条件(包括但不限于任何权利担保、非侵权保证,适销性保证、适用性保证或条件)
23
24六、除本协议明确约定外,您在提交“贡献”时无任何明示或默示担保。无论基于何种法律理论(即使已告知可能有此类损害赔偿),您不对任何因使用您所提交的“贡献”或前述结合而引发的(无论何种原因所致)直接或间接损害承担责任。
25
26七、您同意,在遇到任何将导致本协议项下承诺不准确的事实或情况时将及时通知 ohUrlShortener 接受者。
27
28八、本协议(含通过引用并入本协议的所有文件),构成缔约方之间就本协议议题的完整且排他性协议,废止并替代针对此议题任何或所有之前或同期的书面或口头讨论、谈判、备忘录和其它协议。
29
30签名:

通过上述的协议内容能够看出,一般情况下 CLA 的核心大致是:

  1. 约定协议签署人的身份及「贡献」的含义
  2. 约定「贡献」产生之后,「接受者」获得了不可撤销的、免费的、全球性的、非独占的、免授权费的使用权
  3. 约定「贡献」中如果存在专利的话,「接受者」获得了免费的、不可撤销的、免授权费用的、全球性的、非独占的使用权
  4. 约定「贡献」的版权属于贡献者(贡献者仍然要在源代码中加入自己的注释内容,留下姓名和版权信息等)

也就是说,某组织或个人想要为开源项目「贡献」的话,要首先授予「接受者」能够免费使用该贡献的权力,而且不可撤销;如果贡献中含有贡献方的专利,也同样授予「接受者」能够免费使用该专利的权力,且不可撤销。但同时,「接受者」的这些权力不会是独占的。

为了方便签署协议,有时候 CLA 也可以分为「个人版」和「企业版」来区分。个人版主要提供给个人开发者签署,就像 ohUrlShortener 上述协议内容一样。但是,假如某个企业或者组织需要签署的话,就没有必要与该企业名下的所有个人一一签署协议了。开源项目(接受者)一般情况下可以提供一个说明,直接与某公司签署协议(具体内容可以约定以某邮箱后缀来识别贡献者身份等),由公司维护白名单提交给开源项目,方便对贡献进行识别管理。

一定要有 CLA 才可以开源吗?

不一定。

但是,每个开源项目都应该有 CLA 提供给贡献者。

如果只是个人项目,把源代码开放出来给大家下载或者使用,并不打算也不在乎可能会有其他参与者,可以不考虑 CLA 相关问题。但是作为一个组织或者公司,为避免可能出现的纠纷(接下来我就会讲到),就应该提供清晰明确的 CLA 给贡献者,并在贡献之前确保贡献者知晓并资源签署。

签署 CLA 协议的过程,也有许多不同的办法:有的开源项目提供了专门用来签署 CLA 的在线系统,完成签署和身份确认。有的开源项目需要线下签订纸质的协议并签字盖章等。而我这样的个人开发者,迫于繁琐的流程,尽力简化了这方面的要求,只需要贡献者在第一次提交 Pull Request 时,在其中说明愿意签署并附上链接即可。

CLA 并不能免除所有纠纷

来说说 CLA 不好的方面,听听反对的一方怎么说。

世界上大多数开源项目都有 CLA 协议内容,但这不能算是一种标准,而且这些年来也不乏各种反对的声音,也有一种声音认为 CLA 将会彻底终结开放开源的精神。以下两个事件是业界发生过较有趣的事件:

  1. 2019 年 MongoDB 宣布将其开放协议由 GNU AGPLv3 迁移到 Server Side Public License 协议
  2. 2021 年 Elasticsearch 宣布将其开放协议由 Apache License 2.0 迁移到 Server Side Public License

站在开源项目的角度看:开源项目免费向大家开放,促使很多云厂商以此基础改造升级,将其转变成云服务并获取了巨额利润。更为重要的是,这些云厂商没有回馈社区成为贡献者。感觉开源项目被白 P 了。为了逼迫这些云厂商回馈开源项目,MongoDB 和 Elasticsearch 纷纷选择转向 SSPL 协议,其主要目的就是为了让云厂商能够将改动的部分回馈给开源项目。

站在开源项目的贡献方而言,签署了 CLA 协议将贡献提交给开源项目之后,开源项目惊人说变就变,甚至连开放协议都改掉了。捐献方的内心独白很可能是:我捐给你代码的时候,你是个 A,而现在你却是个 B,也不跟我打招呼,太尼玛过分了吧!那敢情,我跟你签署的 CLA 就是一张废纸?

不知道正在阅读本文的你,会怎么想。

除了 CLA 还有 DCO

CLA 是需要贡献者与开源项目接受者之间签署的法律条文,双方需要同时尊重和遵守,并且一定需要有「签署」这个过程才可以。如果不提供 CLA 的话,还有更简便的约定吗?

答应是肯定的,那就是 DCO。

DCO 的全称是 Developer Certificate of Origin ,开发者溯源认证。它是 2004 年由 Linux 基金会发起并维护的。其内容相当简单:

 1Developer Certificate of Origin
 2Version 1.1
 3
 4Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
 5
 6Everyone is permitted to copy and distribute verbatim copies of this
 7license document, but changing it is not allowed.
 8
 9
10Developer's Certificate of Origin 1.1
11
12By making a contribution to this project, I certify that:
13
14(a) The contribution was created in whole or in part by me and I
15    have the right to submit it under the open source license
16    indicated in the file; or
17
18(b) The contribution is based upon previous work that, to the best
19    of my knowledge, is covered under an appropriate open source
20    license and I have the right under that license to submit that
21    work with modifications, whether created in whole or in part
22    by me, under the same open source license (unless I am
23    permitted to submit under a different license), as indicated
24    in the file; or
25
26(c) The contribution was provided directly to me by some other
27    person who certified (a), (b) or (c) and I have not modified
28    it.
29
30(d) I understand and agree that this project and the contribution
31    are public and that a record of the contribution (including all
32    personal information I submit with it, including my sign-off) is
33    maintained indefinitely and may be redistributed consistent with
34    this project or the open source license(s) involved.

借鉴某位网友的翻译了解下大致内容:

  1. 该贡献全部或部分由我创建,我有权根据文件中指明的开源许可提交;要么
  2. 该贡献是基于以前的工作,这些工作属于适当的开源许可,无论这些工作全部还是部分由我完成,我有权根据相同的开源许可证(除非我被允许根据不同的许可证提交)提交修改后的工作;要么
  3. 该贡献由 1、2、或 3 证明的其他人直接提供给我,而我没有对其进行修改
  4. 我理解并同意该项目和贡献是公开的,并且该贡献的记录(包括我随之提交的所有个人信息,包括我的签字)将无限期保留,并且可以与本项目或涉及的开源许可证保持一致或者重新分配 引用自 https://jimmysong.io/blog/open-source-cla/

可见,跟 CLA 那种正式的法律条文相比,DCO 实在是太简单了。甚至在使用 git 提交代码的时候,只需要附加一个 -s 参数即可完成签署过程。感兴趣的同学,可以把上述的 DCO 内容和 ohUrlShortener 提供的 CLA 内容做一个比较,然后来说说差别点在哪里吧!

ohUrlShortener 适合中小型社区网站使用的短链接服务系统,支持短链接生产、查询及 302 转向,并自带点击量统计、独立 IP 数统计、访问日志查询和下载等功能。

代码完全开放,欢迎感兴趣的朋友参与共建:

  1. https://github.com/barats/ohUrlShortener
  2. https://gitee.com/barat/ohurlshortener

开源,我们不孤独。

版权声明:本站所有内容,未经书面授权禁止一切形式的转载、摘录及摘抄,违者依法追究其相关责任。

相关文章