从「开源」的早期讲起,其实和大多数人想象的不同,软件一开始并不是闭源的。
在上世纪 60 年代,IBM 等公司开发的软件都是自由分发的,同时也提供源代码。那个时候的商业模式更多是以硬件为主,软件作为硬件的附属品,属于支撑硬件工作的东西。这才是开源历史上的早期阶段。
后来随着硬件销售的利润下跌,制造商只能另辟营收,才开始单独销售软件,并且不再提供源代码。从这里也可以看到商业模式在某种程度上,其实也是一种轮回 —— Apple 在硬件销售利润上达到了瓶颈,于是开拓了软件服务的收入。
直到 1983 年,一位曾在 MIT AI 实验室工作的程序员 Richard Matthew Stallman 对企业在源代码上的垄断非常不满,发起了 GNU 项目,这个项目标志了自由软件运动的开始。
当然,自由软件运动更像是社会运动,而开源则更偏向于软件开发方法。但这并不妨碍我们理解:开源历史的过程其实是 —— 开源 → 闭源 → 再开源。
回到正题,聊聊「开源的行为」,为什么要开源?
其实在开源史上,我们也可以看到 —— 开源一直和商业是「相爱相杀」的,崇尚自由精神的程序员看不惯大公司对源代码的垄断,发起了自由软件运动;而今天,大公司却纷纷开始拥抱开源。
一言概之:开源就是用事实标准去建立生态。换言之,开源是培养用户、确定行业标准和赚钱的重要手段。
比如说云计算行业,像虚拟机、数据库都是商业化比较好的。因为这些技术相对成熟、也有标准的接口,实现也更可靠。很多开发者会将其作为自己的基础技能,因此云厂商可以用标准化来进行规模化,从而实现盈利。
但是另外一些组件,像消息中间件、离线计算等,并没有很统一的标准,开发者使用这些组件的学习的成本比较高,云厂商提供的服务自然也高。所以云厂商就希望通过开源来推广自己的产品,把这些工具发展成为开发者的基础工具套件,才能提高 enterprise 版本的销量。
举个例子,Google 就希望使用 K8S 来确定集群管理的标准。
所以不难看出,开源行为在当前阶段,已经变成了商业的一部分,或者是商业的一种手段。
当然开源本身还是能给开发者带来很多利处的 —— 比如白嫖。但我们也并不需要排斥它有商业的诉求,如果能接受开源就是商业模式的一种,后边我们就可以讨论开源是如何赚到钱的。
还是从事实标准讲起,开源所建立的事实标准带来最明显的好处是 —— 隐形绑定。这个很好理解,某项技术已经是业界标准了,那你推基于这项技术的产品还很难吗?
与此同时,开源对商业的帮助还在于:开源所形成的社区生态,可以对商业市场产生支撑。
从产品角度而言,社区生态关乎开源产品的可持续迭代,良好的产品迭代是商业化的基础,在此不做冗述。
而从商业的角度来看,对公司来说开不开源其实是一种价格策略 —— 开源与否解决的是价格的问题,开源相当于对该版本进行免费(在该产品采用的协议范围内)。
同样举个例子,软件研发管理平台 CODING 在全面免费之后,收入反而提高了。虽然开源面向的是开发者,但是技术产品的商业行为就是一种 ToB 的生意,该付费的还是会付费。
所以我们就不难理解,为什么现在大公司开始扎堆开源,当然有 KPI 的因素,但我们今天只讲理论模型。
有些开源项目开着开着就死了,有些开源却能得到公司的长期支持,注意了 —— 长期支持一定是要对公司的商业有帮助才行。因此公司在讲开源的时候,背后必然设计了一种商业模型来承载这个项目。
再举个例子吧 —— 阿里的云原生战略
战略 | 面向金融市场推出基于云原生的 PaaS 解决方案,提高市占率并盈利 |
标准 | 制定云原生战略标准 Open Application Model Specification,拉上微软支持一起合作 |
产品 | SOFA, OpenKruise, Cloud Native App Hub |
生态 | 在 OpenStack 领域和 Cloud Native 领域持续发展,建立国内 Service Mesh 社区 |
基本上大厂的开源方法论,都可以从标准、产品和生态三部曲,来推出厂商的真正商业目的(or 野心)。
聊了那么多商业的事儿,铜臭味太大,谈谈开发者理想。
开源绝不代表把代码往 GitHub 一扔,公关稿一发,大喇叭一喊 —— 我开源啦!
开源最重要的是社区环境,是一个为 PR (Pull Request) 战斗的游戏,这样的开源项目才能有勃勃生机。
一个成功的开源项目,必然有大量的开发者参与。对比于一般的项目管理,它的协作复杂度会空前的高,这个时候如果靠人治、靠热情,显然是不可持续的。
这里推荐一本书《大教堂与集市》,这本书讲了传统软件开发和开源软件开发在项目管理上的不同之处。
从书名上我们也可以一窥全豹 —— 传统软件开发的项目管理,更强调明确的目标、工期资源以及质量的之间平衡;而开源项目一般都会依托于开源社区的管理和运营,包括开源基金会的运作,也是遵循开源社区的治理模式。
从开源社区治理原则的维度来看,有三点我觉得很重要:
如果你提交过代码,你就知道,每次提交都会有 commit 记录。
同理,对于开源项目的任何讨论与决策,也都应该有记录,并且任何人在任何时间都可查询可追溯。
这样才能让第三方开发者(或者其他利益群体)能够聚集到这个开源项目中来。通过公开、透明的讨论、决策来推进项目管理。
共识意味着彼此尊重,当然某些时候可能会有效率的损失,但这是值得的。因为开源项目的发展一定会涉及不同的开发者、不同的利益群体,达成共识才能推进下一步的前进。
如果不是开发者,第三个原则可能和大多数人的常识相悖。
是这样的,开源社区的话语权,是由你对项目/社区的贡献大小决定的。你做了贡献,才能得到他人的 respect,才能获得社区给予的职责。
精英可以理解为「有威望」,这样才能够吸引更多的人积极参与到开源项目和社区活动,使之保持活力。
总的来说,在现实意义上,对公司而言,开源是商业手段的一种。但这并不影响开发者在开源过程中受益,它也是开发者技术交流和技术理想的实现过程之一,不必因为「开源行为」刚好也能挣到钱而说它忘了初心。
君不见尤大尤雨溪做开源都财富自由了 (bushi
最后还想说的是 —— 开源项目不只需要程序员,还需要其他各个领域的人才,艺术家、音乐家、设计师和文档撰写者也都可以一起做出完整的作品。