夜天之书 #74 企业开源的软件协议模型实践(Part 2)
在上一篇文章中,我介绍了企业开源的完全开放源码策略及其风险。完全开放源码,即以符合开源定义的软件协议发布企业自研软件的情形。
本文介绍应对完全开放源码后的风险的第一种策略:提高市场占有率与开放标准。与其说是策略,不如说是促使企业完全开放源码的动机。
策略:市场占有率与开放标准
选择和坚持完全开放源码策略的一个主要原因,是企业希望完全开放源码的软件赢得广泛的市场占有率,甚至形成开放标准。
以开源的程序设计语言实现为例,在语言本身赢得用户之前,很少有企业能够直接通过售卖语言实现的编译器或解释器来盈利。瑞典电信公司 Ericsson 支持工程师 Joe Armstrong 开发 Erlang 语言之后,将整个 Erlang/OTP[1] 平台完全开放。从当年的发布文稿[2]中,我们可以看到开放标准的典型思路:
Erlang/OTP was invented within Ericsson and most Erlang/OTP users are still within Ericsson. In order to speed development of Erlang/OTP, ensure a good supply of Erlang/OTP fluent programmers, minimise maintenance and development costs for the language, and keep the OTP applications up to world class, we need to spread the technology outside of Ericsson.
也就是说,Ericsson 内部的电信系统高度依赖 Erlang/OTP 平台,为了保证劳动力市场上一直有人熟练掌握这一语言和开发平台,从而保证 Ericsson 内部系统不至于无人能够维护,Ericsson 希望完全开发源码,以期在公司以外的广阔生态中推广 Erlang/OTP 平台。事实证明,这一决定为 Erlang/OTP 平台起初在电信行业内的推广,以及后来在游戏行业中的广泛应用,再到近些年其底层虚拟机 BEAM 借助新语言 Elixir 的发展再次得到关注,都起到了至关重要的作用。Joe 为 Ericsson 创建高可用的服务打造了一个完整的开源软件和开发平台,但是如果没有开放源码,这将只是 Ericsson 这个如今已不那么有名的企业的一个内部系统。或许会成为一个仅存于谈话之中的传说,但是不可能有今天的生态。
同样是 Erlang 生态的一部分,José Valim 设计的 Elixir[3] 语言及其开发的解释器和网站开发套件,代表了开放源码以赢得市场占有率的策略。
José 起初在自己参与联合创办的 Plataformatec 开发出了 Elixir 语言的解释器,以及 ecto[4] 工具和 Phoenix[5] 框架。后来,Elixir 的使用率日益增长,José 于是另外创办了 Dashbit[6] 公司来提供 Elixir 应用的开发和运维支持。
从 Dashbit 公司的视角出发,其拥有部分 Elixir 核心生态软件的知识产权,但是它却没有通过限制核心软件使用,要求用户购买 LICENSE 的方式来盈利。这是因为,Elixir 毕竟还是一个小众的语言,用户使用量的增长才是做企业支持的基本盘。如果小有成就马上杀鸡取卵、竭泽而渔,那么新用户就很难有信心上车,而存量用户也会想办法跳车,最终生态凋敝,没人有理由购买 LICENSE 授权。
José 本人在 LinkedIn 上的头衔就是 Chief Adoption Officer 即首席(用户)采用官,可见 Dashbit 的开源策略当中对市场采用率的重视程度。同类的案例还有 VMWare[7] 的 Greenplum Database、Spring Framwork 和 RabbitMQ 等项目,这些公司(在相关方向)的主要商业模式是提供支持和咨询,而不是售卖软件或提供云服务,因此其提供支持和咨询的对象的使用率越高越好。
再来看一种竞争型的开放标准策略,其中典型的当属 Google 的开源矩阵:
1.Chromium 打下了浏览器内核的半壁江山。如今,多少网页应用都注明仅在 Chrome 上经过测试。2.Android 从 iOS 和 Symbian 的夹缝中取得了移动端市场的船票,并最终和 iOS 二分天下。3.Kubernetes 和 Istio 是 borg 技术溢出以后,Google 主动建立生态的尝试。在相当一段时间里,用上 Kuberneets 就“等于”云原生。
Google 是重度参与 C++ 标准讨论或者说竞争的,这可从 C++ 之父 Bjarne Stroustrup 的论文 Thriving in a Crowded and Changing World: C++ 2006–2020[8] 中关于 C++ 标准委员会的讨论中窥见端倪。应该说,标准之争是激烈甚至残酷的。企业内部总有领先与行业标准所做的尝试,一旦行业后续面对相同问题时将另一种解法确定为标准,那么本公司不说此前的研发投入打了水瓢,至少也需要付出可观的额外努力来兼容新标准。Google 深知这点的厉害,而 Kuberneets 打赢容器战争,对比失败的 OpenStack、Docker Swarm 和 Apache Mesos 与重金投入它们的公司,Google 账面之外的获利不可计数。
无独有偶,Facebook 的 React[9] 前端应用开发框架已经成为无可置疑的标准,对应 Google 推出的 Angular 势弱,多少投资 Angular 的企业和开发者损失惨重。
国内也不乏出于这个动机完全开放软件源码的企业。例如,Apache InLong[10] 是腾讯大数据平台里数据集成能力的开放,Apache Dubbo[11] 和 Nacos[12] 是阿里巴巴微服务架设和治理经验的开源表现,CloudWeGo[13] 是字节跳动中间件能力的系列开源行动,Go Kratos[14] 是 Bilibili 开源的微服务框架。当然,这些软件集中在所谓的“中间件”领域,是另一个值得探讨分析的话题。
最后,上面提到的都是体量巨大或至少相对较大的公司,对于小公司来说,有没有实践市场采用率和开放标准这一策略的空间呢?
肯定还是有的。例如,近期已被 Apache 孵化器接受的 OpenDAL[15] 数据访问库,就是由 2021 年初创的企业 DatafuseLabs[16] 捐赠的。又例如,CockroachDB 的存储引擎 Pebble[17] 以 BSD-3-Clause 协议开源,连 PingCAP 的数据导入工具 Lightning 也有使用。
一般来说,小公司更容易在细分领域或者新兴领域,通过开放源码软件来赢得大量声誉和共同维护生态成员都有需要的基础软件。
References
[1] Erlang/OTP: https://github.com/erlang/otp[2] 发布文稿: https://web.archive.org/web/19991009002753/http://www.erlang.se/onlinenews/ErlangOTPos.shtml[3] Elixir: https://elixir-lang.org/[4] ecto: https://github.com/elixir-ecto[5] Phoenix: https://github.com/phoenixframework[6] Dashbit: https://dashbit.co/[7] VMWare: https://tanzu.vmware.com/open-source[8] Thriving in a Crowded and Changing World: C++ 2006–2020: https://www.stroustrup.com/hopl20main-p5-p-bfc9cd4--final.pdf[9] React: https://reactjs.org/[10] Apache InLong: https://inlong.apache.org/[11] Apache Dubbo: https://dubbo.apache.org/en/index.html[12] Nacos: https://nacos.io/zh-cn/[13] CloudWeGo: https://www.cloudwego.io/[14] Go Kratos: https://go-kratos.dev/[15] OpenDAL: https://github.com/datafuselabs/opendal[16] DatafuseLabs: https://databend.rs/[17] Pebble: https://github.com/cockroachdb/pebble
相关文章:
夜天之书 #74 企业开源的软件协议模型实践(Part 2)
在上一篇文章中,我介绍了企业开源的完全开放源码策略及其风险。完全开放源码,即以符合开源定义的软件协议发布企业自研软件的情形。本文介绍应对完全开放源码后的风险的第一种策略:提高市场占有率与开放标准。与其说是策略,不如说…...
2.webpack实时打包
简介 上一章已经实现了使用 webpack 构建了一个简单的项目;但是我们发现,每次修改了 index.js 需要重新执行 cnpm run dev 命令重新构建 main.js;这在开发阶段是无法忍受的,因为这样调式将浪费大量的时间;还好 webpac…...
KingbaseES V8R3 表加密
前言 透明加密是指将数据库page加密后写入磁盘,当需要读取对应page时进行加密读取。此过程对于用户是透明, 用户无需干预。 该文档进行数据库V8R3版本测试透明加密功能,需要说明,该版本发布时间早于V8R6,所以只能进行表…...
2 为社么软件架构很重要?
2 为社么软件架构很重要? 啊,建造,建造! 这是所有艺术中最崇高的艺术。 — 亨利沃兹沃思朗费罗 如果架构是答案,那么问题是什么? 本章从技术角度重点介绍架构的重要性。我们将研究面包师的十几个最重要…...
Python 之 Pandas merge() 函数、set_index() 函数、drop_duplicates() 函数和 tolist() 函数
文章目录一、merge() 函数1. inner2. left 和 right3. outer二、set_index() 函数三、drop_duplicates() 函数四、tolist() 函数五、视频数据分析案例1. 问题要求2. 解决过程在最开始,我们先导入常规的 numpy 和 pandas 库。 import numpy as np import pandas as …...
MySQL实战之深入浅出索引(下)
1.前言 在上一篇文章中,我们介绍了InnoDB索引的数据结构模型,今天我们再继续聊一下跟MySQL索引有关的概念。 在介绍之前,我们先看一个问题: 表初始化语句 mysql> create table T ( ID int primary key, k int NOT NULL DEFA…...
(二分查找)leetcode1539. 第 k 个缺失的正整数
文章目录一、题目1、题目描述2、基础框架3、原题链接二、解题报告1、思路分析2、时间复杂度3、代码详解三、本题小知识一、题目 1、题目描述 给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 示例 1: 输入&…...
yaml文件格式详解及实例
🍁博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录yaml简介yaml语法规则Yaml语法实例数组…...
AOP在PowerJob中的使用,缓存锁保证并发安全,知识细节全总结
这是一篇简简单单的文章,需要你简简单单看一眼就好,如果有不明白的地方,欢迎留言讨论。 在之前的文章中出现过一次AOP的使用,就是在运行任务之前,需要判断一下,触发该任务执行的server,是不是数…...
对账平台设计
背景 随着公司业务的蓬勃发展,交易履约清结算业务的复杂性也在不断的增高,资金以及各种数据的一致性和准确性也变得越发重要。 以交易链路为例,存在着如下一些潜在的不一致场景: 订单支付成功了,但是订单状态却还是“…...
JavaEE进阶第五课:SpringBoot的创建和使用
上篇文章介绍了Bean 作用域和生命周期,这篇文章我们将会介绍SpringBoot的创建和使用 目录1.为什么要学习StringBoot1.1什么是SpringBoot1.2SpringBoot的优点2.如何用Idea创建SpringBoot项目3.项目目录介绍和运行3.1输入Helloworld结尾1.为什么要学习StringBoot 在前…...
我带过的一名C++实习生——Z同学
刚开始带Z同学,吃饭聊天时,我顺便了解了下他的擅长:linux平台下C、C网络编程。 接下来的实习,主要分为两个阶段:小组公共培训和项目实训。 小组公共培训为期2周,主要学习和了解公司文化制度,讲师…...
面试题13. 机器人的运动范围
面试题13. 机器人的运动范围 难度:middle\color{orange}{middle}middle 题目描述 地上有一个 mmm 行 nnn 列的方格,从坐标 [0,0][0,0][0,0] 到坐标 [m−1,n−1][m-1,n-1][m−1,n−1] 。一个机器人从坐标 [0,0][0, 0][0,0] 的格子开始移动,它…...
LeetCode189_189. 轮转数组
LeetCode189_189. 轮转数组 一、描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,…...
java Files和Paths的使用详解 附有使用demo
前言 Java Files和Paths是Java 7中引入的新API,用于处理文件和目录。Files类提供了许多有用的静态方法来操作文件和目录,而Path类则表示文件系统中的路径。 创建文件和目录 在Java中创建文件和目录非常简单。我们可以使用Files类的createFile()方法和…...
如何使用ApacheTomcatScanner扫描Apache Tomcat服务器漏洞
关于ApacheTomcatScanner ApacheTomcatScanner是一个功能强大的Python脚本,该脚本主要针对Apache Tomcat服务器安全而设计,可以帮助广大研究人员轻松扫描和检测Apache Tomcat服务器中的安全漏洞。 功能介绍 1、支持使用多线程Worker搜索Apache Tomcat服…...
js中的定时器 setTimeout()和setInterval()
JavaScript 定时器,有时也称为“计时器”,用来在经过指定的时间后执行某些任务,类似于我们生活中的闹钟。 在 JavaScript 中,我们可以利用定时器来延迟执行某些代码,或者以固定的时间间隔重复执行某些代码。例如&…...
【吃透Js】深入学习浅拷贝和深拷贝
一、JavaScript数据类型原始类型对象类型二、原始类型和对象类型的区别1.原始类型2.引用类型3.复制4.比较5.值传递三、浅拷贝概念实现方法四、深拷贝概念五、浅拷贝、深拷贝和赋值的区别浅拷贝和赋值六、小结想要真正搞明白深浅拷贝,你必须要熟练掌握赋值、对象在内…...
AUTOSAR为啥要开发新的社区商业模式?
总目录链接>> AutoSAR入门和实战系列总目录 文章目录1 自适应平台架构中的集群更新1.1 ara::diag 服务(诊断)更新1.2 信号到服务映射和自动驾驶接口让我们讨论一下信号到服务映射服务:Automated Driving Interface:2 车载应用商店概念本文介绍Re…...
数据结构和算法面试常见题必考以及前端面试题
1.数据结构和算法 1.1 反转单向链表 public class Node {public int value;public Node next; }public Node reverseList(Node head) {Node pre null;Node next null;while (head ! null) {next head.next;head.next pre;pre head;head head.next}return pre; }1.2 在顺…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
