修改软件许可证使用时间_阮一峰:为什么开源数据库改变许可证?

CockroachDB 是一个开源的分布式数据库,最近改变了代码授权,放弃了 Apache 许可证。

许多开源数据库这一两年都改变了授权,比如 Confluent、Elastic 、MongoDB、Redis Labs、TimescaleDB。本文分析这种现象。

22ef024133510d2dfd89c47ba8a823bc.png

一、CockroachDB 的许可证变更

CockroachDB 以前的许可证是 Apache,代码托管在 GitHub,任何人都可以访问。

现在的许可证改成了”商业源码许可证”(Business Source License,缩写 BSL)。

824b6b962e4a59b0ee25b571684c94a0.png

这段文字的意思是,三年以后的2022年10月1日,这些代码将变为 Apache 许可证,在此之前都属于商业源码许可证。多少人想用三年前的代码?因此,它实际上用 BSL 许可证取代了 Apache 许可证。


二、商业源码许可证的特点

BSL 许可证是 MariaDB 发明的,最大的特点有两个。

一是非商业性使用没有限制,商业性使用有限制。

二是许可证是模块化的,可以附加自己的条件(Additional Use Grant)。

比如,MariaDB 附加的条件是,一个项目最多只能使用两个数据库服务器实例,超过就要付费。

246194cddbe6191f55191f0874c4ae62.png

CockroachDB 附加的条件是,对外提供商业性的数据库服务需要付费。

6df416112149fc887df927229a4ed420.png

简单说,商业源码许可证就是一种限制了云服务的开源许可证。


三、问题的由来

目前,许多开源数据库对云服务都有限制。这完全是由 Amazon 的 aws 云服务引起的。

aws 一直提供数据库服务,2009年推出 RDS MySQL 服务,2013年推出 PostgreSQL 服务,2015年推出 Amazon Elasticsearch 服务。大量企业购买这些服务,使得收入都向 Amazon 集中,它的 Elasticsearch 一个服务的收入已经高于原始开发商 Elastic 的所有收入。

这就相当于,开源开发者在为 Amazon 免费打工,为它创造利润。Elastic 当然很不爽,推出了付费版本。结果,Amazon 一不做二不休,把开源分支分叉了,自己把 Elastic 的所有收费功能写出来了。也就是说,Amazon 不仅拿走了利润,还创造出了一个竞争性产品。类似的情况还有,Azure 提供 MongoDB 兼容的 CosmosDB 服务。

其他开源数据库看到这种局面,都感到了云服务商的威胁,所以纷纷改变授权模式。

这里的根本问题是,云服务的出现改变了开源软件的生态。以前,开源软件有众多的使用者,会形成一个社区,从社区得到反馈和支持。现在,企业级开源软件很可能都有云服务,导致企业客户都流向了云服务商,软件自身形成不了社区,云服务商反过来会对软件产生巨大影响,许可证的变更只是抵抗云服务商的一种策略。

972b1dfa47c7e482d3d758336f8ebe8d.png

四、对策

目前,有三种变更许可证的策略。

第一种是采用 AGPL 许可证,任何对软件的修改(包括提供服务)都必须开源。这种策略的好处是防止云服务商对软件进行内部修改,坏处是不够灵活,可能打击企业采用该软件的积极性。

第二种是产品分层策略,同时提供免费的社区版和收费的企业版。这种策略可以保证收入,但是问题是,有些高级功能只在企业版提供,不利于软件的开源。

第三种就是 CockroachDB 的策略,软件依然开源,但是提供服务必须付费。我觉得,目前来看这种策略在开源和收费之间达到平衡,比较理想。

参考:

Cockroach and the Source Available Future, Stephen O’Grady

Why We’re Relicensing CockroachDB, Peter Mattis

Everything You Need to Know About the OSS Licensing War, Raj Dutt

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

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

相关文章

mysql数据库设计三大范式_数据库设计三大范式详解

引言数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,…

Broadcast简单使用

Activity Service之间的通信单用intent有时候还是不能满足要求,毕竟intent只能在启动一个activity的时候传一点消息过去 这个时候就用到广播了,至此,四大组件Activity Broadcast Service ContentProvider中终于用过三个了。。。当然目前只是…

线程 sleep 取消_C/C++ 多线程机制

一、C/C多线程操作说明C/C多线程基本操作如下: 1. 线程的建立结束 2. 线程的互斥和同步 3. 使用信号量控制线程 4. 线程的基本属性配置 在C/C代码编写时,使用多线程机制,首先需要做的事情就是声明引用,具体如下:#inclu…

Windows + Ubuntu下JDK与adb/android环境变量配置完整教程

假设JDK和android sdk路径分别如下: D:\Program Files\Java\jdkD:\android-sdk 1.JDK环境变量配置JAVA_HOMED:\Program Files\Java\jdk path%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; classpath,;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar &a…

python制作界面怎么触发事件_python模拟事件触发机制详解

本文实例为大家分享了python模拟事件触发机制的具体代码,供大家参考,具体内容如下EventManager.py# -*- encoding: UTF-8 -*-# 系统模块from queue import Queue, Emptyfrom threading import *class EventManager:def __init__(self):"""…

python 格式化工具_小而美的 Python 格式化工具--black

Black号称不妥协的代码格式化工具,为什么叫不妥协呢?因为它检测到不符合规范的代码风格直接就帮你全部格式化好,根本不需要你确定,直接替你做好决定。它也是 requests 作者最喜欢的工具之一.使用非常简单,安装成功后&a…

常用英语短语收集1

1、are you fucking kiding me? 转载于:https://www.cnblogs.com/badboys/p/8729474.html

事务java_Java事务之一——Java事务的基本问题

Java中的事务处理有多简单?在使用EJB时,事务在我们几乎察觉不到的情况下发挥着作用;而在使用Spring时,也只需要配置一个TransactionManager,然后在需要事务的方法上加上Transactional注解就行了。Java的事务处理之所以…

seo模拟点击软件_浅谈百度SEO快排是什么、原理、如何判断及应对

前言:以前我说过不准备写这个快排,一是我自己的网站没有操作过所谓的快排 ,二是我并不能像网上很多写的揭秘百度快排(说实话,你都能揭秘的方法了,还真的很有用吗?真正懂的人都在低调赚money)。我只是站在一个小白角度…

冲刺no.4

项目:ccsu小助手 角色:用户 访问链接:http://47.93.57.6:8888/login/ 目的(Purpose) ccsu小助手是一款面向长沙学院所有学生、老师、学校部门、校园的账户信息输出类产品,部门可以通过和本系统负责人签订产品使用协议,申请集成使用该产品 对应网页使用权…

java web 开发基础_javaweb开发基础(一)

001使用MyEclispe建立web工程我的建立在D盘WebAPP这个目录下在myeclipse中启动Tomcat,在浏览器中输入http://localhost:8080/,如果不出意外的话,会出现白板,说明Tomcat启动成功。这篇文档则详细的说明了如何在MyEclipse下部署一个…

python如何处理视频_OpenCV-Python系列之视频处理入门

视频处理在OpenCV中处于极为重要的地位,目标实时跟踪等各种实时图像处理算法都是以视频为基础。从相机捕获视频首先我们来了解一下使用电脑自带的相机来进行捕获视频。通常,我们必须使用摄像机捕获实时流。OpenCV提供了一个非常简单的界面来执行此操作。…

100多年了,左右大脑的不对称性依然备受关注

来源:brainnews1,不对称的视角下的大脑偏侧化关于大脑不对称性的比较研究最早可以追溯到19世纪,但由于早期认为偏侧化为人类所独有,因此该领域的研究一度消失。这一领域在20世纪70年代重新出现,使我们了解到脑和行为的…

java-线程-生产者-消费者

概述 在Java中有四种方法支持同步,其中前三个是同步方法,一个是管道方法。 wait() / notify()方法 await() / signal()方法 BlockingQueue阻塞队列方法 PipedInputStream / PipedOutputStream wait() / notify()方法 public class Storage {private fina…

如何用python做计算软件_如何用Python写一个计算器软件 附带效果图

1 import tkinter #导入tkinter模块23 root tkinter.Tk()4 root.minsize(280,500)5 root.title(李蛟龙的计算器)678 #1.界面布局9 #显示面板10 result tkinter.StringVar()11 result.set(0) #显示面板显示结果1,用于显示默认数字012 result2 tkinter.StringVar() #…

BI之报表测试总结

报表测试总结: 1、测试准备工作: 数据准备 保证足够多的有效数据 清楚报表中涉及到的算法、公式 清楚业务功能接口 2、报表测试点 基本测试点:界面、控件、格式、布局、明显的数据错误、js报错、报表标题,报表整体风格,翻页&#…

经由因果分析,反驳AI监控学生上课,及辨别健康类谣言

来源:混沌巡洋舰想象这样一个场景,你和你心爱的女孩一起自习,你的理科好,于是你看着她听数学的网课时,有时露出困惑的表情,还有时会走神。然后等她听完,你再把你觉得她没有听懂的部分&#xff0…

python 连续三个数满足条件_计算满足条件的连续值数(Pandas Dataframe)

这是一个带有^{}-# https://stackoverflow.com/a/52718782/ Divakardef maxisland_start_len_mask(a, fillna_index -1, fillna_len 0):# a is a boolean arraypad np.zeros(a.shape[1],dtypebool)mask np.vstack((pad, a, pad))mask_step mask[1:] ! mask[:-1]idx np.fl…

java controller json_springMVC的controller层接收前端json数据

1.前端的操作:对象接收json数据方式:将所需要传的数据转化为json数据,并将这些数据以post方式传到后台的controller层,然后controller层接收json数据,并且是以对象的形式进行接收。这里面是springmvc自动控制将这些数据…

里程碑!SpaceX 载人首飞发射成功,马斯克填补美国载人飞行近十年空白

来源:雷锋网作者 | 付静1 代表着首次,标志着政府与企业持续合作前往国际空间站的开始。终于,美国太空探索技术公司(SpaceX)的首次正式载人飞行任务拉开大幕!美东时间 2020 年 11 月 15 日 19 时 27 分&…