图片来源@视觉中国
文 | 显微股市,作者|小北,编辑 | 蔡玉
2021年,“鼓励企业开放源代码”、“完善开源知识产权和法律体系”被写入了国家“十四五”规划。
开源,这一刻被真正意义上被提到了“国家战略”的高度,成为未来科技发展不可忽略的一环。
所谓开源,是指在开发软件后,将它的源代码公开分享的一种行为,任何人都可以查看、修改、分发开源代码。
它是一种“集市文化”,任何处于这个“集市”中的人都可以对代码提出自己的见解,共同进入到软件开发的过程中。在中国互联网发展的早期阶段,开源快速补齐了中国在技术上和国际的差距,促进了互联网的蓬勃发展。
从开源的历史里也不难发现,那些获得认可、掌握最流行的开源项目的人,后来大多成了新标准的制定者,能在未来技术标准、系统框架的入口,品牌效应上具有优势。
如今,各个顶级互联网企业都在积极拥抱开源。
阿里有超过2万人在为开源添砖加瓦,开源项目超过1700个,在Github的企业贡献总榜中排行第12名;腾讯的首个AI开源项目Angel则在2019年12月底从LF AI基金会顺利毕业,那是linux基金会旗下面向AI领域的顶级基金会。此次顺利毕业意味着它得到了全球技术专家的认可,成为世界最顶级的AI开源项目之一。
蚂蚁在云原生、数据库、前端和移动端等领域开源了800个项目,成长起来20个国际范围内顶级社区明星项目。
百家争鸣,共同繁荣,中国已逐渐生长出越来越亮眼的开源项目。
近年来,中国开发者已经成为全球开源体系中的重要力量。公开信息统计显示,中国的代码在全球开源社区的比重已占40%左右,目前全球6000多万开发者中,至少有2000多万来自中国。
但我们也好奇,相比国外,中国的开源历史也只有短短三十年时间,这三十年,到底是哪些人在默默推动开源环境的变化?
而从“一无所有”到“繁花似锦”,中国又是如何逐渐走出自己技术自主的道路的?
本期显微故事找到了那些在中国开源进程中默默贡献的程序员们,希望从他们身上,看到中国开源的跌宕三十年。
以下是关于他们的真实故事:
为了打造中国自己的数据库,我赌上了最宝贵的十年
让我们把时间拨回到21世纪的前十年。
2010年,中国互联网迎来蓬勃发展,团购网站大行其道,网络游戏方兴未艾,中国的网民数首次突破4亿大关。
也就是在那一年,国务院新闻办公室首次发表了《中国互联网状况》白皮书,互联网从那时起越来越多地进入大众的视野。
从这一年往前看,开源及开源所带来的开放、共建的“集市文化”,很大程度上帮助了中国互联网的建立;往后看,数量越来越多的网民,十三亿中国人所带来的有别于西方互联网的各类需求,都在暗中推动着技术自主的诉求的产生。
快捷地拿来别人的代码直接使用,和耗费心力、创造属于自己的代码,这两种倾向的暗流涌动,在2010年这看似平静的水面下,已初现端倪。
最先让人感知到的是“数据库”自建的必要性。
在计算机领域,数据库是最基础的设施之一,任何软件的运行、用户的访问操作,都会涉及到数据库的信息存储和操作功能。
它就像地基,为计算机上的软件使用提供最基本的底层架构。但当时,顶尖的数据库都来自美国,其中又以甲骨文的Oracle数据库的使用最为广泛。
在那一年,线上购物平台淘宝的同时访问量已达到百万量级,庞大的数据量就需要购买Oracle庞大的数据库,而这笔支出是惊人的。
时任阿里首席技术官的王坚算了一笔账,把1万亿元GMV折算成数据量,再折算成需要的IBM小型机数量、Oracle数据库量、EMC存储数量,再换算成具体价格相加,得到他们每年需要给IOE的采购费200亿元。
这笔钱甚至超过他们每年所赚的利润。
从那个时刻开始,数据库的自建被提上了议程。阳振坤授命开启了自建数据库OceanBase项目的道路。
图 | 阳振坤和OceanBase早期团队在一起
当时,业内领先的五大数据库里,有两个数据库是开源的。较为简便的方法是直接把开源数据库的代码拿来修改和使用。但作为OceanBase的创始人,阳振坤拒绝这样做。
加入阿里前,阳振坤从事分布式系统研发,加入阿里后,摆在他面前的有两条路:一是加入正在快速发展的淘宝业务团队,主管技术,这是一条已经能看到很大的发展机会、相对清晰的道路;但阳振坤选择了另外一条道路:从头组建团队做一个技术平台,把OceanBase数据库做出来。
一方面,当时主流的数据库都是集中式分布数据库,根本无法适应大规模、同时性的数据访问,但当时淘宝的同时使用人数已达数百万,继续用集中式分布数据库,承载困难,且造价很高(集中式分布的数据处理和存储通常设在高端服务器和高端存储设备上,成本很高);另一方面,阳振坤也想做出中国自己的数据库。
他提出了分布式数据库的理念:在数据库内把数据切小,放到多台计算机上。只要大多数计算机运转正常,数据就能够得到保障。
同时,因为硬件采用的PC机,成本也会降低。另一方面,他把数据库的两大功能:记账和数据分析,组合在了一起,以往需要用到两个不同的数据库系统来满足的功能,在阳振坤的构建里成为了一个一站式解决方案。
这个构想当然很好,但要真正建立,却需要至少好几年的时间,业务不等人。
阳振坤只能在这个体系构想之下,每次逐步迭代一点点的功能,小步快跑地把整个体系构建起来。
他一个一个地跑业务部门,终于找到收藏夹有一个数据库的需求。
用户在淘宝进入收藏夹后,都会调取数据库。收藏夹是用户常用的功能,基于淘宝当时的使用人数,收藏夹所涉及到的数据十分庞大,用Oracle非常昂贵,因此成为业务部门的一个烫手山芋,也成了阳振坤能证明OceanBase的开始。
阳振坤接下了这个需求,用2个月做了模型,6个月投入使用。
从这时开始,阳振坤的OceanBase逐渐证明着自己。从一个基础的收藏夹需求,到2014年双十一Oracle崩溃,OceanBase临危受命承担支付宝10%的交易流水,再到承担支付宝100%的交易。阳振坤用十年的时间,终于搭建起了中国人自己研发的数据库。
这个数据的地基,才算真的被夯实了起来。
“主流的五大数据库里,最晚出现的是MySQL,1996年,此后这么多年,数据库领域一直没有大的更新。因为数据库做起来本身非常复杂、耗时很久,需要一些很优秀的人,一直持续不断地投入,十年才能见成效。”
2012年,阳振坤来到蚂蚁集团,在支付宝海量数据的应用场景的锤炼环境下,正式开始了OceanBase分布式数据库研发和替换Oracle的长征之路。
但做出来并不是全部,数据库的一切都要拿到数据去验证,而只有越来越多的业务场景验证,才能让大家了解和接受这个新生的数据库。
研发十年,要被市场接受,至少也需要十年。
2021年,OceanBase开源,释放出了它的内核。对OceanBase来说,开源带来的越来越多的使用者、越来越多的业务场景能帮助它迭代得更稳健,也能让它更为大众接受。
对阳振坤而言,他还有一点自己的“私心”:希望中国的开源能更加自主。
“开源是大家有来有往才能构建一个社区,如果我们只是拿别人的东西来用,形成惯性,可能就不会想自己去研发东西了,这就会导致我们没有自己的技术,成了我们‘被别人开源’。
现在我们在软件领域用的很多核心的东西,如数据库、操作系统,都来自美国,底层基础设施部分我们研究得还比较少,开源也大多在上层的应用系统上。这是不平衡的。我希望我们的开源可以逐步往产业链上游走,走一条更难、但价值更大、可持续的路。”
在开源的集市里,完善一个新领域的底层设计
阳振坤搭建起了原生分布式的数据库,为数据库这类基础软件能承载中国十亿网民吃了一颗定心丸。
但互联网的繁荣,需要的不仅是地基,还有合适的土壤,以及土壤上能长出的姹紫嫣红、争妍斗艳的花园。
一个合适的土壤,这正是Kata Containers的创始人、蚂蚁集团资深技术专家王旭想要做的事。
王旭接触开源很早,他学生时代正值Linux传入中国,自由软件运动也为这些学生所了解,开源领域领袖级的人物Richard Stallman针对以UNIX进行商业发布而不再提供源代码的“闭源”,提出自由软件的概念,后来逐渐演化出“开源”的概念。
Richard Stallman(RMS)创立了自由软件基金会FSF,提倡软件是人类共同的精神财富,和牛顿定律一样,不应该被公司圈起来。
如今我们担心“传染性”的GPL,正是RMS精心设计的保护源代码万世开放的法律基础,正是在这种保护之下,开源社区逐渐发展壮大。
可以说,开源从最初兴起时,就充满了理想主义色彩。而对王旭来说,他的第一印象就是“好玩”,一台裸机,网络还没连上,他就能玩上好几天,反复尝试各种代码,在代码的广阔天地里遨游。
随着越来越多地接触开源,王旭发现,开源本身自由、开放、共建的特质,能让软件迭代得更好。
在开源著作《大教堂和集市》里,作者Eric Raymond指出:世界上的建筑可以分为两种,一种是集市,天天开放在那里,从无到有,从小到大;还有一种是大教堂,几代人呕心沥血,几十年才能建成,投入使用。
毫无疑问,开源就是一种“集市”,当更多的用户参与其中,不断review后,开源软件反而能因有了更多的用户反馈,而获得更好的迭代。
王旭喜欢开源所代表的这种“集市文化”,他写过玩Linux的电子书,翻译了很多文章,并在那时候就在心里埋下一颗种子,想做一个自己的开源软件。
这个机会在2015年出现了。
在2014年,Docker(容器技术)已经逐渐被人们所认识。从前计算机上运行应用,不同机器环境的差异性总是一个非常棘手的问题,会发现程序会出现一些或大或小的行为差异。
对于大规模系统的运维来说,保持环境的一致性、确保应用行为的可预测性,就成为了一个非常复杂而有技术含量的问题,自然也是个有价值的课题。
但Docker一口气从源头上解决了这一问题。它用了一个容器,把代码、运行环境、系统工具、系统库、设置包了进去,像一个罐子一样,拿着这个罐子,程序在任何操作系统都能畅通地运行。
当时Docker喊出了一句口号:“Build once,RunAnyWhere。”完全无视开发、测试、生产环境不一致的干扰。
程序写完之后打包成镜像,就可以随处部署和运行。这对当时总要考虑运行环境、总要修bug的程序员来说,实在是天大的诱惑。
毫无疑问,Docker技术在当时的代码圈和程序圈非常轰动,而王旭瞄准了这个机会。
同样是2010年代,随着互联网的发展,大量的程序都在往云上走。当大家都在尝试在云上部署应用,为云开发代码时,一个无视运行环境影响,直接能让软件运行的容器化环境,无疑能让软件开发如虎添翼。
如果容器化与云结合起来,那么后来的应用开发者和使用者,就不用再思考从集群硬件管理到维护操作系统环境这一系列的烦心事,他们只需要确定需要什么服务,如何定义应用,就可以了。
所有应用底层抽象的事情被全部剥离了出来,变成了花园底层适合所有植被生长的土壤,后来者不用再考虑土壤问题,只需要考虑想要什么花、什么树,就能直接种下去,这就是所谓“云原生”的原始动机。
虽然这在未来必然是一个趋势,但容器化和云要完美结合,天然会产生一个矛盾:容器这个技术的安全隔离性不够,和云的结合需要大量的额外保障,来破坏这之中的简洁之美。
传统的操作系统容器技术的隔离指的是管理上的隔离,并不是指它运行起来就互相不干扰、没有安全风险,相反,因为同一个操作系统上的容器之间共享了很多状态,安全风险是很难消除的。
而云上又特别讲究用户之间的隔离性,它会假设每个人都是陌生人,不同的用户之间要隔离住,要互相不能侵犯,同时互相之间的干扰也要尽可能小。
它既是趋势,又因隔离性而面临困难,王旭他们因此想到,可以做一个软件增强容器的安全隔离性,做一个「安全容器」。
但实际上,要增强操作系统容器的安全性是比较困难的,学界也有一些研究证明容器和安全之间有不易解决的死结存在。
当然正如David Wheeler所说,“在计算机科学中,所有问题都可以通过增加一个间接层来解决”,容器安全性也不例外。
但David Wheeler也说,“这解决不了间接层过多的问题”,多增加一个间接层会带来复杂,不仅影响美感,也带来滋生Bug的土壤。
后来,王旭他们想到了主流云主机里都会使用、早已被证明安全的虚拟机技术,于是反向思考能否将虚拟机技术剪裁到容器这种轻量快速结构,并基于这个思路推出了runV。
图 | 王旭和Kata Containers团队
这和英特尔的clear containers是同一个思路,二者用完全不同的代码实现了同一种方式解决容器上云的安全问题,两个项目的发布时间同是2015年5月。
2017年9月,王旭他们团队和Intel开源技术中心共同决定,将这两个容器合并,并放入OSF基金会进行管理。
2017年12月,Kata Containers项目正式发布,并成为OSF基金会2012年以来的第一个新顶级项目,王旭作为联合创立者之一,成为项目Kata架构委员会的创始成员。Kata容器和半年后发布的来自谷歌的gVisor并称为目前两大开源安全容器技术。
开源,对王旭来说,是一件愉快的事。这代表着他在开源这个集市里,不仅是基于别人的代码进行迭代,也做出了自己的原创性贡献。并且,因为安全容器是一个新的方向,所以更需要被人关注,需要更多的人参与进来。
“开源对我们来说,带来的裨益远大于挑战。安全容器并不是一个强势品类,有越来越多的竞争者参与进来、被人看到,也才能让大家知道这个方向确实是可行的,在我们开源后半年,google开发了gVisor,又过了半年,AWS(亚马逊云)也开源了新的安全容器相关的firecracker项目,这些“竞品”对我们来说更多的不是竞争的压力,而是在云原生生态系统里更容易得到上下游的支持了。”
对王旭来说,开源代表的不仅是软件的共建,还具备一些文化属性,它是一个关于“人”的活动。
如今我们开源的产品越来越多,但在开源文化上还处于比较初期的阶段,王旭也在和其他单位的开源工作者一起,作为TOC成员,共建中国自己的开源社区——木兰开源社区,这里除了开源项目的参与者们,也包括开源研究者,比如木兰开源许可证的作者北大的周明辉老师等,木兰社区通过导师辅导、项目孵化等各种方式帮助国内开源人成长。
他希望通过自己的一点努力,让中国的开源做得越来越好。
2021年,世界顶尖开源基金会CNCF中国区TOP10的贡献者中,有4位来自蚂蚁集团,都是王旭团队的成员。这四位技术同学主要参与了Dragonfly和Nydus这两个互相关联的开源项目。
从第一行代码就开源,让中后台也能拥有良好体验
当地基、土壤都已准备就绪,再往上走,便是花园里的花花草草,这些植被对应在计算机领域,则是上层的应用系统。
应用系统千姿百态,但如何让应用系统的体验性更好,则是一个共通性问题。
蚂蚁集团的前端工程师偏右(花名)想要解决的就是这个问题,他聚焦的是中后台体验领域。
2015年,开源社区里出现了关于中后台设计系统的开源编码,这是一个“写下第一行代码就开源”的项目,后来它成为设计交互领域名列前茅的开源软件——Ant Design。
偏右印象很深的是,前端开源界举足轻重的人物,Sea.js项目的核心开发者玉伯(花名)来到支付宝时,他不仅带来了前端模块化开发框架SeaJS,还开启了以开源项目运作的研发模式。
从Sea.js开始,所有的代码、项目管理、问题追踪、发布,甚至文档的所有内容,全都是在GitHub的流程下完成的。这给偏右带来很新鲜的体验。
当一个软件完全开源,吸引了很多开源社区的同学一起讨论、共建后,偏右发现,他对整个项目的理解通过群策群力的讨论而拓展了。
渐渐地,除了完善整套Sea.js项目之外,他们也基于Sea.js生态而延展出了一整套开源的项目,尝试自建自己的前端生态体系,也落地在了支付宝的早期内部业务中。
开源,从那时开始就印在了支付宝前端团队的DNA里。
到了2014年,支付宝业务全面all in无线,前端团队解体,当时整个团队的人都面临一个选择:转岗去做移动端开发,或者留下来做PC端的前端开发。偏右选择了后者。
中后台的前端,这在当时是一个「不在聚光灯下」的概念。大部分前端关注的仍是To C业务,且前端在大部分时候是美工、实现工,当前端放入中后台,它的机会在哪里?
正是在那个自我反问与思辨的时刻,作为支付宝中后台前端负责人的玉伯,找到了前端与中后台结合、面向To B业务的方向。而中后台庞大的业务量,也迫使玉伯从将前端的重点从单点的展示,向系统化的建构演进。
事实上,当时从整个行业大环境来看,前端也正处于单点化向工业化演进的项目中。
此前的前端多是一些小的、零星的项目,而到了2014年左右,一些前端技术框架开始出现或者流行,比如现在的三大框架Angular.js、React、Vue。当时大家都在讨论,前端会往什么方向走。
内部需求和外部诉求的结合,让玉伯、偏右等人重新审视前端的价值,他们找到了“体验”这个方向,系统地对整个前端的呈现予以梳理。
FaceBook的React框架出来后,他们押宝React,基于它做前端组件库的研发,这成为了后来Ant Design项目的核心内容。
从这时起,偏右他们所做的内容从工具,过渡到整个前端的体验与实践上。
在此之前,前端通常做的是组件库、UI等实现功能的内容,但从Ant Design开始,他们在设计软件时将整个设计规范给融了进去,并将之提到了很高的位置,这样做出来的设计,至少能保证体验下限。
融入设计规范,这直接改变了中后台整个的设计逻辑。
以前支付宝没有统一的设计规范,都是根据要实现的功能去做功能组件,把组件放入页面设计稿里去,这使得这些组件通常情况下都不会再二次运用。
Ant Design出现后,使用者不用需要从零开始造技术套件,用套件就能有这些基础体验,能满足使用者的基本要求。
Ant Design设计时提出了几个关键词:默认可用、默认好看、默认好用。功能好用、界面好看,才能让用户的体验感提升上去。
“很少有人关注中后台的体验,但中后台的体验同样重要,有设计规范在,不说达到样样90分,但能在省时、省力的情况下,达到60、70分。”
构想很好,但要落地,却发现有很多挑战:
当时偏右他们是前端工程师团队,没有设计师,玉伯为此专门组建了设计团队。
他们押宝的React生态还不完善,工程链路也不完善,但业务下个月就要上,没有太多时间,Ant Design 团队就深入业务,贴身服务和下场写业务代码,终于把这块硬骨头啃了下来;而中后台设计的大量需求进来后,也会涉及到设计需求的边界在哪里的问题,偏右定了很多设计规范,将设计行为系统化、标准化。
图 | Ant Design 团队(摄于2021年5月21日)
就这样逐步迭代,Ant Design才最终成型,而在它被开源到网络上后,也在一定程度上引领了业界关注中后台体验的风潮。
偏右印象很深的是有一次See Conf 大会,有一位德国小哥邮件他想来现场看一看。他在德国时看到了Ant Design的开源项目,对其很感兴趣,还帮忙翻译和提出BUG。后来他了解到偏右他们在杭州,还特意跑来杭州留学。他甚至不会中文,但对技术的热爱,让他来到这个国家,来到杭州。
就是那个时刻,偏右感受到了开源的力量。
“做开源的过程中,确实会感觉到地球是平的这件事。Ant Design背后有一两千个贡献者,这些ID背后可能是一个完全不同文化、不同公司、不同种族、不同国家的人。我们的小众语言、键盘交互,以及残疾人使用友好的内容都是由这些个体补足,是他们的存在,才让Ant Design能适用于这个世界更多的人,给更多人提供帮助。”
“开源的过程中,感觉到地球是平的”
从Richard Stallman提出开源概念开始,开源就具备了一种反抗权威的特质,与中国传统的侠义文化相互映照,成为开源能在中国生根发芽的根基。
到了2010年左右,开源本身,又成为可以帮助商业化的一个渠道,一个大家认可的、做得好的产品、积累了一定程度的用户和市场份额,向商业化转型就会更容易。
开放自由的氛围、反权威的侠义精神,以及能走向商业化的道路,使得越来越多的人乐于把自己的产品开源出来,开源也越来越蓬勃地发展起来。
从1995年清华大学建立的“水木清华BBS”,到1999年创办的CSDN论坛,再到从讨论逐渐兴起的各种项目,MiniGui、SmartBoot Manager、LVS,再到大厂开源蓬勃发展繁衍而出的各种程序:
从阳振坤所做的底层基础设施的数据库,到王旭把握时代趋势而解决硬性问题的安全容器,再到玉伯团队所做的上层的体验创新,每个时代的开源人都各自拿出了亮眼的表现。
在中国开源的二十余年里,我们从“别人那里拿来”,到“自己创造”,正是这一个又一个技术人的默默付出,使得我们国家往技术逐渐自主的路上走去。
当下,开源被提到了国家战略的高度,科技改变世界,而开源在其中必不可少。
中国的开源,有像阳振坤这样的科学家,王旭玉伯这样的开源前辈,也需要无数像偏右这样的后来者,大家集思广益,在开源这个集市里共建,才能让中国开源生态百家争鸣。