夜天之书 #71 黑客与顾客:开源软件能商业化吗?
燃烧了过去一周的空闲时间,我终于定制好了自己的 Linux Desktop 环境。
虽然 Linux 经常被拿来跟 Windows 和 Mac OS X 相比较,但是 Linux 本身只是一个操作系统内核,为了满足用户能作为日常桌面系统使用的需求,还需要添加很多额外的功能。例如,作为内核的 Linux 只提供了识别网卡与其通信的能力,具体如何建立和维护网络链接,如何在开机时自动连接,如何设置网络代理,不同于 Windows 和 Mac OS X 有成熟友好的图形管理界面,Linux 的用户是需要自己搭配定制的。同样,硬盘分区、格式化文件系统、设置引导程序、安装显卡驱动和配置输入法也是如此,需要 Linux 用户自行定制。
这种定制,还不是简单的只有一种办法实现,所有人都有一致的体验。由于 UNIX 哲学里的机制与策略分离,以及 Linux 生态中大量软件是自由软件的缘故,用户经常会发现“解决问题的办法不止一种”。甚至极端一些,“解决问题的框架”也不止一种。以输入法为例,Linux 生态的输入法框架至少包括 IBus[1] 和 Fcitx5[2] 两种。只有框架显然是不足以完整使用输入功能的,因此还需要有对应的输入法实现,输入法在不同的图形化界面(框架)下的集成,以及补充输入法能力的词库和其他支持。
这样的环境催生了 Linux 生态的两大特点。
其一是 Linux 生态中的软件往往是开放源码的。这不仅仅是 GNU/Linux 的出生带来的号召力,也是面对种类繁多的生态的最佳选择。例如,在其他桌面系统和手机系统上都广为人喜爱的搜狗输入法,在 Linux 生态当中只支持有信创动力加持的 Ubuntu 系列系统,且仅提供 deb 安装包和仅兼容 Fcitx 输入法框架。在 Ubuntu 上游试图把默认输入法框架从 Fcitx 改成 Fcitx5 的时候,搜狗一家公司没有人力支持,也未开源代码允许社群支持,最终一再拖延上游的更新计划[3]。反观开放源码的 Rime 输入法,则在第一时间得到社群爱好者的支持,社群共建完成了对新框架的集成。
其二是 Linux 存在数量巨大的发行版提供商。前面提到,要想基于 Linux 内核搭建一个完整的桌面环境或服务器,需要做一系列的定制化。虽然这种定制化给予了用户极大的自由,以至于近乎每个问题都不只有一种解决方案,但是很多时候,用户只是想要一个能够满足桌面环境下个人需求,或服务器环境下生产需求的,类似 Windows 或 Mac OS X 的集成系统。Linux 发行版主要的工作,就是打包一系列应用软件和工具链,提供给用户一个开箱即用的“操作系统”。
在所有 Linux 发行版当中,占据主要份额的是 Arch Linux[4] 系和 Ubuntu[5] 系。
Ubuntu 发行版由 Canonical 公司提供商业支持,提供了用户友好的图形化安装界面,并且针对尝鲜用户、个人桌面用户和企业服务器用户设计了专门的开箱即用路线。由于 Ubuntu 已经定制了相当部分的应用框架和应用软件,Ubuntu 系的其他发行版更像是不同品牌商在预装 Windows 操作系统之后提供一些自己的捆绑软件。
相较之下,完全由社群维护的 Arch Linux 发行版奉行极简之道。它只提供最基础的安装程序和 AUR 中央软件库,并辅以完善的 Wiki 文档帮助用户自行定制 Linux 系统。Arch Linux 系的发行版除了都使用 AUR 软件库以外(甚至 Manjoro Linux 都选择了自建软件库),从图形界面到每个功能软件的选择,都可以是大相径庭的。
从上面的例子当中,我们可以看到,开源软件的用户群体明显的分成两类:一类是使用 Arch Linux 发行版的,追求自由使用和修改软件,也有意愿和能力做定制化的,我们可以称之为黑客(Hackers);另一类是使用 Ubuntu 发行版的,期望提供商直接交付一揽子解决方案的,或者在商用层面需要乙方兜底的,我们可以称之为顾客(Customers)。
开源软件的商业化,主要瞄准的是顾客的需求,通过满足顾客的需求收费。黑客群体往往只在生态繁荣上做贡献,并不直接参与商业化的进程。
黑客的需要
无论是自由软件运动还是开放源码运动,基本的理念都包括以下两点:允许用户出于任何目的免费自由地使用和分发;允许用户获得源码,自行改进演绎并发布修改后的版本。
对于黑客来说,第一点是能够使用自由软件或开源软件的前提,自不必谈;但第二点能够获得源码,修改后使用,也是至关重要的。
例如,@fkxxyz 在使用 @VOID001 的软件 ssf2fcitx[6] 为 Fcitx 框架下的输入法使用搜狗拼音皮肤时,发现了一些存在 BUG 的情况,以及 ssf2fcitx 不支持 Fcitx5 新框架,于是他就自己修改实现了 ssfconv[7] 来满足自己的需求。
值得注意的是,在 ssfconv 的 README 当中有这样的表述:
于是,我看了他的源码,发现逻辑还挺简单,然后看了下 fcitx 的自定义皮肤的各种格式,打算亲自研究研究这是怎么回事。最终打算参考这个项目,自己用 python 写个。由于 fcitx5 也支持主题,最终也实现了转换成 fcitx5 主题!
这样的动机和能够自由修改软件以解决自己需求的心情,正是黑客的典型特征。
例如,Apache Doris 起初是百度的一个研发团队基于 Apache Impala 的代码演绎的,Apache Kvrocks (Incubating) 起初是美图基础软件团队用 C++ 重写的 Redis 持久化版本。小米在使用 Apache HBase 的过程里遇到了种种实际需求,为了解决这些需求而编写的代码,大部分以厂商中立的形式进入了上游,少部分企业独有的逻辑保留内部实现。某电商企业基于 Apache Kafka 魔改出了一个支持消息队列语义的内部软件,以支持业务需要。
这些企业内部研发团队基于开源软件的二次开发活动,也符合黑客的行为动机。对于上游社群来说,企业在生产环境的使用和二次开发,对开源软件的声誉传播、缺陷修复和生态发展是大有裨益的。然而,一旦企业选择了雇佣黑客团队基于开源软件开发和维护,那么这样的企业会采购其他提供商生产的基于上游软件的服务的可能性就极大降低了。我在为某公司基于 Flink 打造的流计算平台工作的时候,就遇到过用户公司交流平台选型的经验,结果人家一个平台研发团队的人就比我们算上支持人员还要多,这样的组织结构是不可能采购提供商的服务的。
顾客的需要
不同于富有探索精神和动手能力的黑客,顾客的需要往往是简单直接的解决问题。当然,一个人或者组织完全有可能在某一方面表现出黑客的特性,而在另一个方面表现出顾客的需求。
例如,前文提到的电商企业,虽然维护了一支二次开发消息系统的团队,但是在数据库的选型上,还是直接使用了云厂商的 RDS 服务。例如,不少曾经花费大量时间鼓捣 Linux 系统定制化的黑客,为了特定的生活工作需要,或者单纯就是为了省事儿,也会为 Windows 系统或 Mac OS X 系统付费。曾经热情洋溢地写出《完全用Linux工作》[8]的王垠,不再折腾之后以一篇《谈 Linux,Windows 和 Mac》[9]揭露了顾客最需要的“用户友好”性。
顾客在开源软件和专有软件之间做选择的时候,是不太在意能否获得源码和有没有自由演绎并发布的权力的。顾客的需要是一款能够直接解决他的问题的软件或者一整套服务,免费最好,不能免费也可以考虑,只要付了钱以后乙方可以兜底解决问题。
例如,有次交流数据库选型的聊天,一位基层决策人就以“开源 + 省事”评价使用 TiDB 能够直接解决数据量超过单机 MySQL 并且提供基础的 AP 查询需求的优势。我顺着问他,这里提到开源,是开放源码重要,还是免费商用重要。他毫不犹豫的回答是免费商用重要。另一名参与者补充“锅是谁的重要”。
这就引出面向顾客需求的第一个商业化模式:提供咨询和订阅。
大名鼎鼎的红帽公司就是以订阅模式起家的。由于 Linux 以 GPLv2 发布,红帽基于 Linux 做的发行版,在内核修改的部分都是开放的。由于红帽公司只是 Linux 生态的参与者,Linux 的核心生产力在上游,所以大的技术方向红帽公司也只能配合上游社群前进。这种情况下,红帽选择的商业模式是提供面向企业需求的订阅服务,解决企业重视而上游社群不提供的版本稳定性、售后支持和维保承诺。
后来的 Canonical 公司有样学样,瞄准对 Linux 操作系统好奇的个人,以及对 Linux 服务器生产部署有需求的企业,量身定制了一键启动的路径和售后的支持。在 Ubuntu 的安装页面,你可以选择基于 Live USB 安装 Ubuntu 尝鲜版本,在不涉及主机的情况下开始个人体验;你也可以选择企业生产环境安装的配置,Ubuntu 为满足各个国家和地区的合规要求做了专门地定制。国内信创的部分 Linux 发行版,例如 Ubuntu Kylin、Deepin 和统信 UOS 等,都是基于 Ubuntu 发行版改的,可见 Ubuntu 为企业使用作出的努力。
再说回红帽公司,除了赖以起家的 Linux 订阅服务,近年来它还推出了可以算作 Kubernetes 发行版的 OpenShift 解决方案。同样,OpenShift 主打的也是企业用户开箱即用和全方位的售后支持。对于顾客来说,既想赶上 Kubernetes 带来的云原生技术革命,又无力承担维护一个顶级技术团队的开销,还希望能够有乙方能够对使用过程里出现的问题兜底,选择 OpenShift 或其他 Kubernetes 发行版就是一个值得考虑的选择。相同的道理还可以套用在想要搭上 Istio 快车从而选择 Tetrate 的 Istio 发行版乃至完整的云原生应用网络框架的顾客。
后面这两个案例,一半是咨询和订阅的范畴,另一半就是基于开源软件提供行业解决方案的第二条开源商业化的道路了。
基于开源软件提供行业解决方案,意味着开源软件不再是产品销售的核心,最多是一个立住声誉的招牌和深层依赖的底座。业内最成功的例子,应该算 Databricks 基于 Apache Spark 一路做起来的一系列行业解决方案。起初,Databricks 和慢人一步进入云领域的微软 Azure 达成合作,在 Azure 上捆绑销售 Apache Spark 性能优化的发行版。随后,Databricks 以 AI 为切入点,在 Spark 生态推出了 SparkR 和 PySpark 等集成,而在商业产品侧针对 AI 的典型计算任务提供了标准化算力资源和一揽子解决方案。再后来,Alluxio 和 JuiceFS 的探索让 Databricks 发现了 Spark 的计算能力加上存储以后的巨大需求市场,于是自研了 Delta Lake 软件,提出湖仓一体概念兜售新的解决方案。随着公司逐渐站稳脚跟,Databricks 也有了更多的资源投入到先前 AI 阵线上如今火起来的 AIOps 概念,以及完善整个湖仓一体故事所需的,包括 Delta Live Table 在内的一系列周边产品。
尽管 Databricks 为了应对开源的数据湖软件的冲击,挤牙膏式的开放 Delta Lake 的代码,但是从公司整体的发展轨迹来说,越是商业化驱动的产品服务,越和开源软件沾不上边。到如今,Apache Spark 只是一个隐藏在最赚钱的产品服务深层的基础构建块,一个高效的计算框架,但是用户为商业产品和解决方案付费的逻辑,早已不只是你用没用 Apache Spark 了。
开源的优势
应当说,顾客做选择的时候,不会直接因为产品基于开源软件开发而另眼相待,如果产品本身是对开源软件的简单包装,那么企业客户更有可能挑战付费的意义。毕竟,把 VS Code 打个压缩包放到 CSDN 上卖能骗到一些散户,同样的逻辑在面对企业的时候却很难奏效。
基于开源软件的商业化,其竞争对手是包括专有软件的。顾客会把所有可能的选项摆出来,权衡利弊作出判断。由于顾客一般不在乎源码可得性,出了问题期望的是乙方解决,而开源软件可以免费商用,反而经常成为销售难以回答为何付费的挑战。另一方面,确实有企业基于开源软件赚到了钱。那么开放源码的方式对商业化有什么优势呢?
开放源码的软件用户可以免费试用,这对降低用户门槛和提高长尾用户占有率有帮助,具体逻辑跟免费增值的商业模式是类似的,这里不再赘述。
开放源码特有的核心优势,是形成庞大的生态。
Cloudera 的主要商业产品 CDH 能够一键部署和维护整套基于 Hadoop 的大数据套件,为用户解决多个大数据组件之间复杂的配置和版本兼容的问题。但是为什么顾客会希望采用基于 Hadoop 的大数据解决方案呢?这就得追溯到一开始 Apache Hadoop 以开源软件的姿态出现,吸引了一大批黑客加入并逐渐构建出完整生态的故事了。这个生态的开放性,孵化了 HBase、Hive 和 Impala 这样的周边技术,就连 Spark 和 Kafka 起初也是面向存储在 Hadoop 上的数据设计的。提供和 CDH 同类服务的厂家比比皆是,除了微软和谷歌的云厂商几乎每家都会做一个。相比之下,作为 Hadoop 技术来源的 GFS 和 MapReduce 却一直和 Google 平台绑定,技术演进只能靠 Google 一家,潜在的顾客也只有铁了心上 Google 船的企业。
开放源码是生态繁荣的重要条件。自由软件运动和开放源码运动对源码的强调,根本上是对软件运行逻辑也就是蕴含在软件当中的知识的分享要求。自由软件基金会对自由软件的解释[10]提到用户应当有理解软件运行逻辑的自由,以及理解之后作出改动且分发修改版的自由,获取源码是一个必要条件。
试想 Hadoop 如果不开放源码,那么关键的数据存储格式和网络通信协议就得靠猜,且不说专有软件通常禁止破解从而让真的去破解的开发者背负法律风险,企业随时可以秘密的变更格式,或者引入提供商绑定的加密/检验逻辑,使得第三方维护生态集成或拓展的成本急剧升高最终放弃。即使专有软件的发行企业没这么做,但是企业有这么做的权力和能力,潜在风险也足以劝退所有第三方。
生态的繁荣对顾客的选择是一个重要的考量。顾客为什么选择基于 MySQL 的 RDS 服务,就是因为熟悉 MySQL 的人才供应充足。TiDB 以对 MySQL 的兼容为立足点,逐渐在 DBA 群体中传播 TiDB 的运维经验。而开放源码使得大量的运维集成工具,在黑客的交流过程当中能够被自由地创造和共享,巩固了 TiDB 的生态,也就强化了顾客对 TiDB 作为可靠解决方案的信赖。
StreamNative 在 Apache Pulsar 的投入是另一个典型的例子。在服务顾客的过程中,StreamNative 把一些常见的功能需求都开源实现出来,包括以 Helm Chart 的方式部署 Pulsar 集群,一系列不同系统的集成,基于消息协议处理框架开发的对 AMQP、RocketMQ 和 Kafka 的客户端协议支持。这些软件源码开放以后,得到了大量用户的试用和反馈,其中的黑客型用户能够准确报告漏洞甚至自行修复后回馈上游。这样,多方参与打磨 Pulsar 生态解决各类问题的能力,作为 Pulsar 服务的提供商,至少在说服顾客选择 Pulsar 这一点上就有巨大的优势。
值得一提的是,源码开放并不总是符合企业的利益,因此在企业具备选择权的时候,开放或者不开放源码,是值得考虑的。
StreamNative 的案例里,生态繁荣以让 Pulsar 站稳脚跟是主要目的,市场占有率和客户使用 Pulsar 的信心是关键,而用户当前很少因为集成的有无付费,因此开放源码是正收益。对于必须使用相应集成的顾客来说,订阅 StreamNative 的服务也是最实惠的。
再看一个数据集成的例子,Airbyte 起初也主打完全开源营造市场声势,但是在它赢得一部分市场之后,发现其他厂商之间复刻 Airbyte 源代码提供同质服务,当即就把 Airbyte 的协议改成 Elastic License 2.0 来禁止竞争。不过,Airbyte 依然以 MIT 协议许可数据集成模块和命令行工具的代码。这意味着 Airbyte 通过禁止其他厂商复刻其服务端代码和 UI 代码来杜绝商业竞争,同时又开放集成模块来鼓励各个作为数据源和数据汇的软件来与自己集成。
上面提到,用户选择 CDH 的理由之一是避免被单一提供商绑定。然而,从提供商的角度来说,能把用户绑定在自己的产品服务上,才是最优的。我们逐渐能看到,像 CockroachDB 和 Akka 这样有能力改变软件许可的公司,在商业发展受到冲击的时候,几乎必然会选择修改软件协议禁止商业竞争。考虑到开源软件的发展常常是社群共同努力的成果,这样的行为其实是收割了社群的声誉。关于这方面详细的论述,可以阅读我早前的文章《诱导转向的伪开源战略》。
另一方面,像红帽、Confluent 和 StreamNative 这样依托于开源软件发展商业模式的公司,既没有能力去改变上游软件的开源协议,也因为创始工作并非创办企业之后完成的,自身是开放源码的受益者,也就没有太多的纠结。
未来的“开源商业化”公司,基本将会分化成基于已经存在的开源软件做商业产品服务的公司,跟完全自有知识产权,选择性开放软件源码的公司。
在公司掌握软件知识产权的情况下,经过 MongoDB 和 Elastic 等一众公司下场演示,还想直接进行商业竞争的企业应该会大幅减少。而失去了直接的竞争,企业也不会刻意将已经宣传开来的开源协议自己改换成禁止商业竞争的源码公开协议。这样,创始公司一家独大,非商业竞争的黑客用户协同开发,将会是这类企业及软件的最终生存形态。
而知识产权由中立第三方掌握,典型的是各个开源软件基金会的情况,企业将在繁荣生态和顾客对供应商绑定更少的担忧,与更加激烈的商业竞争环境下求存。一个典型的道路是:在自己对上游影响力较弱(红帽)或者技术代差没有形成(Databricks)的时候,通过提供订阅服务和制作发行版来生存;而后,如果能够基于开源软件打开自己的企业级解决方案产品线,开源软件对公司而言就成为一个优秀的技术底座和持续的声誉来源,企业级解决方案中的专有软件,或者市场唯一的专家团队,将是其他竞争对手无法跨越的壁垒;如果很难建立技术代差,则围绕生态提供更全面的咨询订阅服务(IBM)。
References
[1]
IBus: https://wiki.archlinux.org/title/IBus[2]
Fcitx5: https://wiki.archlinux.org/title/fcitx5[3]
更新计划: https://bugs.launchpad.net/ubuntu/+source/language-selector/+bug/1928360[4]
Arch Linux: https://archlinux.org/[5]
Ubuntu: https://ubuntu.com/[6]
ssf2fcitx: https://github.com/VOID001/ssf2fcitx[7]
ssfconv: https://github.com/fkxxyz/ssfconv[8]
《完全用Linux工作》: https://dywang.csie.cyut.edu.tw/dywang/download/pdf/linux-wangyin.pdf[9]
《谈 Linux,Windows 和 Mac》: https://www.yinwang.org/blog-cn/2013/03/07/linux-windows-mac[10]
自由软件的解释: https://www.gnu.org/philosophy/free-sw.en.html