当前位置: 首页 > news >正文

为什么商业基础软件需要开源

Bytebase 本身是一家商业软件公司,而作为最核心资产的代码从 Day 0 却是开源的。同时我们还是 star-history.com 的运营者,大家在各种开源渠道会看到它生成的图:

file

一直以来,常会被别人问起的一个问题,就是为什么 Bytebase 要开源。结合这 2 年多的实战经验,一次性把能想到的写下来。

先圈定一下范围,就是标题中的 2 个定语:

  • 基础软件。基础软件的特质就是基本没有行业属性,各行各业都能用,底层的如操作系统,数据库,往上走一点的如开发框架,消息队列,再往上层一点的开发者工具都属于基础软件的范畴。
  • 商业。商业就是以盈利为目的的。与之相对应的则是非营利性,依靠赞助和爱好者用爱发电。

开源的好处

1. 增加渠道曝光度

GitHub 作为全球最大的程序员社交平台,成为了现在基础软件最大和最优质的分发渠道。从 Bytebase 自己官网的流量统计看,从 GitHub 引来的流量,跳转率和驻留时长指标都远远优于其他渠道。而 Bytebase 目前的付费客户中,也有超过 7 成的线索是通过 GitHub 和相关开源渠道过来的。

file

2. 增加客户安全感

因为是基础软件,处于底层,所以通常都会支撑到客户的核心系统。商业化公司对于软件是要收费的,动辄每年几万到几十万不等。客户花不少钱采购支持他们核心业务的软件,肯定是要挑选更放心的产品。开源软件的代码是全公开的,整个的研发过程也被 GitHub 记录的一清二楚。从原材料到最终成品的整个制作过程都是完全透明的。开源厂商不敢堂而皇之地植入恶意代码,另外如果厂商本身跑路了,社区或者客户本身至少还有继续维护下去的途径。

3. 构建生态壁垒

同类软件,开源的只要能达到闭源水平的 50% 甚至更低,就有资格挑战了。移动时代的 Android 之于 iOS,到现在的各种开源大模型之于 OpenAI。而要用一款开源产品去替代另一款占据市场多年的开源产品,难度可就高多了。像 web 服务器,Nginx 和 Apache 同为开源产品,Apache 发布于 1995 年,Nginx 发布于 2004 年,Nginx 的架构领先 Apache 一代,但即使过了那么多年,从市场占有率看,Nginx 也只领先了几个点。

file

前不久 Redpoint 发布的 InfraRed 100 榜单里,新兴者挑战在位者的模式有:

  • 用开源挑战闭源,比如 Supabase 挑战 Firebase,ClickHouse 挑战 Snowflake,MINIO 挑战 S3。
  • 用开源挑战开源,比如 Deno 挑战 Node。
  • 用闭源挑战闭源,比如 Linear 挑战 Jira。

file

最常见的是用开源挑战闭源,而唯独没有的是用闭源挑战开源的模式。

4. 让用户自助

代码就是最好的文档,一些错误定位,文档要是缺失,根据错误提示搜索代码仓库,就能自己定位问题。

打消开源的顾虑

1. 商业版被破解

他人可以不遵守开源软件的商业协议,肆意篡改代码,在没有购买商业证书的情况下使用商业版。盗版的问题也并不是开源软件独有的,像微软,Adobe,Oracle 这样先睁一只眼闭一只眼,等到时机成熟了,再让律师出马。使用破解版的风险始终在使用者这边,在基础软件这块,风险更加会被放大,没有售后 SLA 支持,出现问题无法解决,遭受的损失往往要大的多。

2. 泄露核心商业机密

代码是公司的核心资产是没有错,但是这个代码本身包含了多少独特的商业机密,需要打个大大的问号。基础软件主要是各种 API,算法模块的组装,业务软件里才会藏着各种独门策略。就像提供搜索能力的基础软件并非什么机密,机密的是具体的搜索排序规则。

3. 开源代码的安全性

代码开源后,别人就可以研究代码,找漏洞,进行攻击。但正因为代码开源,也更容易让别人帮忙找到漏洞,进行修复。既然连 OpenSSL 都是开源的,其他项目也没什么好担心的。

4. 代码写得太烂,拿不出手

写好的代码不是为了取悦他人,而是为了让软件变得可扩展,可维护。客户也不会为了好的代码买单,而是为能解决的问题买单。

剩下的一些摇摆 ⚖️

1. 外部贡献者的参与究竟是好是坏

Bytebase 历史上也有同学贡献过比较大的功能点,比如集成 GitHub,集成 OceanBase,集成达梦。但从总的代码量来说,Bytebase 外部贡献者的代码量大概只占 1%。当然也有不少开源项目培养出了积极的外部贡献者,但商业驱动的开源项目和靠着兴趣和解决个人问题驱动的个体贡献者,两者的目标还是不同的。从纯时间投入来说,指导,审核,协调外部贡献者未必比自己团队操刀来得更高效。

2. 维护成本是增加还是减少

因为代码都开源了,也就少了需要把代码保密的需要。其实国内采购软件的客户,往往也都需要软件的源代码。代码开源,也就少了这个麻烦。但另一方面,因为代码完全开源,一些密钥配置就更加不能直接放在代码里了,这增加了代码的复杂度。

写在最后

最近国外开源圈也有一次交锋,MongoDB 开发者关系副总裁 Matt Asay「The open source licensing war is over」vs RedMonk 创始人 Stephen O’Grady「Why Open Source Matters」。双方都是开源圈的资深人士,Matt 在 AWS 和 MongoDB 间反复横跳,至于 Stephen,更多人知道的是他这本书的封面。

file

首先双方都认可开源的价值,分歧点在谁有权力分配价值上。国外这两年争议的焦点都是围绕开源的定义以及开源协议,他们是已经在开源的价值上形成了共识,剩下就在掰扯怎么分配开源的蛋糕。

而在国内,对于基础软件是否开源尚未达成共识。当然也因为这个原因,Bytebase 作为一个开源项目还能享受到不少红利,而像本篇这样宣扬开源的文字也还显得有所价值。

希望 2 年后回看这篇文章,那剩下的摇摆也已经找到了答案,至于其它的,就让它们全都变成废话吧。


💡 你可以访问官网,免费注册云账号,立即体验 Bytebase。

相关文章:

为什么商业基础软件需要开源

Bytebase 本身是一家商业软件公司,而作为最核心资产的代码从 Day 0 却是开源的。同时我们还是 star-history.com 的运营者,大家在各种开源渠道会看到它生成的图: 一直以来,常会被别人问起的一个问题,就是为什么 Byteba…...

【自用】云服务器 使用 docker 搭建 HomeAssistant + MQTT 物联网平台

总览 1.搭建流程概述 2.准备工作 3.开始搭建! 4.总结 如果想看 ESP32 或其他使用 MicroPython 编程的单片机如何连接到该云服务器,实现 HomeAssistant 控制 单片机的内容,请看我这篇博客的下一篇。 一、搭建流程概述 0.总体流程 我们需要…...

ABAP: SQL 多值查询

基础查数据 问题举例:例如查物料类型为ZFRT、ZROH和ZRSA的物料编码。 1、直接查询,三种不同类型的物料类型是或的关系。 SELECT DISTINCT ma~matnr ma~mtartFROM mara AS maINNER JOIN mbewh AS mbON ma~matnr mb~matnrINTO CORRESPONDING FIELDS OF…...

分布式学习最佳实践:从分布式系统的特征开始

正文   在延伸feature(分布式系统需要考虑的特性)的时候,我逐渐明白,这是因为要满足这些feature,才设计了很多协议与算法,也提出了一些理论。比如说,这是因为要解决去中心化副本的一致性问题&…...

第三章 图论 No.8最近公共祖先lca, tarjan与次小生成树

文章目录 lcaTarjan板子题:1172. 祖孙询问lca或tarjan:1171. 距离356. 次小生成树352. 闇の連鎖 lca O ( m l o g n ) O(mlogn) O(mlogn),n为节点数量,m为询问次数,lca是一种在线处理询问的算法 自己也是自己的祖先 倍…...

[Kubernetes]Kubeflow Pipelines - 基本介绍与安装方法

1. 背景 近些年来,人工智能技术在自然语言处理、视觉图像和自动驾驶方面都取得不小的成就,无论是工业界还是学术界大家都在惊叹一个又一个的模型设计。但是对于真正做过算法工程落地的同学,在惊叹这些模型的同时,更多的是在忧虑如…...

Sui网络的稳定性和高性能

Sui的最初的协议开发者设计了可扩展的网络,通过水平扩展的方式来保持可负担得起的gas费用。其他区块链与之相比,则使用稀缺性和交易成本来控制网络活动。 Sui主网上线前90天的数据指标证明了这一设计概念,在保持100%正常运行的同…...

RabbitMQ 安装教程

RabbitMQ 安装教程 特殊说明 因为RabbitMQ基于Erlang开发,所以安装时需要先安装Erlang RabbitMQ和Erlang版本对应关系 查看地址:www.rabbitmq.com/which-erlan… 环境选择 Erlang: 23.3及以上 RabbitMQ: 3.10.1Windows 安装 1. 安装Erlang 下载地…...

STM32F429IGT6使用CubeMX配置GPIO点亮LED灯

1、硬件电路 2、设置RCC,选择高速外部时钟HSE,时钟设置为180MHz 3、配置GPIO引脚 4、生成工程配置 5、部分代码 6、实验现象...

DOM的节点操作+事件高级+DOM事件流+事件对象

一.节点操作 1.父节点: node.parentNode 得到的是离元素最近的父级节点 2.子节点: parentNode.childNodes 所有的子节点 包含元素节点 文本节点等等parentNode.children (非标准) 获取所有的子元素节点,实际开发常用 parentNode.firstChild 获取…...

云端剪切板,让你的数据同步无界

云端剪切板,让你的数据同步无界! 每个人都应该保护自己的数据,同时使它易于访问和共享。这就是我们的云剪切板网站诞生的原因!无论你在哪里,只要登录我们的网站,就可以随时随地使用你的剪切板数据。 你可…...

Location匹配与Rewrite重写

一、常见的Nginx正则表达式 ^ :匹配输入字符串的起始位置 $ :匹配输入字符串的结束位置 * :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”:匹配前面的字符一次或多次。如“ol”能匹配“ol”及“oll”、“oll…...

Docker源码阅读 - goland环境准备

docker 源码分为两部分 cli 和 moby(docker) tips: docker是从moby拷贝过去的;docker整体是一个C-S架构,cli客户端,docker服务端 docker-ce:https://github.com/docker/docker-ce cli:https://…...

数据库信息速递 -- MariaDB 裁员后,前景不确定 (翻译)

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 ,在新加的朋友会分到3群&#xff…...

4.1 Windows终端安全

数据参考:CISP官方 目录 安全安装保护账户安全本地安全策略安全中心系统服务安全其他安全设置软件安全获取 一、安全安装(以安装windows系统为例) 选择合适的版本 商业版本:家庭版、专业版、专业工作站版、企业版特殊版本&…...

win10强制卸载奇安信天擎

1、win r 打开运行 2、输入msconfig进入系统配置面板 3、点击引导,修改安全引导配置项 4、重启系统(桌面会变成纯黑背景,符合预期,莫紧张) 5、删除安装的文件夹 若是安装天擎时选择的自定义安装,则配置…...

npm常用命令

npm -v:查看 npm 版本 npm init:初始化后会出现一个 Package.json 配置文件,可以在后面加上 -y,快速跳到问答界面 npm install:会根据项目中的 package.json 文件自动给下载项目中所需的全部依赖 npm insall 包含 -…...

(一)创建型设计模式:4、原型模式(Prototype Pattern)

目录 1、原型模式的含义 2、C实现原型模式的简单实例 1、原型模式的含义 通过复制现有对象来创建新对象,而无需依赖于显式的构造函数或工厂方法,同时又能保证性能。 The prototype pattern is a creational design pattern in software development. …...

【算法学习】高级班九

这种互为旋变串&#xff1a; 给定两个字符串&#xff0c;判断是否互为旋变串 代码&#xff1a; 打表法&#xff1a; 每一层内的数字不互相依赖&#xff0c;只依赖它下面的层但实际上size会约束L1和L2的值&#xff0c;即L1和L2<N-size 思路&#xff1a;设置一个窗口…...

数据安全加固:深入解析滴滴ES安全认证技术方案

前文分别介绍了滴滴自研的ES强一致性多活是如何实现的、以及如何提升ES的性能潜力。由于ES具有强大的搜索和分析功能&#xff0c;同时也因其开源和易于使用而成为黑客攻击的目标。近些年&#xff0c;业界ES数据泄露事件频发, 以下是一些比较严重的数据泄露案件&#xff1a; 202…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

PH热榜 | 2025-06-08

1. Thiings 标语&#xff1a;一套超过1900个免费AI生成的3D图标集合 介绍&#xff1a;Thiings是一个不断扩展的免费AI生成3D图标库&#xff0c;目前已有超过1900个图标。你可以按照主题浏览&#xff0c;生成自己的图标&#xff0c;或者下载整个图标集。所有图标都可以在个人或…...