编者按: 在很多人眼中, 「开源」是一个时髦且有情怀的词汇, 始终伴随有理想主义色彩, 因此不少公司开始给自己贴上"开源"标签。但一个优秀的开源项目远远不止是简单的公开源代码, 而是需要将其当作公司战略进行贯彻, 才能架设起牢不可破的信任桥梁。 PingCAP 从第一行代码开源, 六年里积累了一些经验和教训, 在《开源知识科普》栏目中, 我们将与大家分享和交流在开源成长路径中的思考和感受, 以及参与开源项目的正确姿势。本期话题就从开源的基础——开源许可证开始, 希望对大家了解开源、参与开源有一定帮助。
近年来, 开源正在变得越来越火, 我们经常会看到 “某企业宣布开源”、“某开源大会召开”、“某开源项目获得融资”。个人开发者与企业比以往任何时候都更愿意参与到开源项目的建设和贡献中, 开源在国内 IT 领域获得了前所未有的热度, 也获得了产业界和投资圈的广泛关注。
但总有些人听到开源一词时, 就会误以为 “开源软件是免费的, 因此我可以不受限制地随意使用”。在开源诞生之初, 自由软件是当时的主流提法, 回顾开源的发展史, 从自由软件到开源运动实现了非常大的跨越, 前者更多的是一种精神的倡导, 而后者着眼于软件的协同开放, 因此会有非常严谨的开源许可证的规则和限制。开源软件能走到今天的发展程度, 就是因为有了这么一套遵从开源精神的规则体系, 才能够健康发展。开源精神的载体之一就是开源许可证, 今天我们就来扒一扒开源许可证与开源的关系, 以及它背后折射出的问题。
首先需要明确的是, 开源软件源代码的著作权既没有被放弃也没有过期, 其修改和发行等仍然要受到著作权法或者开源软件许可证的制约。
我们接触到的开源软件一般都有对应的开源许可证(Open Source License)对软件的使用、复制、修改和再发布等进行限制。许可证即授权条款, 开源许可证就是保证开源软件这些限制的法律文件, 目的在于规范受著作权保护的软件的使用或者分发行为。开源许可证是开源软件生态系统的基础, 可以促进软件的协同开发。
常见的开源许可证主要有 Apache、MIT、BSD、GPL、LGPL、MPL、SSPL 等, 可以大致分为两大类: 宽松自由软件许可协议(“Permissive free software licence”)和著佐权许可证(“copyleft license”)。
Permissive free software licence 是一种对软件的使用、修改、传播等方式采用最低限制的自由软件许可协议条款类型。这种类型的软件许可协议将不保证原作品的派生作品会继续保持与原作品完全相同的相关限制条件, 从而为原作品的自由使用、修改和传播等提供更大的空间。
而 Copyleft License 是在有限空间内的自由使用、修改和传播, 且不得违背原作品的限制条款。如果一款软件使用 Copyleft 类型许可协议规定软件不得用于商业目的, 且不得闭源, 那么后续的衍生子软件也必须得遵循该条款。
两者最大的差别在于: 在软件被修改并再发行时, Copyleft License 仍然强制要求公开源代码(衍生软件需要开源), 而 Permissive free software licence 不要求公开源代码(衍生软件可以变为专有软件)。
其中, Apache、MIT、BSD 都是宽松许可证, GPL 是典型的强著佐权(copyleft )许可证, LGPL、MPL 是弱著佐权(copyleft )许可证。SSPL 则是近年来 MongoDB 创建的一个新许可证, 存在较大争议, 开放源代码促进会 OSI 甚至认为 SSPL 就不是开源许可协议。
此外, 还有一类是 Creative Commons(CC)知识共享协议。严格意义上说该协议并不能说是真正的开源协议, 它们大多是被使用于设计类的工程上。CC 协议种类繁多, 每一种都授权特定的权利。大多数的比较严格的 CC 协议会声明 “署名权, 非商业用途, 禁止衍生” 条款, 这意味着你可以自由的分享这个作品, 但你不能改变它和对其收费, 而且必须声明作品的归属。这个许可协议非常的有用, 它可以让你的作品传播出去, 但又可以对作品的使用保留部分或完全的控制。最少限制的 CC 协议类型当属 “署名” 协议, 这意味着只要人们能维护你的名誉, 他们对你的作品怎么使用都行。
来源: https://moqod.com/mobile-web-software-development/
可以看出, 不同许可证之间的差异非常大, 你可能会困惑, 搞得这么复杂的目的是什么呢? 这就不得不从开源的历史讲起了。
开源这个词最初其实是指开源软件(OSS)。开源软件是源代码可以任意获取的计算机软件, 任何人都能查看、修改和分发他们认为合适的代码。在开源领域中, 存在着两大阵营: FSF(Free Software Foundation, 自由软件基金会) 和 OSI(Open Source Initiative, 开放源代码促进会), 他们对开源有着不同的理念。
FSF 是开源泰斗 RMS 创立的重要的开源软件基金会 (1985/10/04), FSF 创立之初主要是为了筹集资金来建设 GNU 的内核 Hurd 项目及工具链, 虽然 GNU 项目本身没有完成, 但是该过程中创造出的大量软件工具, 日后成为了 GNU/Linux 的重要组成部分。为了贯彻 RMS 对 “自由” 和 “开源” 的理解, FSF 建立了开源领域的第一个 “copyleft” 属性的许可证 - GPL (GNU Public License) 。
OSI 由开源界泰斗 Bruce Perens 和 Eric S. Raymond (ESR) 在 1998 年组建, 目的是在原教旨主义开源 (最早的开源运动发起和推动者们) 与软件工业/商业之间激烈矛盾中, 寻求更平衡的体系和治理机制。OSI 组织批准过的许可大概有 80 种, 包括 Apache License v2、GPL v2、MIT/BSD 等。
FSF 与 OSI 是推广和维护开源秩序的非盈利组织, 维护着 “开源” 的定义以及主要的开源软件协议递交、讨论与审核。只要条款被审核通过是符合开放源代码定义的, 就可以称之为开放源码授权条款, 采用开放源码条款散布授权的软件即是开放源码软件, 若一份商业产品中包含有开放源码软件, 其包装上可以标上开放源码促进会的证明标章, 认识这个标章的消费者就可以知道产品中有使用到开放源码软件, 进而因为开放源码软件特有的优点而购买产品。
下面, 我们通过一张表来简单了解一下常见开源许可证之间的区别:
来源: https://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html
其中, Apache 许可证(Apache License)license 是一个由 Apache 软件基金会发布的自由软件许可证, 最初为 Apache http 服务器而撰写。此许可证最新版本为 “版本 2”, 于 2004 年 1 月发布。Apache 许可证鼓励代码共享和最终原作者的著作权, 允许源代码修改和再发布。但是需要遵循以下条件:
作为从第一天就以开源作为发展基础的开源基础软件公司, PingCAP 鲜明地反对一些在开源软件领域 “违背开源精神, 破坏游戏规则” 的行为。
PingCAP 目前开源的项目包含 TiDB、TiKV 及 Chaos Mesh, 都是基于 Apache 2.0 的协议来开发和运营的, 任何个人、公司、云厂商, 只要不违反 Apache 2.0 协议的相关规定, 都可以自由地去下载、研读、改写、编译原代码, 甚至可以发行自己的发行版, 进行相应的商业活动。
PingCAP 在设计这个公司的时候, 就在为开源做持续贡献的设计作准备, 比如在开源治理体系上, 我们认为自己就是开源技术体系的一部分, 并设有专门的团队持续运营开源社区。
在开源技术体系中, 开源社区是整个新技术创新的上游源头, 也是创新技术的孵化器。开源社区不断推动各种开源项目, 并通过全球协作实现产品的快速迭代。通过这种源头创新的方式, 可以不断把创新技术通过全球社区协作的方式 “生产” 出来, 开源社区实际上已经变成了新技术的创新引擎。
在刚刚发布的《开源社区成熟度研究报告》 2.0 中, TiDB 社区被作为开源社区运营和治理实践典范作为研究对象, 探索开源社区的健康可持续发展。报告中还首次提出了开源社区成熟度模型与开源社区度量体系, 对开源感兴趣的同学可以 点此查看 。
作为开源生态的一员, 我们欢迎任何人参与到开源事业中, 共同繁荣开源领域, 开源今天的局面来之不易, 需要所有参与其中的人共同维护, 敬畏游戏规则, 遵从开源精神, 才能创造开源的美好明天。