今天刚好群里有朋友在问,你们为什么开源了 Apache Dubbo,你们内部是不是有更好的闭源的实现吖?看过《淘宝技术这十年》的小伙伴都知道,内部其实很多部门都在使用一个叫 HSF(High Speed Framework) 的 RPC 框架,江湖人称 "好舒服"。
那为什么内部在使用一个闭源的 HSF ,开源项目却是 Apache Dubbo 呢?
首先一个项目能不能开源,除了看公司的意愿外,还有一个很重要的一点,这个项目是不是依赖了很多内部的其他项目。打个比方说,如果一个项目,缓存中间件指定要使用 Tair ,配置中间件指定要使用 Diamond,这个项目一开源出来可能就得嗝屁。
为什么呢?
就两个最浅显的理由,第一Tair 外部搭建成本太高,其次Diamond 干脆就不是开源的。这就尴尬了,如果这样干的话,那么开源出来初始牛逼哄哄,但是所有人都没法自主搭建,因为只是开源了一小部分出来背后的很多依赖项外部都不满足。再举另外一个例子,Google 在写大数据三大马车的时候,也有一个一致性中间件 Chubby 是没有任何人知道如何实现的,而且在论文中完全没有出现任何容器技术的字眼,这在当年是故意还是偶然的就不得而知了。
想开源,从商业角度上全盘共享出来太亏,部分开源技术角度上拆分又太难。
反过来讲,那为什么内部不将已有业务迁移到开源的组件上呢?第一是历史包袱比较重,历史上每一项技术都有它产生的背景,要迁移古老的代码谈何容易,所以有一些公司即使技术落后,在能满足当前业务需求的情况下,不会轻易去进行技术架构变更。第二呢是开发熟悉程度,作为一个内部框架,它跟内部的很多中间件都配合得非常好,而且对于内部中间件也有很多的优化,内部开发人员如果要熟悉内外两套东西,从成本的角度来看无疑是非常高的。如果内部你用A组件 ,我用B组件,我们要怎么标准化通信呢?这无疑增加了开发的成本。
成本与收益,能解释很多事情为什么做,为什么不做。
Apache Dubbo 是一个 Apache 顶级项目,并不是每一个Apache 项目都是顶级项目。简单来说,就是有些顶级项目会包含一些子项目。每个顶级项目都有独立的委员会来管理。
Apache 开源项目的建立大致分为三个阶段,提案、孵化、毕业。提案阶段需要有委员会的三位导师联合提名,一旦提名成功会成立委员会保障这个项目的进行,这个阶段除了看项目还要看创始人的社交能力。孵化阶段就是开源项目代码,优化build方案,建立社区等等,构建社区参与度。毕业阶段就是Apache 委员会里绝大多数导师同意毕业,那就毕业了,成为一个顶级项目或者其他顶级项目的子项目。(参考自 Google)
难吗?难。看质量看关系还看耐心,有一堆听都没听过的项目好久都没毕业。
如果一不小心,啊真的开源成功了,有很多人很多公司都在使用这个项目,那么恭喜你,好日子来了,坏日子也来了。
会有很多人使用。
会有很多人吐槽。
会有很多的需求列表。
会有很多的update list。
会有很多的教程。
会有很多的code review。