在云时代,我们该如何看待新的开源许可证?

目录

    • 1、前言
    • 2、MongoDB与SSPL
    • 3、AGPL与SSPL许可证
    • 4、OSI Certified许可证
    • 5、背景总述


声明:
本文主要参考文章:https://www.infoq.cn/article/wXlSfiyvUUyxCcT4UZTQ
尊重原创,如有侵权,请联系删除

1、前言


开源许可证从最早的GPL开始, 逐渐演进到GPLv2和v3,中间还有Apache、MPL、AGPL、LGPL等,但是近几年来有一批新的许可证的出现,引起了社区的一些激烈的讨论。这些新的许可证包括BSL、SSPL、Elastic以及一个比较特殊的附加条款Commons Clause

社区内从争论的角度主要分为两大阵营:原教旨主义和实用主义

原教旨主义的同学们认为只有遵从1998年成立的Open Source Initiative(OSI)定义的10大原则,通过OSI这个组织审核认证过的(OSI-Certified),才可以称之为开源的许可证。实用主义则从开源本身的目的出发,认为在源代码开放,绝大部分的社区开发者在使用或者贡献时不受影响的情况下,不必纠结于字面的定义如何,对社区有益即可

按照OSI的开源许可证规则,目前使用SSPL的MongoDB,使用Elastic License V2的Elastic Search、Airbyte,使用BSL的CockroachDB, 以及附加了Common Clause的Redis,这些大名鼎鼎的开源软件,都不能称之为“开源软件”了

那么问题来了?如果因为上面的原因,这些软件不被认为是开源了,是Proprietary软件了,难道我们真的叫这些我们已经一直在免费使用,并且可以持续使用很好的软件为“闭源软件”或者“商业软件”?好像也不太对,“源代码可用”,略微绕口了一点

让我们先从以SSPL为代表的新一代开源软件厂商MongoDB和OSI的角度分别来看一下这个问题两个对立面的一些底层逻辑

2、MongoDB与SSPL


2018年11月,MongoDB宣布将其开源授权修改为SSPL(Server Side Public License,服务器端公共许可证)

为什么MongoDB要修改开源许可证呢?

2007年,MongoDB公司的前身10gen正式成立。2009年2月开源数据库MongoDB 1.0正式问世,以开源的方式进入市场接受考验。MongoDB产品主要分为企业版和社区开源版,2014年下半年,MongoDB开始进军全球,正式在中国落地商业化。2016年之前,MongoDB云产品Atlas还在研发中,MongoDB的主要商业化手段是企业版

2016年,MongoDB正式发布了Atlas产品,一个在公有云(AWS、Azure和GCP)上的托管数据库服务。发布不久,Atlas云产品就很快得到了开发者的青睐。虽然成本不是太低,但毕竟是开箱即用。省了约0.50个DBA 的费用。MongoDB Atlas上线后呈现了较快的增速,在2017年上市的时候,已经成为MongoDB增长最快的业务了

反观国内,某公有云其实也在2016年比MongoDB原厂Atlas更早的时间,推出了云上的MongoDB as a Service,还是用的MongoDB基于AGPL的社区开源版。 当时的中国市场,企业版的销售其实是举步维艰,企业版的售卖逻辑是提供了额外的价值,主要包括原厂技术支持和一套独立的额外集群管理工具(监控、备份等),MongoDB数据库能力都是一样的和开源版相比。但是在软件获取成本上,一个是0元/年,一个是数十万元/年。在10万元就能请一个工程师的中国企业市场,可想而知企业的付费意愿度有多高

除了国内,俄罗斯的一些头部云厂商也开始在他们的云上推出了MongoDB as a Service,也都基于免费的MongoDB社区开源版。在此过程中,云厂商为了能够更好地将一个产品融入到他们统一的云平台,提供一些额外的能力支撑,例如动手解决一些产品的Bug来满足SLA(Service-Level Agreement,服务等级协议,是服务提供商与客户之间定义的正式承诺),这势必会对源码做许多修改。在这个时候,MongoDB发现,某些云厂商并没有完全按照AGPL协议规范,将所有这些改动如数开源

云厂商的实际做法往往是如此,首先公开Fork某个MongoDB的上游版本,然后在这个Fork里面象征性地提交一些更新,推到GitHub。实际上大量的开发会在一个Private Fork上进行,不会推送到公开的Fork上面,更别说回溯到上游了。 从MongoDB的角度,当发现这些AGPL协议并没有在这些云厂商得到很好的合规执行的迹象的时候,就试图从商业化上和云厂商进行沟通,希望对方要么是按照行业的规矩公布代码,要么就达成商业化合作

经过多次协商,动用到各自的Legal Team以后,MongoDB发现面临的问题是——商业化合作,双方期望值相差太大,一个想吃肉,一个只愿意给肉汤。开源合规方面,云厂商指着那个基本不怎么更新的Repo说我们已经按照协议开源了。只有到诉讼公堂,才可以去内部取证。怎么办?类似的案子,没有先例,再在一个完全陌生的国家去走这条路,听上去就非常坎坷。可是云服务又几乎是所有新一代开源软件公司最主要的收入增长引擎,实在又无法听之任之

于是MongoDB选择了釜底抽薪,修改许可证

3、AGPL与SSPL许可证


在改协议之前,MongoDB主要采用的是AGPL许可证。这是OSI Certified的,一致认可的标准开源许可证类型。为了应对在云厂商这里碰到的困难,MongoDB在基于AGPL协议之上,增加了一个补充条款(解释版,非官方文字):

第 13 条: 如果你用这个软件来直接在公有云上以“xxx as a Service" 的服务方式售卖这个软件本身,那么你需要将所有相关的改动,包括支持这个软件使用的后台管理平台软件,都进行开源

所以,简单来说,SSPL就等于AGPL+第13条修改。理解这条修改的初衷、意图、影响范围,也就理解了SSPL的本质

  • 初衷:和云厂商在商业化利益上的博弈
  • 目的:防止使用开源软件直接获利,但是不遵循游戏规则的第三方
  • 影响范围:直接提供“开源软件 as a Service”的公有云厂商

在SSPL正式发布以后,直接效果是很明显的:云厂商们要么是下线,要么就和原厂达成商业化合作,获取特别的授权来继续提供MongoDB as a Service

当然,影响也是极其深远的——对开源界造成了巨大的动荡。针对于使用SSPL以及后来的Elastic License V2这些新的许可证的软件,是否可以被称之为“开源软件”的争议一时间充斥了技术社交网络。不少极端的观点认为如果接受这样的开源方式,开源将逐渐灭亡。亦有观点认为采用这样的”Quasi-开源“许可证肯定会引发社区极大反弹,要不了几年这些公司就会陨落

4、OSI Certified许可证


OSI(Open System Interconnect)是一个国际标准化组织,是一个旨在推动开源软件发展并维护开源标准的非盈利组织

那么,一个软件怎么才能说它是开源呢?开源到底如何定义?

当我们说一个软件是否可以被称之为“开源软件”时,严谨的说法应该是这个软件如果使用了某一个OSI Certified许可证,那么可以称之为“开源软件”。反之如果使用的许可证不在OSI Certified列表里,那么这个软件可能就不应该被称之为“开源软件”

OSI Certified许可证常见的有这些:MIT、BSD、Apache、MPL、GPL、LGPL、AGPL等

值得注意的是,这种定义更多是一个社区的自我约束,并不具有法律意义上的约束。按照OSI自己的说法,“开源”这个词并不是个注册商标,所以理论上谁都可以使用,你无法使用法律手段来禁止某个软件自称“开源软件”,哪怕它并没有获得OSI的认可

但是,我们都是在一个生态里面。这个生态就是有各种成员组成。 在这里,在法律管辖范围之外,更多的是行业的一些约定俗成和标准化组织。OSI就是一个为鼓励促进开源软件的蓬勃发展而成立的组织。 试想一下,如果没有OSI通过严格的流程来审核许可证,界定软件的安全使用范围,提供权威的解释,那么市场上的许可证可能会是形形色色,五花八门。对于开源社区绝大多数的成员,开源软件的使用者,来说,这将是个巨大的认知和风险成本。如果你用了一个不知名的许可证,也没有请律师仔细审核,只是因为代码可以用就集成到你的产品里来,等你小有成功的那一天,没准就是你收到对方律师信的一天

不说其他,就从这一点上看,我们需要OSI这样的组织,以及OSI Certified许可证机制。这不是限制,目的是帮助社区用户移除隐性的开源软件使用风险,为了保护开源社区更好的发展

这也是为什么MongoDB在宣布了SSPL以后,MongoDB的CTO Elliot向OSI提交了SSPL认证申请,希望OSI审核通过,将SSPL列为Certified许可证。但是后来MongoDB很快就收回了申请,原因是OSI在开始正式审核流程之前,已经在社交媒体上预判了SSPL的死刑,MongoDB认为在这样的情况下是无法保证一个比较公平的审核过程

我们来看下OSI 对现行开源许可证的认定原则。OSI认为,一个许可证是不是开源的属性,要看它是否符合(Open Source Definition,OSD)的10条要求:

  1. Free Redistribution - 分发自由

  2. Source Code - 可以获得源代码

  3. Derived Works - 允许衍生作品(以类似的许可证)

  4. Integrity of The Author’s Source Code - 原作者源码的完整性

  5. No Discrimination Against Persons or Groups - 不歧视个人或团体

  6. No Discrimination Against Fields of Endeavor - 不歧视任何领域

  7. Distribution of License - 许可的分发

  8. License Must Not Be Specific to a Product - 许可不能针对特定产品

  9. License Must Not Restrict Other Software - 许可证不能限制其他软件

  10. License Must Be Technology-Neutral - 不能以专门的技术或界面完成授权

OSD参考:https://opensource.org/osd

针对SSPL的批评,集中在第9条规则:许可证不能约束其他软件。而SSPL的条款,正是在开发者(公有云厂商)试图直接销售MongoDB as a Service(注意是销售数据库服务本身,而不是衍生服务)的时候会触发对开发者的其他软件(云管理平台软件)的限制

所以如果按照现有的约定俗成,SSPL/Elastic这样的许可证,确实是不满足OSI的开源标准。所有MongoDB、Elastic等确实在尊重这个社区共识,不直接称呼自己为开源,而是“源码可用”

最后我引用Thomas Kurian(Google Cloud CEO)对开源软件的态度,来佐证在云时代,我们需要的是一个共同发展的生态,而不是因为云厂商的非对称竞争优势导致那些For-Profit开源软件无法生存的结局:

我们坚信最终能够胜利的是那些提供生态而不是扼杀生态的平台(云厂商)…为了能够让这些开源软件公司能够可持续地生存和发展,他们需要一个有效的商业化手段。如果云厂商利用开源协议攻击这些开源公司,让这些公司无以为继,那这最终会让开源社区变得更加糟糕

5、背景总述


计算机技术进入云时代后,一些云服务提供商将开源产品打包成云服务来获利,挣的盆满钵满,但不反哺开源社区,导致开源社区无法生存,生存状况日益严峻

开源社区遭受了云厂商的残酷竞争,从商标被滥用,到公然重新包装开源软件产品,甚至从专有代码中获取灵感,以上种种行为都是在挑战开源社区的生存底线

开源社区不得不通过修改开源许可证,以保护他们在自由软件上的投资,同时努力维护开放、透明和协作的原则


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript/python 笔记: folium feature group自动切换

1 python部分 python部分只能是静态的结果 1.1 导入库 import folium import math 1.2 数据 cell_lst表示基站位置,location_lst表示 用户实际位置(均为伪数据) cell_lst[[1.341505, 103.682498],[1.342751, 103.679604],[1.341505, 10…

YCSB and TPC-C on MySQL(避免重复load)

一、编译安装MySQL 下载mysql5.7.28源码 https://downloads.mysql.com/archives/community/ Select Operating System 选择 Source Code Select OS version 选择 All Operating Systems 选择带有boost的版本 安装系统包 apt -y install make cmake gcc g perl bison libai…

虹科分享 | 赋能物流机器人:CANopen通信如何发挥重要作用?

现代物流领域迅速融入了技术进步,特别是随着自主机器人的兴起,这一趋势越发明显。确保这些机器人在复杂的仓库环境中精确运行的一个关键方面是CANopen通信协议。该协议集成了各种组件(电机、传感器、摄像头和先进的电池系统)&…

vue视频直接播放rtsp流;vue视频延迟问题解决;webRTC占cpu太大卡死问题解决;解决webRTC播放卡花屏问题:

播放多个视频 <div class"video-box"><div class"video"><iframe style"width:100%;height:100%;" name"ddddd" id"iframes" scrolling"auto" :src"videoLeftUrl"></iframe>&l…

MySQL数据库操作(创建、修改、删除、查询)

MySQL查看或显示数据库&#xff08;SHOW DATABASES语句&#xff09; 在 MySQL 中&#xff0c;可使用 SHOW DATABASES 语句来查看或显示当前用户权限范围以内的数据库。查看数据库的语法格式为&#xff1a; SHOW DATABASES [LIKE ‘数据库名’]; 语法说明如下&#xff1a; 语法…

轴承寿命相关细节的研究

数据集PHM2012 介绍一下IEEE PHM2012数据集_phm2012轴承数据集-CSDN博客 标签如何设置的? 剩余寿命预测的标签设置_rul 标签_兔子牙丫丫的博客-CSDN博客 参考自刘硕师兄的毕业答辩PPT 图 4.9 训练数据的切分方法 数据段的重叠切分&#xff0c;不仅可以覆盖更多的标签数据…

任务调度框架-如何实现定时任务+RabbitMQ事务+手动ACK

任务调度框架 Java中如何实现定时任务&#xff1f; 比如&#xff1a; 1.每天早上6点定时执行 2.每月最后一个工作日&#xff0c;考勤统计 3.每个月25号信用卡还款 4.会员生日祝福 5.每隔3秒&#xff0c;自动提醒 10分钟的超时订单的自动取消&#xff0c;每隔30秒或1分钟查询…

golang 在 Mac、Linux、Window 下交叉编译

目录 交叉编译参数说明CGO_ENABLEDGOOS : 目标操作系统【darwin、linux、windows】GOARCH &#xff1a;目标架构【386、amd64、arm】 Mac 下编译&#xff0c;Linux / Windows 下执行Linux 下编译&#xff0c;Mac / Windows 下执行Windows 下编译&#xff0c;Mac / Linux 下执行…

Redis在分布式场景下的应用

分布式缓存 缓存的基本作用是在高并发场景下对应服务的保护缓冲 – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; redis由于高强度性能采用内存 但是意味着丢失的风险单结点redis并发能力有限分布式服务中数据过多 依赖内存的redis 明显单机不…

WuThreat身份安全云-TVD每日漏洞情报-2023-10-18

漏洞名称:致远 OA XML 外部实体注入漏洞 漏洞级别:高危 漏洞编号:NULL 相关涉及:V5/G6 V6.0及以上全系列版本 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-26027 漏洞名称:XNSOFT NCONVERT 图像文件缓冲区溢出 漏洞级别:中危 漏洞编号:CVE-…

行为型模式-迭代器模式

迭代器模式是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素&#xff0c;不需要知道集合对象的底层表示。 意图&#xff1a;提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。 主要解决&#xff1a;不同的方式…

微信小程序自定义组件及投票管理与个人中心界面搭建

14天阅读挑战赛 人生本来就没定义&#xff0c;任何的价值都是自己赋予。 目录 一、自定义tabs组件 1.1 创建自定义组件 1.2 tabs.wxml 编写组件界面 1.3 tabs.wxss 设计样式 1.4 tabs.js 定义组件的属性及事件 二、自定义组件使用 2.1 引用组件 2.2 编写会议界面内容 …

DTI综述(更新中)

Deep Learning for drug repurposing&#xff1a;methods&#xff0c;datasets&#xff0c;and applications 综述读完&#xff0c;觉得少了点东西&#xff0c;自己写个DTI综述 Databases(包括但不限于文章中的) DATABASEDESCRIBEBindingDB有详细的drug信息和对应的target&a…

LeetCode 面试题 10.09. 排序矩阵查找

文章目录 一、题目二、C# 题解 一、题目 给定MN矩阵&#xff0c;每一行、每一列都按升序排列&#xff0c;请编写代码找出某元素。 示例: 现有矩阵 matrix 如下&#xff1a; [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, …

推荐《中华小当家》

《中华小当家&#xff01;》 [1] 是日本漫画家小川悦司创作的漫画。该作品于1995年至1999年在日本周刊少年Magazine上连载。作品亦改编为同名电视动画&#xff0c;并于1997年发行播出。 时隔20年推出续作《中华小当家&#xff01;极》&#xff0c;于2017年11月17日开始连载。…

android 13.0 禁止app启动(不显示app列表)和允许app运行

1.前言 在13.0产品开发中,在进行教育平板的定制开发中,可以有需求要实现禁止app启动和允许app运行的接口,禁用后app后已安装的应用从桌面消失,只存在于系统设置内的应用列表里,无法调用。启用后,恢复正常使用,在桌面显示。对于app管理的都是由PackageManager来负责的,P…

简单秒表设计仿真verilog跑表,源码/视频

名称&#xff1a;简单秒表设计仿真 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 秒表显示最低计时为10ms&#xff0c;最大为59:99&#xff0c;超出返回00&#xff1a;00 具有复位、启动、暂停三个按键 四个数码管分别显示4个时间数字。 演示…

LCR 177. 撞色搭配

LCR 177. 撞色搭配 LCR 177. 撞色搭配 迷你游戏之寻找两个单身狗 int* sockCollocation(int* sockets, int socketsSize, int* returnSize) {int* arr (int*)malloc(2 * sizeof(int));int ret 0;for (int i 0; i < socketsSize; i){ret ^ sockets[i];}int pos 0;for…

Maven 打包 jar、war 包配置

1、导出 jar 包配置 <build><finalName>weaver-customerservice-distribution-component</finalName><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></inc…

【七:docken+jenkens部署】

一&#xff1a;腾讯云轻量服务器docker部署Jenkins https://blog.csdn.net/qq_35402057/article/details/123589493 步骤1&#xff1a;查询jenkins版本&#xff1a;docker search jenkins步骤2&#xff1a;拉取jenkins镜像 docker pull jenkins/jenkins:lts步骤3&#xff1a;…