mysql开源许可_为什么开源数据库改变许可证?

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

一、CockroachDB 的许可证变更

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

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

8419639be2d2d57d94f41039d4a2f2fb.png

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

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

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

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

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

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

bbb815a238e1457fe28f7dda6bae8bfe.png

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

c2a204aec9f8c5574aec1510ea525d5e.png

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

三、问题的由来

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

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

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

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

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

四、对策

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

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

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

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

五、参考链接

(完)

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

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

相关文章

Spring IoC容器

我们将详细介绍 Spring 的 Ioc 容器。 IoC 是指在程序开发中,实例的创建不再由调用者管理,而是由 Spring 容器创建。Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 S…

python相同怎么写_这两个index相同的dataframe我想把他们merge,怎么写?

能具体点么?这是这两df的代码# -*- coding: utf-8 -*-import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport tracebackfrom tools import *import matplotlib as mplimport pickleimport datetime as dtdf1 pd.DataFrame({A0: [A0, A1, …

python里删除range里的数字_python中range函数与列表中删除元素

一、range函数使用range(1,5) 代表从1到4(不包含5),结果为:1,2,3,4 ,默认步长为1range(1,5,2) 结果为:1, 3 (同样不包含5) ,步长为2range(5,-1,-1) 反向输出,结果为:5,4,3,2,1,0 &#…

python中print又可将数据写入文件_Python第五课-将写入文件的列表格式化

1、上节课代码中的问题 第四课中介绍了python持久化的基础实例——将数据写入文本文件。 可当我们试着把保存数据的文件读取出来会怎样呢? try: with open(man.txt, r) as fman: print(fman.readline())except IOError as err: print(str(err)) 执行时,1…

Spring 依赖注入的实现

依赖注入(Dependency Injection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念。 当某个 Java 实例需要另一个 Java 实例时,传统的方法是由调用者创建被调用者的实例(例如,使用 new…

arduino倾斜开关python语言_Arduino小白的学习记录:倾斜开关实验

一、介绍带有金属球的球形倾斜开关,它用于检测小角度的倾斜。图7.1 倾斜开关模块二、材料准备Arduino Uno 主板*1USB数据线*1倾斜开关模块*1杜邦线若干三、实验原理在倾斜开关中小球以不同的倾斜角度移动以造成触发电路的原理。倾斜开关模块使用双向传导的球形倾斜开…

Spring Bean的配置及常用属性

作为 Spring 核心机制的依赖注入,改变了传统的编程习惯,对组件的实例化不再由应用程序完成,转而交由 Spring 容器完成,在需要时注入应用程序中,从而对组件之间依赖关系进行了解耦。这一切都离不开 Spring 配置文件中使…

java 静态对象语法_04.Java 语法

计算机基础知识表达式(expression):Java中最基本的一个运算。比如一个加法运算表达式。12是一个表达式,ab也是。计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二进制数,即8个bit。它的二进制表示范围从00000000~1111…

python 化学模块_Python chemif包_程序模块 - PyPI - Python中文网

实施解决这个问题的方法是使用一个while循环的递归下降算法。这个循环的基本结构是:todo [[item1, processing_data],[item2, processing_data], ... ]done []while len(todo)>0:item_to_workon todo.pop()for each_branch in branches:stuff.do()data.proces…

Spring实例化Bean

在面向对象的程序中,要想调用某个类的成员方法,就需要先实例化该类的对象。在 Spring 中,实例化 Bean 有三种方式,分别是构造器实例化、静态工厂方式实例化和实例工厂方式实例化。 构造器实例化 构造器实例化是指 Spring 容器通…

centos7配置mysql其他机器访问_CentOS7安装MySQL并开启远程访问详解

1.安装MySQLCentOS7中默认安装了MySQL系列的数据库,需要先卸载掉。查看当前安装的mariadb包:[[email protected] desktop]# rpm -qa | grep mariadb将它们统统强制性卸载掉:[[email protected] 桌面]# rpm -e --nodeps mariadb-libs-5.5.35-3…

python单元测试框架unittest介绍和使用_Python单元测试框架unittest简明使用实例

测试步骤1. 导入unittest模块import unittest2. 编写测试的类继承unittest.TestCaseclass Tester(unittest.TestCase)3. 编写测试的方法必须以test开头def test_add(self)def test_sub(self)4.使用TestCase class提供的方法测试功能点5.调用unittest.main()方法运行所有以test开…

python堆模块_python内置堆模块

heapqpython内置heapq模块,通过import heapq导入。heapq模块是用于堆实现优先队列。我们知道队列是先进先出(FIFO),heapq中的优先队列指的是不论谁先进,最小的先出或者最大的先出。# 需要注意的是heapq的堆是小根堆。01 23 4 5 67 8 9 10 11 …

Java连接数据库所遇到的坑,连接数据库,遇到一个很奇怪的问题……

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼这个程序,运行之后发现成功连接上了然后我又看一眼,发现 DatabasName 拼错了,少写了一个 e没想到改正后反而报错了!com.microsoft.sqlserver.jdbc.SQLServerException: Cannot open d…

如何用python的i2c教程_Micropython TPYBoard I2C的用法

先看看基本用法:from pyb import I2Ci2c I2C(1) # create on bus 1i2c I2C(1, I2C.MASTER) # create and init as a masteri2c.init(I2C.MASTER, baudrate20000) # init as a masteri2c.init(I2C.SLAVE, addr0x42) # i…

Spring基于XML装配Bean

Bean 的装配可以理解为依赖关系注入,Bean 的装配方式也就是 Bean 的依赖注入方式。Spring 容器支持多种形式的 Bean 的装配方式,如基于 XML 的 Bean 装配、基于 Annotation 的 Bean 装配和自动装配等。 Spring 基于 XML 的装配通常采用两种实现方式&…

苹果php环境,苹果电脑安装PHP环境步骤-PHP问题

苹果电脑装置PHP环境步骤:一、起首咱们需求装置Homebrew二、终端输出饬令// 创立目次,假如你不创立过该目次sudo mkdir /usr/local/varsudo chmod 777 /usr/local/var//修正成你本人的用户名以及组,假如你不创立过该目次sudo mkdir /usr/local/sbin/sudo chown -R :…

python邮件图片加密软件_用Python发一封图文并茂的邮件

最近使用了不少通讯工具的接口, 比如企业微信机器人,钉钉,微信公众号的接口(未认证的订阅公众号),相对于邮件来说,它们的表现形式太弱。比如没有更丰富的版本方式。当然了,并不是说表现形式越棒就是约好的通知手段&…

Spring基于Annotation装配Bean

在 Spring 中,尽管使用 XML 配置文件可以实现 Bean 的装配工作,但如果应用中 Bean 的数量较多,会导致 XML 配置文件过于臃肿,从而给维护和升级带来一定的困难。 Java 从 JDK 5.0 以后,提供了 Annotation(注…

用java写米与英尺,JAVA 英制变换(英尺与英寸)

JAVA 英制转换(英尺与英寸)系统实际业务中,还有些外国船舶水尺用的英制计算单位。写了一个简单的 英尺与英寸的转换 。英尺 --> 英寸 的转换:public class FeetToInch {/*** param args*/public static void main(String[] args) {String aa FeetTo…