起 因
收到好友陈绪博士的邀请,他希望我给他的开源公共号写篇文章,介绍下我和开源的一些故事和体验。
今年是2018年,从开源新闻网站上看到一则消息,今年正好是开源20周年,即“Open Source”这个词1998年被创造出来并使用和传播的第20个年头,从我最早开始接触开源,也是自1998年开始,到今年正好20年。
初识开源
记得1998年下半年的时候,我还在北方交通大学(现已更名为北京交通大学)读研究生二年级,接触开源是从一本书开始的。这本书真是影响了我的技术生涯。我现在查了下,那本书是《Linux实用大全》,陈向阳和方汉编著,而且随书送Red Hat 5.1的光盘。
我当时有买计算机书的习惯,不知道怎么挑中了这本书,一下子接触到了开源和Linux,如果不是这本书,估计我还会在Window上做VC/VB/PB的程序开发N久,因为当年上半年,刚在一个小公司用VC/PB开发项目,挣了5K,拿到了人生中第一笔靠编程挣到的钱。
在二手书网站上搜了下这本书,书的封面如上。记得这本书写的相当好,深入浅出,而且随书附送Red Hat 5.1的安装光盘,我把它翻来覆去看了好几遍,并且很快就在实验室我的台式机上安装上了Red Hat 5.1,从此便和Linux/开源结下了不解之缘。
然后就是学习各种Unix/Linux的知识,记得当时还在校园里组建了一个Linux 兴趣小组,跟另外一个同样对Linux感兴趣的在读博士benben一起玩Linux,并面向本校学生组织过几次Linux的技术分享(例如Linux介绍和安装,X-window的使用,Linux下的编程等)。很快我申请成为校园BBS-可爱的家BBS站上Unix版的版主,搬来了大量Unix/Linux相关的知识,后来又成为该站的SYSOP,和当时的站长们Duke,Ufo,Eric等在BBS上快乐地学习和玩耍。现在回想起来,为什么当时对Linux这么着迷,就是觉得会Linux很Cool。
当然作为一个程序员,很快就在Linux上捣鼓程序,全部在Linux上完成,Apache Httpd作为server,用C写CGI程序,用Gcc编译,用Gdb调试,各种命令行的操作,确实很Cool。很快利用所学的Linux知识,去一个小公司编程打工,写了一个个人网站系统,半个月就挣了1万块。于是发现了,利用开源能学到不少东西,在工作中用这些学到的东西又能解决实际问题,能挣到钱。从此就走上了跟开源相关的工作生涯了。
第一份工作:使用开源替换商业产品
2000年研究生毕业后第一份工作是在一家互联网电子商务公司,当时正好赶上第一次互联网热潮,公司拿了大笔投资,然后居然在巨高大上的写字楼---国贸二期上班。一开始我做系统管理员,成天就是捣鼓各种系统软件,比如重新编译下Linux内核来提升速度,安装个Squid来加速啥的,要做各种备份啥的,全都是基于各种开源的软件,用得比较熟。
不过公司当时花了不少钱买的几个业务系统,包括网站发布系统,商城系统都不是很好用,性能较慢,而且增加功能十分不方便。记得那个商城系统,每天晚上需要捣鼓一次数据,一次就几个小时,而且还容易出错,得人盯着,而且为了不影响业务,操作还只能在凌晨运行,所以几乎每周都得和几个主要技术负责人进行轮流值班,即每周都要有一天在公司过夜,晚上跑脚本,然后定个闹钟眯一会儿,起来看脚本跑出错没,如果跑出错了,还得处理下,然后第二天正常上班。
后来老板看我编码和管理都还凑合,就让我带领几个研发工程师开始编写各种互联网系统,渐渐把这些价格很昂贵但是又慢又麻烦又不好改的系统全部替换掉了。先是用典型的LAMP系统,即Linux+Apache+MySQL+PHp把网站发布系统给替换掉了。
后来用J2EE的技术和方案把商城系统也替换掉了。用J2EE的时候,把Sun的J2EE源码带的PetStore源代码和文档仔细研读了好多遍,最后也是模仿它的做法,遵照Sun推荐的最佳实践,查询商品用Servlet,浏览商品用Session EJB,交易商品用Entity EJB,页面用JSP。当然现在想起来用EJB不太合适,太重了,但是当时2001年的时候,确实是潮流,Sun开源的J2EE确实给我提供了很好的学习案例和源码参考。
第一份工作干了1年多,第一次dot.com泡沫破灭,911事件加速了这个过程。记得很清楚,当时公司大会上总裁说美国都这样了,我们要裁员转型,于是我离开了这家公司,来到了我很向往的技术Geek公司-Sun。
第二份工作:参与并回馈开源
当时是2001年底的时候,Sun在北京刚刚成立中国工程研究院,并组建了第一个研发Team,负责研发Solaris上的浏览器。我加入其中,和团队一起基于Mozilla做Solaris系统上的浏览器,当时团队的经理是Luke,Lead是Jay和Henry,还有很多活跃的同学,像Peter,Kevin,Steven等。第一次亲身了解在一个成熟规范的开源社区是如何工作的。
记得Mozilla当时的版本才到0.9,但是源码巨多,很多模块巨复杂。在我的Sun Blade机器上完整编译一次要7、8个小时,所以每次完整编译都是在晚上。我们完成编译之后,就开始各自在Mozilla社区上干活。而Mozilla社区是一个非常规范也非常活跃的社区。
我提交第一个Patch的过程颇为漫长,但是至今仍记忆犹新。记得当时是在Mozilla的bug系统中看到一个bug,说它内部的JS Engine缺少一个获取环境变量的函数。我想这个很容易,一个系统调用getenv就完事了,很快就把patch做出来,并提交上去。提交之后才发现没有那么简单,才是刚刚开始。当时Mozilla社区中进行代码审核的分为一审和二审,他们叫reviewer和super reviewer。负责代码一审的同学告诉我写的patch代码风格不对,得按照Mozilla的Code Style来写。很崩溃啊,之前在小公司干活没这个要求,赶紧按照他的要求改完之后再提交。一审通过之后,二审的同学说不行啊,你没有遵照Mozilla的组件规范来进行调用,不然会导致跨平台的时候会出现问题。改,接着改。改完提交之后,二审同学接着说,不行啊,这个函数不应该在这个对象里面,应该在另外一个对象里面才是抽象的比较合理。前前后后写这个patch,写了N个版本,每次写完都得用Mozilla的IRC工具去他们的IRC channel上找人来进行Review。最后这个Patch终于进去了,我也深刻体会到了在开源社区贡献一个社区认可的代码不是很容易的事情。
之后我在Mozilla社区继续贡献代码,记得贡献并和入超过10个Patch之后,向Mozilla官方社区申请并通过,获得了代码写的权限,2002年的时候成为Mozilla社区的Committer。成为Committer之后,发现这个角色责任很大,权限很小,因为提交代码之前都是要通过两级Review,而提交代码之后就得守着,得看各个平台的版本编译通过,Case跑过,性能没有明显降低才可以放松下。所以每次提交Patch,都很紧张,而且时不时还得盯着编译看板,看到各个平台(Mac,Linux,Window等)版本编译和测试结果都是绿色,才算完事。如果有编译不过的,有Case跑不过的,得尽快回滚。如果提交代码导致build break但是又没有及时处理,会导致臭的口碑,那么在Mozilla社区就没法混了。所以作一个Committer,真的是责任大,权限小,更多只是一个荣誉而已。之后Team做些Gnome相关的项目,也给Gnome社区的一些项目贡献了一点代码,也拿到了Gnome社区的Committer权限。
在Sun工作时间了8年多,中间也有机会去别的公司,但是没有,因为确实很喜欢Sun公司的工程师文化,包括开放/共享,尊重人,讲合作,同时在开源社区干活也比较舒心。在Sun也认识了不少同样投入开源的同事,包括陈绪博士,Emily同学,段少婷同学,Gavin同学等,我后来在百度做开源跟他们又碰上了,Sun的开源文化真是影响了不少人和公司。但是单纯的工程师导向公司,只有极个别能活下去。Sun被Oracle收购之后,我离开了,2010年的时候来到了Baidu公司。
第三段工作:推进开源
在百度工作几年,深深体会到了互联网行业的飞速变化,在呆过几个不是很成功的产品线之后,我转到负责提供研发工具和提升研发效率的工程效率部,2017年至今最近一年都在整体组织和推进百度开源的工作,包括引入开源,内部开源和对外开源,又回到了熟悉的开源界。
很欣喜地看到,在开源世界里面,中国公司和中国人不再仅仅是以索取者的身份来出现,领先企业华为/阿里/百度/腾讯等在开源界的声音也越来越大,投入和实际贡献也越来越多。对开源的玩法越来越熟悉,玩得也越来越溜,而且在遵守社区规则,理解社区精神的前提下,慢慢走上了前台和中心。这是非常令人欣喜的变化。这可能就是*说的自信心吧。
这一年多来,百度在开源的变化也非常巨大,尤其是在AI方面。无人车Apollo系统采用开源的方式进行运作,取得非常好的影响和进展,这可能是最适合百度的方式。深度学习框架PaddlePaddle的开源,给国人提供了一款跟国际潮流技术比肩的选择,发展也是非常令人欣喜。百度的优秀开源项目ECharts也正式进入Apache软件基金会的孵化过程,成为一个国际项目。Baidu成为LF Deep Learning Foundation的白金创始成员,在AI开源组织上终于跟上了步伐。同时百度内部的内部开源,也在朝着好的方向在发展。所有这些开源的变化,我都发挥了或大或小的作用。当然百度的开源事业都才刚刚起步,距离成功还很远很远。但是一个好的开始,就是成功的一半,不是吗?
回顾20年
回首我跟开源的20年,我深深体会到开源对个人、对公司、对行业的影响。开源不再只是趋势,它每时每刻发生在周围,每时每刻都在影响我们的工作和生活。
可以从开源中学习,跟全世界一流的程序员一起讨论问题,这也是互联网带给广大学生的最大便利之一;可以直接使用各种开源软件,充分体会搭积木快速解决实际问题的快感;也可以在开源软件上搭建各种服务,站在巨人肩膀上做创新;当然也可以把自己的软件开源出来,引领其他高人一起讨论解决世界的实际问题等等。
所以,认识开源,利用开源,引领开源吧!
关于作者:
本文作者谭中意,百度资深工程师,开源技术深度爱好者,有近20年知名IT企业工作经验,现负责百度开源的推动和组织。
关于“Linux宝库”微信公众号:
欢迎关注"Linux宝库"微信公众号,这里每天发布最新的开源人物和开源事件。谨以此号记录Linux和开源业界的点点滴滴,为开源爱好者和从业者点亮人生。
- 责任编辑:鞠东颖-
- END -
Linux宝库
长按扫码,关注我们
为开源爱好者和从业者点亮人生