大家好,我是灵雀云陈恺,很高兴今天有机会和大家闲聊一下开源和云计算。
如果我们回头去看过去的20多年,在整个软件行业,尤其是基础设施软件领域,发生了两件最重要的事情,一是开源,开源作为一种软件开发和传播的模式,毫无疑问已经成为主流;二是云计算,它正在横扫整个企业IT市场。这两者之间又有一些微妙复杂的关系,所以我们今天展开聊一下。
现在所有人的视线都聚焦在云原生这个新的趋势上,如果我们仔细想一下的话,云原生刚好是处在开源和云计算的交点,所以我们今天也从云原生的角度去思考一下,它对于云计算时代的开源能带来哪些启发。
1
灵雀云成立于2014年,我们是一家企业级开源公司,也是国内最早将开源K8s商业化的公司之一。在过去7年当中,我们一直深耕在容器、K8s等云原生开源技术领域,我们的主打产品ACP是一款全栈云原生私有云平台,目前服务着数百家各行各业的头部企业客户。
在这个过程当中,我们也开源了很多自己的技术,比如Kube-OVN,它是基于OVN、OVS虚拟网络的一个K8s编排系统,可以理解成是将传统虚拟化环境里成熟完整的网络能力平移到K8s社区。在今年年初的时候。我们把Kube-OVN捐给了CNCF,它现在是一个正式的CNCF沙箱项目,到目前为止,已经有超过160万次的下载,它和ACP一起服务着上百家企业级客户。
这里插播一小段历史,以及我个人和开源最早的一些渊源。开源软件的前身是自由软件运动,这两者之间的理念有些类似,但其实关注点不一样。自由软件是一种更理想化的信仰,它关注的是软件的自由而不是软件本身,比如说是否可以自由修改、自由分发,早期在很有黑客精神的程序员的圈子里面,比较容易让人产生共鸣。但问题是它很难破圈,把它放到工业界,尤其是在商业背景下,别人很难去理解这种信仰,所以后来才有了开源软件。开源软件不同之处在于它把关注的重点放到了软件上,就是要找到一种开发软件的更好的模式,以及去开发出来更好的软件,这一点对于开源软件后来的普及有非常大的作用。
20年前我在美国念大学,当时我们其实聊得更多的是自由软件,开源还是一个非常新的东西。感受非常深刻的是在学术界有非常强的自由软件的氛围,我自己也是深受影响,所以在当时我坚持只使用自由软件,不用任何商业闭源软件,操作系统用的是FreeBSD,更有意思的是,我当时试图沿着自由软件运动里面最核心也是大名鼎鼎的GNU这个项目,沿着它的脚印去把底层的所有的系统软件都开发一遍,所以我写了自己的操作系统叫Kai’s Operating System (K-OS),然后和同学一起设计了一款编程语言,是对Java做了一个扩展,做了一个函数式的Java,我们觉得函数编程是最优美、最接近数学的,也给它提供了编译器。当然这些东西都会开源。当时还没有GitHub,我们一般会在学校计算机系的服务器上去找个地方,然后托管自己的网站,把自己做的项目都放在自己的网站上。
言归正传,时间快进到今天,开源软件作为一种模式,很明显已经胜出了,就是业界已经达成一个共识,开源软件作为软件开发和分发的模式,相对于闭源软件来说是更优的。这体现在很多方面,比如它传播会更广、更快,会有更多人来使用,会有更多人来参与和贡献,所以它迭代的速度也更快,会更具有创新性,最后它体现出来的质量相对于闭源软件来说会更加好。
那么我们是怎样走到这一步的?之所以提我自己20年前的经历,是因为在当时搞自由软件的全是像我一样有兴趣和热情的个人,阵营的另外一边则是非常强大的一些商业软件公司,比如微软、苹果、IBM,当时并没觉得开源软件能够胜出。但是在2010年以后,沉淀出一批非常强大的互联网公司,像Google、Facebook,他们和早期的软件公司不一样的是,它们并不靠直接卖软件来赚钱,他们有自己的商业模式,比如Google提供的是搜索服务,他卖的是广告,所以绝不可能把自己核心的搜索算法开源出来,但它会开源别的东西,比如说自己用的基础设施软件、自己发明的编程语言或者是UI框架等。这就产生了一个重要的变化,就是开源软件的背后不再是像20年前由一群业余的人在做,它背后开始有一些技术实力非常强大的互联网公司,所以慢慢的开源这条路就被走出来了。
2
这扇门一旦打开之后,我们看到在过去的5到10年,涌现出了大量的初创公司,商业化的开源软件公司,这里我觉得又是往前走了一步,大家发现即便是软件公司也可以走开源这条路。
过去的整个20年当中,开源的生态会成长得这么好,我觉得当中一部分的原因是技术层面的创新,但同样重要的是商业模式的创新。
我们看一下整个开源背后的经济规律。开源软件因为传播非常广,会有非常多的人去用,如果是基础设施软件的话,会有很多人基于它去做各种各样的事情,所以可以创造出非常大的价值。如果在它背后有一个商业的开源公司,它会回收一小部分价值,通常只是它创造出来的价值的很小的一部分,然后回收的价值会重新投入到开源社区和开源项目里面,形成一个正向的循环。
因此,开源不应该是免费的。如果我们希望开源生态是可持续的,能够变得更加繁荣,需要找到一些非常适合的商业模式。下面列举三个最常见的开源商业模式。
第一种是纯开源的模式,通常卖的是服务,比如说商业支撑,也就是兜底服务或者咨询服务等。提到这种模式大家一般第一个联想到的就是红帽,红帽的确是一个非常成功的商业软件公司,但比较奇怪的是,似乎很难找到第二家在这个模式下成功的公司。我觉得红帽的模式有些不一样,我自己是把它叫做企业级的商业软件产品公司,比如说你想下载红帽的Enterprise Linux,需要先去购买它的订阅。因为它的代码虽然是开源的,但是卖的是整个打包发版的过程,或者说是它最终开源产品背后的一整条生产线。这里面包含了去集成各种各样的技术、质量把控、安全性、做各种各样的认证以及软件全生命周期的管理,这就有门槛了。
第二种是Open Core,开放核心,这是应用最广泛的一种模式。很好理解,就是开源项目本身是开源的、免费的,然后在这之上去开发一些闭源的模块或者扩展,拿这部分来收费。这里最大的挑战是去决定哪些东西开源,哪些东西闭源,要在商业化和社区之间做一个取舍。
这类开源企业为了商业化,会把原本完整的一个开源产品去掉一部分,开源出来的部分可以用,但是如果要在一个企业大规模的生产环境下去使用的话,会发现它少了一些东西,然后不得不去买其他商业化的模块。这样可能会造成一个问题,如果这个项目足够成功,而且这些商业化模块真的很关键,就会有别人去做,如果他提了一个PR,把这部分代码贡献出来,项目owner到底接受还是不接受,如果不接受的话,他可能会另外起个开源项目,就把原本闭源的部分给开源了。
第三种模式是SaaS,卖的不是开源软件本身,而是这个软件最终的价值,是一个托管服务。软件本身仍然是免费的,但是在生产环境当中大规模使用、管理、运维是一件有门槛的事情。这个模式可能是现在最受欢迎的,很多成功的开源公司或多或少都会提供自己的SaaS服务。SaaS模式的最大挑战是,公有云厂商有可能会提供类似的托管服务直接和你竞争。
3
这里既然提到了公有云厂商,就引入下一个话题,云计算对于整个开源的影响。过去的几年当中,开源公司和云厂商之间正在进行一场围绕着开源的战争。公有云的基本商业模式就是这样,整个公有云建立在开源之上,它可以迅速地把受欢迎的开源项目拿过来包装一下,变成一个托管服务作为平台的一个功能提供出来。这样就会动了原本这些项目背后的开源公司的奶酪,然后开源公司会反抗,他们反抗的方式一般是去修改协议,通常会在里面加一些反竞争的协议。
举几个例子,第一个做这个改动的应该是Redis,其实Redis本身核心的项目还是开源的,但是Redis Lab开发的周边的一些模块,修改了协议变成闭源,类似前面提到的Open Core模式。动作更大的是MongoDB,他们把协议改成了一个自己发明的协议,叫Server Side Public License (SSPL)。对于Mongo DB来说,纠结之处在于,云厂商并没有直接用他的代码,但是微软推出了一个产品叫Cosmos DB,AWS推出了Document DB,它们本身代码没有用Mongo DB的任何代码,但在API层面和Mongo DB做兼容,这也造成了竞争的局面。
最近的一个例子是Elastic。他们是Open Core的模式,所以保留了一些对于企业来说挺重要的功能,基本上所有企业级客户都会需要这些能力。然后AWS在它的下游开了一个发行版叫OpenDistro for Elasticsearch,然后把Elastic提供的商业管理的功能统统实现了一遍,然后开源出来。今年年初Elastic也修改了自己的协议,开始用的是Mongo DB的SSPL协议,后来又改成了自己的Elastic协议,限制云服务商的使用。这之后,AWS直接把Elastic search修改协议之前的最后一个版本7.10直接fork出来变成OpenSearch,然后自己继续维护一个开源分支,相当于不但在产品层面,在开源层面也形成了直接的竞争。
公有云的这种做法,对于开源公司的上述三种商业模式到底有什么样的影响。
对于第一种卖服务的公司来说,如果公有云厂商提供的托管服务已经提供SLA了,还保证稳定性、可用性和安全性,用户就不再需要去购买软件厂商额外的服务了;
第二种Open Core,如果开源公司把一些重要的能力变成闭源另外售卖,公有云厂商在他的服务里面完全可以把这些能力重新实现一遍,在托管服务里提供同样完整的能力,甚至像AWS那样,不仅实现一遍还把它开源出来,会对开源软件公司产生直接竞争;
第三种SaaS模式更显而易见,公有云厂商可以提供一个托管服务,直接和开源厂商的SaaS模式、SaaS的产品进行竞争,如果是基础的SaaS服务,它其实卖的不是软件本身,而是底层的运维能力,在大规模的生产环境下面,怎样确保稳定性、可用性、安全性,这些正好是公有云厂商的强项,开源公司如果想在这个点上和公有云厂商竞争也是非常困难的。
这里来说一下我的观点,问题并不是出在许可证上,而是出在商业模式上。开源软件想在一个企业的生产环境去大规模的使用和运维,是一个相当有阻力、有门槛的事情,对于这一点,公有云厂商提供了一个很简单的托管式的服务,能够更好地解决这些问题。
再往深一层,如果长期这样下去,对于整个开源背后的经济模式会有什么样的影响?当中最关键的环节就是这些开源的厂商如果没有办法回收这个开源项目创造出来的价值,它就没有办法持续地对这个开源项目进行投入,慢慢地这个价值链就会断掉。
想要解决这个问题,有两个方法,一是去优化商业模式,确保商业开源公司有办法去回收它的价值;二是去优化它的治理模式,确保开源生态中的其他厂商,比如说公有云厂商,如果从开源的生态里面获取价值的话,也需要再把这个价值贡献出来,投入到开源社区里面去。
4
说到这里似乎有一些沉重,是不是觉得云计算要把开源干掉?先说结论,就绝对不可能。开源作为一种软件开发和传播的模式,已经根深蒂固,而且老实说现在并没有更好的模式去替代它。而且,哪怕是在云计算鼎盛时代我们也会看到一些发展得非常好的开源生态,比如说前面提到的整个云原生的技术体系。接下来就从三个角度:技术本身、商业模式和开源社区的治理,来看一下云原生技术,尤其是K8s,对在云计算背景下的开源发展有哪些启发。
从技术角度来说,K8s和容器的确有一些特殊性,因为它自带可移植的属性,一定程度上拉通了不同的云厂商,以及公有云、数据中心和边缘的环境;第二,从某种意义上来说,它是第一个真正意义上的云操作系统,它会变成新一代基础设施的底座,基于这个底座已经催生出来了一个全新的云原生技术栈。这整个云原生的技术栈基本上都是开源的,而且可以运行在任何一个有K8s的环境,也就是说它不会被某一个厂商锁定,现在这个技术栈正在重构很多企业的基础设施,所以它会变得更加主流;三是K8s本身,我们知道它的核心是一套声明式的API以及基于控制器的一个编程范式,它可以用来编排,除了容器以外,还可以编排底层的基础设施,编排公有云服务,它会变成新一代的混合云或者是多云平台的一个公共的控制平面,最后会形成一套不但开放,而且标准的云的API。
从商业模式角度来看,K8s也提供了一个很好的范例,我把它叫做社区驱动、多厂商参与的松耦合的开放核心模式,什么意思呢?就是开源项目本身是中立的,不受任何一个厂商直接控制,所有的厂商都去确保开源社区是干净、是清澈的。之前好像听PingCAP黄东旭把开源社区比作一条河流,我觉得这个比喻挺好的,它的确是一条河流,而且是河流的上游,所有的厂商都不要跳到这个河里面去捕鱼,把它弄脏,而是想办法在这条河的下游以及岸边去发展自己的生态,不同的厂商用不同的方式去商业化,比如说公有云厂商提供基础的SaaS服务和托管服务,因为它最强的就是底层的运维能力,小一些的开源厂商也可以提供SaaS,但不要在这个点上和公有云竞争,可以往更上层去走,在上层提供一些有自己特色的能力,这样会避免和公有云厂商直接竞争,而是可能会形成一种互补。
关于社区治理,我们认为类似于CNCF这样的基金会可以在里面起到一定的作用。其实有不少经济学家去研究开源背后的经济学,其中有一个要非常小心避免的情况,就是不同厂家之间形成囚徒窘境,最后会成为双输的局面,而且对开源社区也没有好处。其中一个解决方式就是有一个外在的,第三方的agency介入进来,类似开源基金会,目的是确保项目本身是中立的,所有厂商能够比较公平地从中获取价值。所谓的公平就是投入越多的厂商,相对来说应该更容易获取价值。比如,基金会可以去promote贡献大的厂商,帮他们做宣传,让这些厂商在用户面前变得更加可见,可以去颁发证书,甚至可以更加直接地去资助一些优秀开源项目,确保这些开源项目能够有一些持续的投入。
最后这张图我在两年多前讲云原生的时候用到过,但当时并没有展开,这张图差不多可以总结我前面提到的所有内容。想强调的是,我并不觉得云计算把开源给吃掉了,而是云计算本身就是建立在开源之上,没有开源就没有云计算。而云原生我们可以把它理解成是云计算时代的一场开源运动,最后我们会有一个更加开放的云计算。
上一篇:灵雀云左玥:IT像城市一样演进
下一篇:数字化装备制造新标杆!灵雀云携手腾讯云打造三一集团技术中台