热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开源,基础软件最好的商业模式

开源,基础,软件

Milvus 向量搜索引擎已开源。欢迎大家在 Github 上关注我们。

虽然已经 2019 年,但还是有不少人(甚至是大部分人),一提到“开源”,想到的就是“免费”与“个人开发的业余(低水平)软件”。然而事实恰恰相反,今天“开源”正是基础软件最好的生长模式。“开源”能对基础软件公司提供三方面的助力:技术/品牌推广,用户/开发者拓展,人才吸引。

是不是言过其实?让我们一起细细探究什么是“开源”。

“开源”简史

“开源”( Open Source )这个口号源于 1998 年的一次软件黑客峰会。当时,自由软件运动已经进行了 15 个年头。

软件自由

1969 年, Unix 操作系统诞生于贝尔实验室(隶属于 AT&T )。当时的 AT&T 因为反垄断原因,被限制不得进入计算机行业。因此 AT&T 最初对 Unix 的源码进行免费分发。然而,1982 年针对 AT&T 不得进入计算机行业的禁令失效了。

1983 年, AT&T 发布了大名鼎鼎的 Unix System V 。同时 AT&T 改变了 Unix 的授权模式,将其变成了收费的闭源商业软件。AT&T 的行为只是当时软件行业的一个缩影,很多企业或个人都一改过去的源码免费分发模式,而转向闭源的商业软件模式。由此催生了自由软件运动(始于 1983 年)。发起人 Richard Matthew Stallman ,业界尊之为 RMS 。(能被人用 3 个字母的缩写指代的美国人,都不是一般人,比如 JFK 。)

RMS 是学院派黑客的典型代表,他发起的自由软件运动不仅针对商业软件,更关乎用户自由使用软件的权益。自由软件运动虽然有过于理想化的问题,但它所代表的社区力量的觉醒早已深深影响了今天的软件行业。

经过不懈的努力与坚持,1990 年代自由软件阵营终于迎来了重量级的成员(使用 GPL 许可证)—— Linux ( 1991 )和 MySQL ( 1995 )。既然自由软件逐步走入正轨,为什么还要打出“开源”这样一面新的旗帜呢?

黑客与商业

1994 年,Netscape 公司成立。通过独创的 Javascript 编程语言和浏览器渲染引擎, Netscape 最风光的时候独占了浏览器市场 90% 以上的份额。Netscape 浏览器本身是收费的商业软件,但用户也可以选择下载免费的评估版。

然而,微软也瞄准了网络浏览器这个赛道。通过在 Windows 上内置 Internet Explorer 的方式,微软快速蚕食着 Netscape 的市场份额。尤其 1998 年,微软发布的 Windows 98 中内置的 Internet Explorer 4.0 从功能上也压倒了 Netscape 的产品。岌岌可危的 Netscape 在卖身于 AOL 之前做了一个大胆的决定:公开 Netscape 网络浏览器的源码。(日后它将重生为 Firefox ,与 IE 展开新的争夺。)不过自由软件过于理想化的理念,显然与 Netscape 这样的商业公司存在一定的差异。

正是在这样的背景下,O'Reilly 召集了黑客社区中的重要成员: Linus ,三大脚本语言( Perl/Tcl/Python )的发明人, Netscape 公司代表, Apache 维护者等重量级人物一起召开了一次讨论会。讨论的重要成果之一是明确了不论是自由软件,还是开源软件,最重要的共性便是公开源码。这也是“开源”这个口号的由来。另一个开放式的话题则是,如何将开源背后的黑客文化与商业市场相结合。谁曾想 20 多年后的今天,我们依旧在寻找这个问题的答案。

因此,开源项目不应该避讳谈商业模式。因为从“开源”诞生的第一天,商业模式的探索就是其中重要的一环。可以说开源理念是对自由软件思想的延申,开源理念强调——共享与合作开发软件源码是有商业潜力的。

LAMP

“开源”,生逢其时。 1997/1998 亚洲金融危机之后,一方面资金回流美国,另一方面美国的利率也处于较低水平。第一轮互联网热潮( dot-com bubble )越发汹涌。

当时商业软件与服务器过于昂贵。开发人员开始采用 PC 硬件和日后大名鼎鼎的 LAMP 开源技术栈来构建自己的网站。 LAMP ,即 Linux 操作系统, Apache 网络服务器, MySQL 数据库和 PHP 开发语言。不夸张的说,这些开源软件就是互联网早期的明灯( lamp )。

时至今日,Linux 和 MySQL 已经是地球上任何数据中心里的标配。而 Apache ,更是成为了巨无霸式的开源基金会,拥有 1.9 亿行代码。根据 COCOMO II 模型估算,这些代码的开发成本超过 200 亿美元( 2019 年报)。可见本文一开始提到的两个关于“开源”的偏见是多么可笑。

创新先锋

开源软件的基因中深深印刻着黑客社区的精英文化与创新精神。即便从自由软件运动开始算起,“开源”的诞生也不过 30 多年。但“开源”已经对今天的软件产业,甚至整个 IT 产业带来了深刻的启发与影响。

如果回溯近 20 年的 IT 产业发展脉络,以下几个标志应该是公认的:

互联网、移动互联网,云计算

整个互联网行业引领了近 20 年的 IT 技术发展。始于 1990 年代的互联网虽然是非常年轻的行业,但也是对 IT 技术最敏感的行业。开源 LAMP 技术栈为互联网行业的发展奠定了基础,而互联网行业的急速发展也帮助孕育了大量开源软件。

最初当 SuSE 和 Red Hat 将 Linux 引入企业服务器市场时,开源软件只是商业软件的低成本替代品。 在相当长的一段时间里,开源软件都忙着去补齐相比商业软件所缺失的能力。但即便是在那个阶段,开源软件也贡献了不少创新的工具,组件和理念。其中最典型的一个例子, MySQL 数据库将计算引擎与存储引擎两部分进行了独立的模块化设计(和今天说的云环境下的计算与存储分离不是一个概念)。 MySQL 允许用户选择自己需要的存储引擎,甚至这个存储引擎可以是由另一个公司开发的。(虽然现在 MySQL 和 InnoDB 都在 Oracle 手里,但早先他们其实是两家公司。)Db2 和 Oracle 可没这样的操作。

及至最近十年,移动互联网与云计算大放异彩。 Redis , MongoDB , Spark , Docker ……这些带来创新理念的基础软件,无一是按照传统商业软件的模式进行运作的。

大数据

大数据这个概念, 1990 年代就开始出现。早期对大数据价值的挖掘利用,主要是通过 EDW/BI (企业数据仓库,商业智能)这样的解决方案来实现。当时, Teradata 是数据仓库中绝对的霸主。而 IBM 通过收购 Cognos 和 SPSS 在 BI 领域占有重要的位置。这些商业解决方案当年主要服务于金融,电信,大型制造等行业。

大数据的特点之一是价值密度比较低( 2 倍的数据无法带来 2 倍的价值)。因此传统的分析处理方式虽然在性能上也许依然可以满足要求,但在成本上却很难被用户所接受。一直到 2005 年 Hadoop HDFS 的出现,数据处理的成本大幅下降。终于在开源软件的推动下,企业级的大数据分析处理能力变得唾手可得。

机器学习与深度学习

2016年 DeepMind 研发的 AlphaGo 4:1 战胜李世乭。由此将人工智能的这一波浪潮推向了新的高度。这一轮人工智能还能走多远?这个问题的答案见仁见智。但值得注意的是,各种主流的人工智能平台框架( Tensor Flow , Caffe , Keras , PyTorch , Paddle Paddle 等等)都是开源的。甚至英伟达这样的硬件厂商都推出了 RAPIDS 这样的开源 AI 框架。

开源软件的创新之处,不单单体现在技术上。更重要的是开源软件背后的开放协作理念,以及对软件价值的重新定义,彻底改变了今天的软件世界。

重塑软件价值

时间回到 2009 年,那正是商业软件公司欣欣向荣的时代。那时笔者是 IBM 的一名软件售前工程师。同事们热烈讨论着日暮西山的 SUN 究竟还有什么出路。 有传闻 IBM 会收购 SUN,不过这样的收购恐怕过不了反垄断调查。

谁曾想 Oracle 最终出手。这笔交易完成后, Oracle 成为了与 IBM 一样的集软硬件,服务于一体的全栈型企业 IT 公司。 Oracle 与 IBM 之间的双雄争霸似乎将会从数据库领域拓展到企业 IT 的各个领域。

然而,我们知道这样的事情最终并没有发生。 Oracle 与 IBM 双双迷失在这开源软件大爆发的时代……

传统商业软件的玩法

我们都知道传统商业软件通常采用许可证( license )销售模式。一般的流程是,软件厂商会将用户的硬件配置(比如 CPU 核数,存储容量等等),代入他们的神奇公式(公式里的各种常量大概都是上帝确定的),最终计算出软件许可证的金额。

那么用户支付许可证费用以后,就能愉快的使用软件了吗?对于软件厂商来说,还有两个问题:

  1. 许可证费用一般都给了很大的折扣(为抢标,报价 1 块钱的也不是没有)。
  2. 许可证往往是一次性收费,今年收了,明年怎么办呢?

因此除了一次性收取的许可证费用,软件厂商又设计出了按年收取的软件升级保护费用(通常是按比例从许可证费用折算而来)。 只要购买了升级保护,用户以后就可以一直使用最新的“版本”,而无需重新支付许可证费用。 Oracle 称其为许可证支持( license support ), IBM 称其为订阅与支持( subscription & support )。

按照一般的直觉,人们会认为商业软件的核心是许可证费用,软件升级保护只是许可证的附加产品(毕竟连计算方法都是跟着许可证走的)。但事实往往是反直觉的,请看 Oracle 2017 年财报:

2017
收入
Total revenues 37,728
New software licenses 6,418
Software license updates and product support 19,229
成本
Total operating expenses 25,018
Research and development 6,159

单位:百万美元

原来,软件升级保护收入超过整体收入的 50 % ,是新售软件许可证收入的 3 倍,也是整个公司研发支出的 3 倍。真是了不起的成就!也正是依靠这个基本盘, Oracle 的转型之路还算是比较从容。足见可持续性收入对于软件公司有多么的重要。

为了保住 license support 的收入,2018 年开始 Oracle 甚至修改了自家数据库的发布周期与命名规范。既然 license support 是按年收取的,那么每年至少要发个“版本”,不然用户这一年的升级保护不是白交了么?但其实例如 Oracle 18c ,它并不是新的数据库“版本”。严格意义上讲,它是 Oracle 12.2.0.2 ( Version.Release.Modification.Fixpack ),更像是一个 fixpack (或者按 IBM 的叫法是 function level )。

按照惯例, fixpack 升级本来也不需要购买升级保护……

Oracle 未来的“版本”发布节奏

顺便说一下,这里为什么只给出 2017 年的数据呢?因为自 2018 财年第 4 季度开始, Oracle 不再单独列出软件升级保护的收入金额,转而将软件升级保护收入与(总是达不到市场预期的)云收入合并后一起汇报。(这波操作厉害。反正都是按年收取的可持续性收入,合并也没毛病。所以说 Oracle 是最牛的商业软件公司。)

其实何止 Oracle , IBM 和微软也开始采用淡化版本的方式进行软件发布了。这些商业软件巨头一个个学起了开源软件的迭代模式,可见“开源”对软件行业的影响多么巨大。

“开源”带来的改变

目前比较常见的开源基础软件商业模式是这样的:

  1. 针对一般用户,提供基础开源版本,满足用户的基本需求
  2. 针对核心用户,提供收费的高级版,满足用户的进阶需求(如分布式,高可用,以及工具链软件等)
  3. 收费模式通常是以软件订阅的名义,按年进行支付

坦白地说,目前开源软件的商业设计比起传统商业软件还是稚嫩了不少。甚至,开源软件的订阅模式与传统的软件升级保护,形式上看似乎也没有那么大的区别。但为什么开源软件能造成这么大的影响呢?原因在于,开源软件的模式触及了用户心中长久以来的一个疑问:软件究竟是什么?

传统商业软件公司将软件以产品的形式卖给用户。因此,用户花钱买来的软件许可证以及软件升级保护是一种资产。什么样的资产呢?既不生息,也不能转售,只会慢慢折旧的资产。这样的资产放着有什么用?谁又会喜欢这样的资产呢?

而在开源模式下,软件开发者向用户提供的是一种服务。这种服务不单纯只是软件本身,还包括了软件的前期开发过程,以及使用/试用反馈。可是,难道传统商业软件公司不从用户那里收集需求?不听取用户的意见来改进自己的产品?没错,这些他们都做了。但有多少用户感受到了呢(除了少数几个特殊照顾的大客户)?

其中的区别可以用 SuSE 公司的口号来说明:“ We're the open open source company ”。“开源”背后的关键之一就是开放协作( open collaboration )。以开放的流程与心态,方便用户参与到软件的设计,研发,及反馈中。哪怕用户不写一行代码,他也可以参与其中。通过查阅公开的文档与问题记录,用户能清楚的了解项目的进展,设计的思路,存在的问题及解决方法。这不仅仅是“参与感”,用户也能建立起对项目的控制感与信任。一个可参照的例子,华为为了赢得英国电信市场的信任,主动将通信产品相关的源码与开发流程交由英国监管机构审查。

更改版本命名规则,让用户觉得每年的升级保护没有白买,是一条容易的路。构建一个开放协作的环境,为用户提供软件服务,是一条困难的路。

我们,选择那条能通往未来的路。


推荐阅读
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
author-avatar
原文W
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有