崔宝秋国际开源经验在小米开花 | 开源英雄

news2024/11/19 0:53:01

【编者按】崔宝秋的开源人生,来源于内心的真正热爱,和一路的升级打怪。从少时与计算机结缘到成为自由软件信徒,从IBM、雅虎、LinkedIn 到小米这一路走来,从一个开源的追随者成长为开源的推动者,小米的开源文化、丰硕的成果输出、吸引开源创造者,他始终都是核心所在。本期《开源英雄》,让我们一起走进崔宝秋的人生。

采访 | 刘韧

作者 | 谷磊、周扬       责编 | 唐小引

出品 | 《新程序员》编辑部

2012 年 6 月,北京,崔宝秋带着简单的行囊,落地首都机场,受到雷军的召唤,他准备加入小米。

告别家人,他在望京租了间房子,落了脚。

大学与雷军睡上下铺的崔宝秋,是上世纪 90 年代赴美留学的计算机博士、早期自由软件和开源软件的信徒、GNU Emacs 的贡献者……在美读博和在 IBM、雅虎、LinkedIn 的工作经历,让他看到了开源在不同土壤落地的过程。重回北京,他除了想在小米干出一番事业外,脑海里还萌生了一个想法——让纯粹的开源在中国落地。

时间回到 1999 年,接入因特网不久的中国政府有意使用 Linux,可 Linux 重要贡献者、开源运动旗手 Eric Raymond 对此公开表达了消极甚至反对的态度,他因刚发表的新书《大教堂与集市》而名声大噪。此时,自由软件信徒崔宝秋正在纽约州立大学石溪分校念博士,他发邮件与 Eric Raymond 争论,指出开源应无国界,并认为中国政府能够采用 Linux 的话,会大大推动 Linux 的发展,为社区带来大量的开发者。这封邮件上了 Linux 每周新闻(Linux Weekly News)网站,参与讨论的还有 Richard Stallman——自由软件的精神领袖和 GNU 系统、自由软件基金会的创立者。

崔宝秋对自由软件的热爱很大程度上来自 GNU,他喜欢 GNU 的程度甚至超过了 Linux,毕竟 Linux 是在 GNU 这块土壤上成长起来的。他尤其喜欢 GNU Emacs,这是一个强大的编辑器和编程环境。1995 年,他就开始使用 GNU Emacs,并快速成为高级用户,做了大量的个人定制开发。若干年后,他在 Emacs Org Mode 中贡献的 DocBook 格式导出工具被 GNU Emacs 正式接受,并在 2009 年把代码捐献给了自由软件基金会。

“回馈社区的过程很有意思。”正是遵循了开源精神,崔宝秋的代码进入到 GNU 里,让他实现了多年的梦想——让自己的代码跑在每个人的电脑上。

从自由软件的信徒到贡献者,崔宝秋愈发认识到开源对中国的重要性。尤其在基础软件领域,很多技术需要长期的积累和投入,是软件行业的金字塔底座,但主导权仍掌握在国外少数公司手里,开源则是帮助我们打破这个局面的最佳模式。“开源是卡不住的,它是自下而上的。”崔宝秋跃跃欲试,想把他在硅谷积累的经验一步步移植到中国。

加入小米后,他主导了小米的 CBA(云计算——大数据——人工智能)技术变革路线,全面拥抱开源。他从零开始打造小米的 HBase 团队,培养出了一个又一个 HBase Committer,每位 Committer 的成长都有崔宝秋的呵护。“教这些年轻工程师如何快速融入社区,如何坚持自己正确的观点,说服社区中的意见领袖,把先进的代码回馈社区。同时,也要让国外的开源项目负责人真正了解中国工程师的技术水平。”说起这套开源打法,崔宝秋语调升高。

他鼓励小米工程师到硅谷参加国际开源技术会议,一字一句地教年轻程序员讲英文 PPT,从写演讲脚本到英文单词的重音等。团队用一周做出来的代码优化,要花数周甚至数月来向开源社区证明这个算法的正确性,要说服社区的技术大拿和负责人,是一个极耗精力的过程。

最终,大量来自小米 HBase 团队的代码放进了 HBase 代码库里,其中包括一个将性能优化提升了近 5 倍的改进,这个改进让全球所有的用户受益。崔宝秋笑了,他带来的开源种子终于在中国生根,在小米开花。

爱上计算机

对一个东西的好坏评价,最重要是看它有没有创造性。

幼时的崔宝秋喜欢画画,梦想当个画家。他总爱拿着粉笔在地上、墙上画来画去,照着小画册临摹《西游记》和《三国演义》里的各种人物,成果时常得到大人的赞扬。

父亲在高中教数学,对他影响很大,到了学龄阶段,宝秋的爱好也慢慢转向了数学。在老家的阁楼里见到父亲读大学时的大部头数学书,他非常崇拜,开始仰慕数学专业,可父亲对他说:“今后考大学时,这个专业可以不考虑,重复性的事太多,很难有创造性。”

转眼间到了高中,他在订阅的《中学生》杂志上看到了 Basic 语言写的程序,觉得很新奇,“但也不知道是干什么用的。”县城里没有计算机,这个新事物对他来说有点奇妙。

1987 年高考,出于对数学的热爱和对计算机的好奇,他选了武汉大学计算机科学系。

 

大学时代的崔宝秋

武大校园很美,尤其是樱花大道,崔宝秋的宿舍在樱园,一个房间四个人,每天尽享美景。

军训时,得知很多同学高中就开始接触计算机,有的参加过竞赛,好几个同学都在练盲打,崔宝秋有些不安:自己连键盘都没摸过。

人生第一次上机的时刻到了,他和同学来到机房,里面干干净净,像个高科技空间,每次进出都要换拖鞋。

在这里,他第一次见到了摩托罗拉 68000 处理器,一个显示器,一个终端陪他开启了专业之路。

崔宝秋很享受敲键盘的声音,且爱上了编程,凡是有写程序的专业课都很喜欢。操作之后打印出简单的程序,“那就是我的创造性成果”,“你可以让计算机做很多东西”。

同学们都在玩儿《生命游戏》,一个细胞的下一刻生死,取决于相邻八个方格中活着或死了的细胞数量,崔宝秋觉得很神奇,“我对计算机的第一好感是它让你有了创造力。”

因为爱好做出《绘星》

崔宝秋把 BGI(Borland Graphics Interface)全都吃透了,里面的字体也被他逆向工程搞了出来。

武汉大学计算机科学系招了三个班,软件专业两个班,硬件专业一个班,每班 25 人,崔宝秋在软件 2 班。班里有个男生叫雷军,聪明又勤奋,为了学习,他戒掉了午睡的习惯。大二,崔宝秋和雷军分到同一个宿舍,两人上下铺,经常交流专业知识,“雷军在计算机领域的认知和探索,当时远远超过了我们这些同龄人。”

大二结束,雷军修完了大学所有学分,去北京中关村电子一条街闯江湖。一次回来,他在宿舍跟崔宝秋说:“宝秋,我在做加密软件‘黄玫瑰’,你帮我设计一个 Logo 吧。”

“好啊!”崔宝秋答应后就开始准备。

他想用计算机来设计,而不是用手画,就从零开始写了个绘图程序,286 电脑没有鼠标,他就写程序用键盘模拟鼠标,一点一点完成了 Logo 的设计。

写程序时,崔宝秋用到了 Borland 公司的 Turbo Pascal,他很喜欢里面的 BGI(Borland Graphics Interface)图形功能。

从小喜欢画画的崔宝秋对 BGI 自带的字体很感兴趣。他通过逆向工程弄明白了 BGI 矢量字体的数据结构,再从英文原版教科书中找到一个高速画直线的算法并把它编写了出来,就可以快速绘制出精美的字体。

接着要做动画效果,他用异或(XOR)运算操作让字体漂移、活动起来。一次偶然的机会,崔宝秋发现 BGI 绘制后的字体和自己的绘制算法异或叠加后不能完全清除,让他百思不得其解。

没有 BGI 的源代码,他只能通过反汇编找到 BGI 的图形接口,一步步跟踪下来,才发现 BGI 的画直线算法和自己的画直线算法有点不同,BGI 的算法只有 30 多条汇编指令,非常精美。“原来 BGI 的画直线算法和教科书上的不一样。”就这样,崔宝秋用反汇编和逆向工程,解决了绘图软件中用异或操作消除直线的困扰。

不过 BGI 系统自带的字体太少,只有 4 种,而 AutoCAD 里的字体有几十种,且都是矢量字体,崔宝秋就把它们逆向弄了出来,转换为 BGI 矢量字体的格式,放进绘图程序里。此刻,崔宝秋如获至宝、喜出望外,随即在《计算机世界》杂志上发表了文章《将 AutoCAD 矢量字体转换为 BGI 矢量字体》。

雷军一直没来要 Logo,而崔宝秋却做得很享受,他把这个绘图程序取名为“绘星”,不久便获得了省级计算机竞赛一等奖。这个绘图程序也很受同学们的喜欢,最夸张时,机房十几台电脑中有一半以上都在运行着他的程序。

后来,他把这组字库给了在电子一条街打拼的师兄,“他有没有拿去卖我不清楚,但这个东西还是挺值钱的。”

《绘星》用来编辑图片、图形,能兼容很多绘图软件的东西,还是很超前。崔宝秋用了很多办法,满足了新需求。

 

成功完成计算机自动作曲项目

痴迷编程的崔宝秋,在学校过着“宿舍——教室——机房”三点一线的生活,并享受其中。

在诸多老师中,崔宝秋很喜欢教信息安全的张焕国老师(武汉大学计算机学院教授),他是北方人,和蔼可亲、又高又帅。张老师经常和学生聊软件加解密、防病毒等有趣的话题,崔宝秋很爱和他交流。

 

崔宝秋(右一)及同学与张焕国老师(居中)的合影

张老师也很惜才,在崔宝秋毕业前跟他说:“你的本科论文可以做一个计算机自动作曲项目,很有意思。武汉音乐学院作曲系的一位研究生在做这方面的论文,你们可以合作完成。”“那边的计算机是苹果系统,上面全是图形,你可以去看看。”

崔宝秋好奇地去了武汉音乐学院,见到苹果的 Macintosh 计算机,上面不仅有图形、图像,还可以播放音乐,他深受吸引,不懂音乐,更不懂五线谱,可为了这个这项目,崔宝秋开始学习掌握五线谱。

武汉音乐学院的研究生哥哥很有文艺范儿,才气过人,“他听一遍曲子就能记住并弹出来。”研究生哥哥在计算机方面的知识需要崔宝秋帮他提升,崔宝秋耐心地教他 if—then—else 指令,两人一起推进项目研究。

崔宝秋想,依托软件来作曲,怎么产生曲子数据文件呢?他又想到了逆向工程。

他用最短路径破解了苹果电脑上音乐软件的乐曲编码,知道了五线谱音乐是如何存放的,“这样我就可以写东西了”,“给我两小节五线谱,讨论各种逻辑算法后,就可以自动产生若干节音乐。”让旋律不断重复,而且能有些规律性的变化。

崔宝秋根据编码数据生成音乐格式,开始演奏,电脑连接着 MIDI 设备,叮叮当当的音乐声就出来了,研究生哥哥兴奋得不得了。这对崔宝秋来说只是一个基本程序,可在他看来却是作曲领域的一个很大的创新。他们要模拟不同风格的曲子,经过两人的钻研探索,圆满完成研究任务。

1991 年,崔宝秋被保送读本校的研究生,师从黄俊杰和张焕国两位老师,研究计算机安全和公开密钥密码体制。

中科院计算所短暂读博

电子邮件和 Mosaic 浏览器让崔宝秋兴奋不已。

崔宝秋本考虑研究生毕业后直接出国留学,可研二的暑期发现 GRE 考试准备晚了,来不及申请,只好暂时放弃。

此时他们做的加密软件在加密卡上用得很广,崔宝秋要经常跑武汉三镇推销加密卡,酷暑难耐,而舍友在考博,经常泡图书馆,他很羡慕,就跟张老师说自己也想读博,张老师建议他报考中科院计算所,师从魏道政老师(计算机科学家),并帮他写了推荐信。魏老师对崔宝秋的硕士研究内容以及曾经获得过全国挑战杯一等奖的经历非常感兴趣,很快就答应收他读博,还全免了博士入学考试。

1994 年研究生毕业,崔宝秋开始了在计算所的博士生涯。

1994 年,中科院计算所,崔宝秋突然发现以前去图书馆查国外大学的资料、寄航空信来申请学校等方式,现在都可以用浏览器和电子邮件来完成了。计算所有工作站,有 Unix 机器,“我每天早上最兴奋的就是先到机房,输入用户名和口令,打开电子邮箱看邮件。”

崔宝秋还经常用 Mosaic 浏览器看美国大学排名和教师简介,在互联网上查询各种留学信息。Unix 工作站上的 Mosaic 已经能高速访问非常多信息,比单色显示器的 PC 机先进很多。他很兴奋,“图形界面太好玩了,传递的信息极其丰富,真是太舒服了!”

痴迷于开源的 GNU Emacs

“这里有太多先进的东西,得赶快学起来。”

在计算所学习期间,崔宝秋一直放不下留学的事,就跟魏老师说:“我还是想出国。”魏老师的儿子跟他碰巧是同龄人,在美国读书,所以魏老师非常理解和支持崔宝秋的想法,就批准了。

经过一番细心地准备和努力,崔宝秋收到了几所美国大学的全额奖学金,权衡之后,他选择了纽约州立大学石溪分校(现石溪大学),“计算机专业在美国排名不错,关键是杨振宁教授在这里任教,我们都很熟悉这所学校。”

 

在美国读博时期的崔宝秋

留美前的崔宝秋常去计算所篮球场跟同学打球,休息时,喝冰镇粒粒橙和可乐解暑,他说:“得好好享受一下,到美国就没机会喝这么爽的可乐了。”

等到了美国发现,可乐到处都是,吃饭都喝橙汁,物质上的差距还是挺明显的。计算机水平跟国内更有着天壤之别。

这一年系里共招了两位中国留学生,崔宝秋拿的助教(TA)奖学金,做操作系统这门课的助教,授课老师是 Eugene Stark 教授,号称 MIT 神童,也是 FreeBSD 的贡献者,“据说 20 多岁就从 MIT 拿到计算机博士学位,一直在这里任教。”

操作系统这门课和本科时的内容很不一样,课本厚了很多,且上来就是让学生们分组,用 FreeBSD、CVS 和 GNU Emacs 编辑器,真刀真枪地干一个操作系统项目。

Stark 教授对学生要求非常高,要求他们分组合作完成作业项目,同时也要求两个助教写程序自动批改学生的作业。这让崔宝秋有点傻眼,要学很多新东西,Unix 接触得也少,幸好一个俄罗斯助教会写 Unix 脚本,完成了批改作业的程序。虽不是很复杂的操作,却让崔宝秋有种井底之蛙的感觉。

“专业课方面没什么压力,很容易拿到 A,主要在语言和沟通上,我得赶快适应英语口语。”

教授让学生都用 GNU Emacs 做家庭作业和 OS 项目,崔宝秋很快被开源的 GNU Emacs 深深吸引。他在这里最先接触了 GNU,也很喜欢里面的 GCC 和 GBD。

开源的代码量非常大,里面有操作系统内核、编译器、数据库、网络、图形等各方面的资源共享,还有免费的经典教材可以看。

“相比之下,国内的计算机教育和软件资源太封闭了”,崔宝秋就像个穷苦的孩子,突然搬进一个辉煌的宫殿,所有东西都有源代码,代码质量也非常高,有了这些,他再也不用去做各种逆向工程了。他感到幸福而富有,在里面读大量的优质代码,“这些代码水平远超一般人。”

本科时,他曾用图形方法做的编译器运行界面惊艳了大学同学,“但我们没有真正去实现一个可生成代码的编译器,像 GNU 里面的 GCC 这种真正完整的 C/C+语言的编译器,还有 GDB 这种调试器等代码都可以免费学。”

五年的博士生涯走得很顺利,崔宝秋的博士论文研究了当时的人工智能领域的一个方面,主题叫 A System for Tabled Constraint Logic Programming(《列表的约束逻辑程序设计系统》),他的研究成果也都用开源代码的形式集成到了他们实验室开源的增强版 Prolog 系统里,名字叫做 XSB。

读博的五年中,崔宝秋花在 XSB 上的时间有足足四年,其中近两年他都是这个系统的主力维护者之一。

XSB 是一个基于 GPL 许可证的自由软件,崔宝秋的导师和师兄弟们是主要的贡献者,还有不少贡献者来自世界其他几所大学。XSB 的重要用户有 200 多家企业和高校,也分布在不同国家。

如何与世界各地的贡献者一起开发这个开源项目,如何满足来自世界各地的用户需求,是崔宝秋和师兄弟们经常讨论的话题。四年的 XSB 开发经验让崔宝秋直观、深度地感受到了开源的魅力,更让他获得了一些和社区共同打造一个开源项目的第一手经验。

成为 Emacs 贡献者后收到 1 美元

Emacs 社区里面流传着这样一句话——如果你教一个人使用一个新的 Emacs 命令,他就可以 hack 一晚上;如果你教他如何制作新的 Emacs 命令,他就能 hack 一辈子。

哒哒哒,崔宝秋在一旁看着 Stark 教授,像弹琴一样在 Emacs 上写程序,各种语法、颜色,热键切换窗口,用 Shell 脚本语言打命令,还能快速修改。粗大的双手,在 Emacs 的窗口上如弹钢琴一般顺滑地串起那些小动作,一下子激起了崔宝秋对 Emacs 的兴趣。

“这个编辑器很酷炫啊,从来没见过。”

崔宝秋评价自己“喜欢跟着水平高的人做事,也爱学习高手用的工具。”他对技术极客有一种倾慕之情。20 世纪 90 年代,Stark 教授就在家里用电脑跟学生远程对话、开会,这种行为在崔宝秋看来是一种极客,而实现这一切的工具离不开开源的 FreeBSD。

“以前在中科院计算所接触过 Vi(即后来的 Vim),但是和 Emacs 比起来差太多。”其实一直存在两派观点,支持 Emacs 的人认为,可以在 Emacs 里面完成所有事情,不像 Vim 还要找一个又一个插件;Emacs 是 Elisp(Lisp 的一个变种)的解释器,Lisp 也是人工智能研究中最受欢迎的编程语言;Emacs 是适合硬核程序员的编辑器,最像操作系统的编辑器。支持 Vim 的则认为,Vim 在各个服务器上是默认安装的。

“Emacs 是开源的,里面所有的东西,包括 Elisp 语言都是最自由的,任何东西都可以改。最重要的是,我身边很多优秀的计算机科学家和编程高手都在用 Emacs。”崔宝秋承认自己被自由的力量折服,被榜样牵引。

用 Emacs 不仅能写程序、调试程序,还能管理日历、读邮件、读新闻组、跟朋友聊天、玩游戏、浏览网页,甚至还能绘画,崔宝秋被 Stark 教授影响后快速就沉浸在 Emacs 里。

“Emacs 功能太强,只有想不到,没有做不到。”崔宝秋不停地改写程序,他爱上了这种高效率的体验,中间遇到问题,就去读源代码,到社区里去查找、询问,慢慢对如何融入开源社区有了更多直接经验。但早期他更多地是秉持着拿来就用的原则,有些代码的改动没有及时回馈到社区,在下一次版本升级中就被冲掉了,他不得不再返工、重做一遍。这件小事,让他真切地感受到“回馈社区”的重要性,以及和开源巨人一起成长的重要性。不和开源巨人一起成长往往会加大软件的维护成本。

2009 年崔宝秋在雅虎上班,闲暇时就会沉浸在 Emacs 的世界里写代码。他发现了一个需求,Emacs Org Mode 缺少 DocBook 格式的导出,这种导出是他在 IBM 工作时经常用到的。这个需求很广,他开始在源代码上下功夫,进行了优化,并把整齐的代码交给了社区。这让崔宝秋的代码最终进入到 GNU 里。Richard Stallman 接受了这位中国程序员的代码,还象征性地付给了他 1 美元。

在 IBM 用开源,差点惹麻烦

“我们这代人就是想给别人创造价值”,当年写的《绘星》就是免费给大家用的。

博士临近毕业,崔宝秋最理想的工作是去 Research Lab(研究实验室),可自己博士论文方向的研究比较窄的,AI 也不火,“当时,我们这个领域的师兄弟们都不会主动说自己是做 AI 的或者专家系统的,现在回头来看,当时的 AI 已经进入寒冬。”最终,他去了 IBM,IBM 正要组建一个新一代数据库技术的研究团队,需要一些博士,可崔宝秋加入不久后这个新的团队就被调整,被要求深度参与产品开发,崔宝秋开始负责 DB2 数据库优化和内核等核心模块的研发。

2000 年,IBM 公司,“万一自由软件传染了 DB2 的代码……”部门研发主管非常担心,要公司的律师来评估风险,崔宝秋没想到,就因为用了自由软件写文档,他差点惹上麻烦。

DB2 主要应用于大型应用系统,是一套关系型数据管理系统。崔宝秋进入 IBM 的 DB2 团队,做查询优化。这是一项要求很高的工作,他以博士的学术背景得以进入。

一直醉心于自由软件带来的便利性,崔宝秋很快革新了一些“老掉牙”的东西,干了些份外的活儿。

文字处理的命令行被他创造的新文档写作工具取代了。那些传统的,一摞一摞的测试文档、设计文档,只要经过崔宝秋设计的写作工具导出,都可以直接转换成 O’Reilly 的 DocBook 模式,变成一本本图文并茂的书。

这种创新之举用到了一系列开源工具,包括 Emacs,形成了一个开源的文档写作工具集,功能很强大,但很快引起了部门主管的警觉,建议公司的律师来看看,评估一下开源软件的许可证会不会影响 DB2 这个商用软件。

崔宝秋回答:“不会,我们只是用来写文档。”

按照奠基人 Thomas Watson Sr. 的设想,IBM 是企业办公设备的核心提供商。可在千禧年到来之时,有些部门还是不太理解开源软件,而显得不知所措。

在这里,崔宝秋因为技术能力出色,晋升为管理者。他可以用 Emacs 完成工作中的大部分任务,包括团队管理和技术研发,在这期间也见证了 Git 的诞生。可他切身地感受到,在 IBM 用开源是一种包袱,“我喜欢开源的技术,喜欢互联网的技术,做这种传统的数据库,越来越没意思。”

2005 年,他有了一种压力,觉得身在硅谷,如果不去互联网公司,就太可惜了。一年后,一个偶然的机会,他离开 IBM 加入了雅虎。

见证 Hadoop 在雅虎长大

一切来得太快了,围绕在三个明星公司之间的搜索大战,尚未战鼓喧天,就已经有了结局。做门户网站起家的雅虎,手握流量密码,却未能在搜索竞争中通关,惯于复盘的崔宝秋指出——输在了技术投入。

2006 年,从 IBM 跳槽到雅虎,崔宝秋摩拳擦掌,准备大干一场。

雅虎已深度拥抱了自由软件,成立了开源项目 Hadoop,搜索引擎技术也是崔宝秋非常喜欢的领域,加入雅虎让他有了如鱼得水的感觉,在开源的利用上更加自如。

Hadoop 框架最核心的设计为 HDFS 和 MapReduce。HDFS 为海量的数据提供了存储,而 MapReduce 则为海量的数据提供了计算。

遗憾的是,雅虎已经慢了一步。

谷歌储备了大量科学家,专门从事研究工作,从来不涉及产品也没关系。这样的文化吸引着更多工程师,更多人才的加入,反哺着谷歌的工程师文化。当三篇论文出现在世人面前,雅虎的所有行为都必然成为“刻舟求剑”。

谷歌的三篇论文描述了 GFS、BigTable、MapReduce 三种技术,奠定了二十年后的技术热词——云原生、云计算和大数据,定位于技术公司,谷歌毫不掩饰地向同行输出最新概念。

而微软的 Bing,则从另一维度上异军突起。2010 年 1 月,微软宣布要收购雅虎的搜索业务。

当微软团队来接管雅虎搜索团队时,崔宝秋有种感觉:就像一个三十几岁的壮汉,向一个十二岁的男孩跪倒在地。这场轰动一时的收购落地,雅虎每个模块都派出了交接人员,作为搜索团队的代表之一,崔宝秋并不情愿地参与了其中。

搜索,是所有互联网产品中最考验技术能力的。回想当初加入雅虎搜索团队时的激动,崔宝秋有些失落地徘徊在自己的办公桌前。这些漂亮的代码,完善的压力测试,上线前的各种测试,都是团队一行一行敲出来的。为了周末多些时间看代码,他甚至戒掉了周末打篮球的习惯。

时间回到 2007 年,硅谷 DoubleTree 酒店,金山即将赴港上市,雷军在美路演,在这期间,与崔宝秋进行了彻夜长谈。“宝秋,你将来想干吗?”雷军突然问他。

崔宝秋没多想:“退休以后最想静下心来写自由软件……”

于他而言,写自由软件和开源软件,都有机会让自己写的代码跑在每个人的电脑上,尤其是在雅虎见证了 Hadoop 的成长之后。

Hadoop 的诞生受到谷歌三篇论文的影响,在雅虎开花并得到广大用户的喜爱。让崔宝秋感到可惜的是,他自己在雅虎工作时所写的热点搜索缓存方面的代码本来是计划开源的,却因为搜索业务被收购而搁浅。

LinkedIn 开源风正劲

LinkedIn 纯粹的开源文化,孕育了多个开源产品。

2010 年,带着未能开源热点搜索缓存技术的遗憾,崔宝秋离开了雅虎,加入了 LinkedIn。

用户数即将突破 1 亿大关的 LinkedIn,遇到一个棘手的技术难题:全量用户的二度关系算不出来。集群资源有限,公司算力也有限,在这种情况下,用户二度关系算了 24 小时仍然算不出来,计算任务不得不中断,没人知道算完所有用户的二度关系到底需要多少时间。

这是崔宝秋第一次用 Hadoop 来处理一个超大计算量的任务,让他觉得用 MapReduce 来解决一些问题不仅是一门技术,也需要一些艺术。最终,他通过各种算法优化、参数调整、GC(垃圾回收)的精益求精,把二度关系跑出来了,并且不断地压缩时间,从接近 24 小时,到 12 小时,再到 8 小时,最后优化到了不到 4 小时。

用 Hadoop 解决这个大规模分布式计算的难题,给了崔宝秋久违的成就感,更让他又一次感受到开源的魅力与强大。

基于雅虎时期的大搜索经验,崔宝秋在 LinkedIn 做起内容搜索比较轻松。在 LinkedIn 开放的开源氛围中,他还和团队一起推出了开源搜索系统 SenseiDB。

“不是 Baoqiu Query Language,是 Browsing Query Language。”崔宝秋急忙解释。他利用一个周末的时间,用 Python 写出来的类 SQL 浏览查询语言 BQL 原型,可以用类 SQL 语言进行查询、聚合、排序等搜索操作,让团队的小伙伴们非常兴奋。当崔宝秋加入小米后,SenseiDB 和 BQL 也很快就直接用到了小米的业务中。

成长于 LinkedIn 的开源项目中,最受瞩目的 Kafka,是为把 LinkedIn 社交网站和内部各业务系统中的数据存储整合到一个系统时建的项目。2021 年,Kafka 商业化公司 Confluent 独立上市。

在硅谷,人人为我,我为人人,已经成为一种普遍现象。“Facebook 有些人在为 Hadoop 做贡献,LinkedIn 的 Kafka,Voldemort 和 Azkaban 都是开源的。”

LinkedIn 的纯粹开源文化吸引着崔宝秋。Kafka 也好,SenseiDB 也好,随着开源项目的壮大,越来越多公司会参与进来,LinkedIn 会让所有外部参与者都尽量把版权交给 LinkedIn,为的是未来更容易地把这些代码干干净净地捐给 Apache 基金会。

从 2010 年到 2012 年,这种方式影响着崔宝秋,坚信开源无国界的他,从此有了一个念头——这样纯粹的开源,若能影响更多的中国工程师就好了。

打造小米“HBase 黄埔军校”

不仅要站在巨人的肩膀上,还要为巨人指方向。

2012 年,北京小米总部,崔宝秋从零开始组建小米的 HBase 团队,召集几位工程师,给予充分自由的时间和空间,在 HBase 社区里读代码,参与社区讨论,主动认领社区“任务”:解答社区问题,在代码中做自己力所能及的贡献。出发点很简单:在社区时间够长,才会足够了解其架构,代码质量也自然会提高,同时在社区也能“混个脸熟”,便于未来更快地融入社区、回馈社区。

HBase 是一套基于 Hadoop 的分布式、可伸缩、面向列的非关系型数据库,是全球最大的开源项目之一,也是崔宝秋在硅谷工作时就一直关注的项目。

他首先向团队明确自己的想法:小米作为互联网公司需要什么服务、小米生态是什么样子、HBase 将如何作用于各个业务线,而后又找朋友引荐了 HBase 当时的项目管理委员会主席 Michael Stack,同后者分享自己的计划,崔宝秋坦承讲述自己对开源的认知、奉献的意愿、投入的决心:“小米对 HBase 的贡献绝不是一两个人,也不会是昙花一现,而是长期的战略。”

2014 年,崔宝秋带着谢良、冯宏华两位工程师第一次去硅谷参加 HBaseCon 大会——此时,谢良刚刚成为小米在 HBase 的第一位 Committer。驾车行驶在 101 公路上,崔宝秋不忘回头和他们调侃:“做了 Committer,以后你们在社区有名了,其他公司可能要用高薪来挖你们了。”

2014 年,崔宝秋与谢良、冯宏华在 HBaseCon,一起与 Michael Stack 合影

在重大项目上极力推出自己的 Committer,是崔宝秋制定的开源战略,主要目的是要赢得一定的话语权、让团队更好地融入并回馈社区,即使这些 Committer 被竞争对手挖走崔宝秋也不焦虑:“人才是水库,流水不腐。”继续坚持开源的打法,维持好的技术氛围,给团队成长空间,他相信会有更多的工程师源源不断地加入小米。如果小米能成为中国开源界的黄埔军校,他也乐见其成。

2012 年,崔宝秋就在小米正式明确了“不仅要站在巨人的肩膀上,还要为巨人指方向”的开源理念,推动着小米开源了一个又一个开源项目:2013 年,在 Hadoop 基础上推出自动化监控部署系统 Minos;2017 年,开源支持 BQL 的搜索系统 Linden,同年又开源用 C++实现的分布式存储系统 Pegasus;2018 年,开源移动端深度学习框架 MACE……

2018 年,小米贡献了 HBase 社区接近 1/4 的补丁。从 2013 年 12 月在 HBase 有了第一位 Committer,小米已培养出了 9 名 Committer,包括三位 PMC 成员。2019 年,小米工程师张铎被 Apache 软件基金会任命为 HBase 项目主席。一切在按照崔宝秋的最初计划一步步实现,甚至慢慢超出设想。

用开源平衡中美差距

崔宝秋把一套坚实的互联网底层基础设施带给小米,“咱吃过猪肉,看过猪跑。”他深知硅谷的企业如何重视开源与大数据。

2012 年,崔宝秋决定把他负责的米聊服务器团队正式更名为“小米云平台”,“这个平台必须支持未来小米所有的业务,它是底座。”2016 年,小米云平台升级为“人工智能与云平台”。AlphaGo 战胜李世石,自称“老 AI 人”的崔宝秋对团队说:“咱们云平台的春天到了。”

崔宝秋把硅谷的技术氛围、开源文化、互联网技术积累和团队布局方法,结合国内的最佳实践慢慢移植进中国的土壤,陪伴着小米从 C(云计算)到 B(大数据)到 A(人工智能)的技术路线升级。

在这个路线中,深度、全面地拥抱开源。他带着小米工程师们做了很多打通数据孤岛、制定开源战略的事情,并鼓励工程师努力回馈开源社区,也让开源成了小米工程文化的一个重要组成部分。

2017 年,北京小爱同学庆功会上,崔宝秋难掩激动:“我们团队的研发力量今非昔比。”他提出所有小米人工智能与云平台的工程师,甚至集团的一些研发力量,都要来呵护小爱同学、支持小爱同学团队。

“开源的真正精神应该是利他主义和长期主义,过去这在中国的土壤是有些欠缺的,然而开源这个模式,让我们的云计算、大数据、AI 技术,通过开源这个连通器,平衡了和美国之间的差距。”崔宝秋迫切地想让社会各阶层的人和各种企业都能真正吃透开源,让开源成为中国提升国力的东西。

主导开源战略,引入 NuttX,赢得 Daniel Povey

坚持开源,让小米的开源之路越走越宽。

2019 年 10 月 12 日,北京,崔宝秋正与实时操作系统 NuttX 的创造者 Gregory Nutt 探讨着 NuttX 和小米生态深度融合的方式与空间,近两个小时后,积极声音传出,双方达成共识,从此,开启了 Xiaomi Vela 的诞生之路。

 

2019 年,Gregory Nutt(居中)拜访小米,与崔宝秋一起进行了深入的交流

崔宝秋认为,在小米的生态版图中,越来越需要加大投入构建开源的物联网操作系统,而拥有一个成熟的实时操作系统是实现这个目标的关键。NuttX 系统功能丰富、性能稳定、商业成熟度高,其主要管理标准又遵循 POSIX 和 ANSI 标准,所以 NuttX 是小米的不二之选。

他把 NuttX 系统与小米现有的硬件生态基础结合,未来所创造出广阔的 AIoT 生态讲给 Gregory Nutt,同时小米也会秉承纯粹的开源理念,努力推动 NuttX 进入 Apache 基金会。坦诚交流之后,双方一拍即合,小米的第一个物联网软件平台开始萌芽。

无独有偶,重要事件总是接连到来。

2019 年 10 月,前约翰·霍普金斯大学教授、语音识别开源工具 Kaldi 之父 Daniel Povey,在个人推特上宣布,他年底将来中国工作,这是一个重要消息。

6 月,Daniel 在霍普金斯大学因被动介入学生抗议活动,被校方解雇。随后,他的动向就一直受到学界和业界关注。

中国的顶尖高校和互联网头部公司蜂拥而上,希望把 Daniel 招致麾下,以小爱同学作为 AIoT 战略核心的小米也在积极争取中。

崔宝秋要求人力资源团队和语音团队:“竭尽全力把 Daniel 吸引过来”,至少也要让他成为小米的技术顾问。

崔宝秋亲自统筹了负责接洽的人力资源团队,并直接与 Daniel 的中国猎头 Joy 沟通,希望通过 Joy 传达小米的能力与诚意。“和中国公司一起打造健康的社区,走向世界。”这是崔宝秋一直向 Daniel 重点表达的开源愿景。

崔宝秋和 Daniel 之前有过简单的邮件沟通,在收到小米的基础信息并感受到其诚意后,Daniel 便主动提出希望通过电话更深入地讨论。8 月下旬,崔宝秋第一次拨通西雅图的电话。

在这通午夜电话里,崔宝秋向 Daniel 介绍了小米,更主要的是自己从 2012 年加入小米后就一直力推的开源战略,听到 Daniel 下月将在中国停留两个星期的计划后,崔宝秋马上向其发出参观小米公司的邀请。

来京第二天,Daniel 突然更改行程,要先来西二旗小米新园区看看,小米集团技术委员会给予了最高规格的接待:崔宝秋和技术委员会成员依次向 Daniel 介绍了小米的“手机+AIoT”双引擎战略和生态、公司的开源工程、AI 实验室、以小爱同学为中心的语音技术。

Daniel 还仔细看了小米的工作环境,包括编程环境,GPU 使用率的高低等。他的到访给了崔宝秋更多信心。不过,随后几天,Daniel 又在上海、深圳陆续拜访了多个高校和互联网企业,这又给志在必得的崔宝秋增加了些不确定性。

Joy 告诉崔宝秋,Daniel 对高校工作更感兴趣,崔宝秋听后有些灰心,但仍尽力争取机会,他立即通过 Joy 给 Daniel 发去自己过去几年对外讲过的 3 份有关小米开源的英文 PPT 和 3 篇外媒报道,告诉 Daniel,小米希望和他一起把中国的开源力量推向世界。

9 月 11 日,崔宝秋觉得时机有些成熟了,就给 Daniel 直接打去了电话,意料之外的是,电话接通没几分钟,Daniel 便告知,小米已是自己的首选(Top Choice)。

国内高校的做事程序相对繁琐,互联网公司对优秀工程师明显有着更强的吸引力,而这之中小米在开源上的努力和成绩又尤为突出,更重要的是,管理小米工程师团队又一直把开源作为战略核心的崔宝秋,对公司的开源策略和技术布局有直接决策权,可为 Daniel 提供更有力的工作支持。

Daniel 想要崔宝秋保证 Kaldi 系统百分之百开源,崔宝秋说:“这条要求对我来说根本不是个问题。”

接下来几天,Daniel 在以色列、欧洲辗转时,小米向 Daniel 发出了 Offer——Offer 最后的修改仍由崔宝秋直接参与。

11 月 18 日,Daniel 正式加入小米。

 

崔宝秋成功地吸引到 Daniel 的加入,一起于小米大厦前合影留念

开源战略不仅是为小米赢得 Daniel 的重要砝码之一,也是崔宝秋加入小米之初力推的战略。“我们要感谢开源,认可开源。”他不断向外发出声音,并成为中国技术领域一位重要的开源推动者。

问答实录

刘韧:你一直在努力学习,这么多年,你的学习动力来自哪里?

崔宝秋:来自对计算机编程的兴趣。我从来不觉得写程序辛苦,我和雷总读本科时在机房待三天两夜的时候都有,那时机房的时间很宝贵,我们饿了就啃方便面,都不会觉得累。

作为一个理工男,让计算机做一件难度很大的事,它最终能按我设计的要求完美地干出来,就很有成就感,而且这东西很有价值,是我为大家创造的,还能不停地优化迭代,接近完美。

比如刘老师写文章时,每一稿修改都会有新的提高,本来要把它做到十分,做到七八分时还不能满足,得等它按我的要求干成了才行。十分以后把文档再优化一下,代码再做漂亮些,再加些注释,加些测试。哪天又发现这东西不过瘾,整个架构再重新设计一下,性能再提升一下,算法再优化一下,当你今天一个版本,明天一个版本的时候,它会越来越精彩,这种成就感只有工程师享受得到。

刘韧:谷歌把三篇文章开放给大家的目的是什么?

崔宝秋:在雅虎我领悟了一个道理 —— 一个技术公司不该或者不需要单纯地用领先别人一年、半年的技术来占据领先优势、赢得市场,而更多要靠自己的商业模式、产品和服务。

技术领先只是一个比较低段位的竞争,你降龙十八掌,别人是十六掌,你比别人多两掌,这有那么重要吗?我认为谷歌当年的搜索已经占领了市场,它把这些技术分享出来,已经对它没有任何损伤了。

这样做的好处在于能推动行业的技术进步。我不知道谷歌会不会这么想,我认为开源是人类技术进步的最佳平台与模式。开源是无国界的,很多技术分享出来是对的,要不然大家都不会去写科研论文了,我们做博士生有时为了零点几秒的提升、百分之几的进步都在努力地往前啃。

我当年做了很多这样的工作,这都是一种无私的技术分享。当年我把这三篇文章看得非常重,我在很多演讲里都会介绍这三篇文章。

我认为谷歌最大的一个技术贡献,就是通过这三篇文章奠定了新时代的云计算,大数据和 AI 技术的一些基础。

刘韧:一个开源项目开发和以前封闭式的开发相比,差别在哪里?

崔宝秋:开源出来以后会有很多人用,很多人给你提反馈,如果项目很成熟的话,会有很多参与者一起来做贡献。在 LinkedIn 我们开源的 SenseiDB 其实贡献者不多,而 Kafka 项目的外部贡献者比较多,但我们也有一些外面的用户,包括我来小米之前,有的小米工程师已经在用 SenseiDB 了。人人为我,我为人人,就是这样的。

刘韧:每个人对开源的认识都不一样,你觉得国内造成目前这个尴尬局面的原因是什么?

崔宝秋:过去的拿来主义只是想用,对开源的认识是完全错误的。有一种认识是模糊的,还有一种认识是片面的,真正懂得开源理念,又愿意做,且又能科学地推动这件事的人太少了,这是非常可惜的地方。如果不能真正理解开源理念,就很难回归到开源的本质,也难以真正掌握它,或者你愿意用什么心态来做这件事。就算懂了以后,又不知道怎么正确地做这个东西,也会栽大跟头。

所以我觉得问题太大了,需要一些洗脑式的教育,尤其在国内,有些人太浮躁,有点急功近利。开源是主张利他主义和长期主义,这在今天我国的土壤中还比较欠缺,我们首先应该感谢开源和互联网,因为有了互联网媒介、开源的模式,才让我国互联网的相关技术,尤其是云计算、大数据、AI 技术等得以提升,实现中美之间的平衡。

近 30 年前,当我出国以后看到那些落差,在今天正是开源才让它平衡了。我们有些东西在产品和应用层面是很有创新性的,微信、支付宝做得很好,但你要感谢开源带来的一些技术提升,要认可这一点。

今天很多人对开源的理解还停留在比较浅的层面,因为无法看透一些本质,我总结了 5 点:开放、共享、平等、协作、创新。一些人没有完全吃透,做开源有时会急功近利,片面地追逐名利,你做得好,我也做,有些是盲目在做。

很多人想做开源,但不知道为什么要做,不是所有软件都需要开源的。开源是要大家共建,协同创新、协作创新,一起打造东西,是普惠大众的,利他的。大家不应该封闭,不能总想着控制,想着本集团、本公司的利益。生态的把控,有的利用开源卖自己的服务、硬件设备,这些局部看应该还做得不错,但长期看实际上它是封闭的,是有私利的,过度强调私利,这个开源就做不大,没人去跟你合作。有些项目我一眼看上去就知道它做不大,因为发起者根本没做到那种利他,那种长期投入。

《2022-2023 中国开发者大调查》重磅启动,欢迎扫描下方二维码,参与问卷调研,更有 iPad 等精美大礼等你拿!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kettle工具连接elasticsearch 7并导入MySQL表数据-简述

一、简述 工作中需要利用kettle开源ETL工具将MySQL数据库中表数据同步到elasticsearch集群中。为此特记录一下操作方式,留作记录和学习。 二、环境 kettle工具:kettle 9.2 elasticsearch集群:7.11.1 集群配置信息: 集群名称&…

Linux-终端命令行

终端(Terminal)命令行仅仅是一个工具,对于命令有许多,而且随着嵌入式领域不断开发,命令会越来越多,我们只需要去了解常用的即可。 对于创建或删除一个文件夹,清理终端,下载文件等等都可以在终端命令行输入…

Nginx 进阶篇

文章目录Nginx 进阶篇五、 服务配置1、 配置成系统服务2、 配置环境变量六、 部署静态资源1、 概述2、 配置指令2.1 listen2.2 server_name2.3 location2.4 root2.5 alias2.6 index2.7 error_page3、 静态资源优化配置语法4、 静态资源压缩模块4.1 Gzip 模块配置指令4.2 配置实…

《Linux运维实战:Centos7.6基于ansible一键离线部署redis6.2.8容器版之哨兵集群》

一、部署背景 由于业务系统的特殊性,我们需要针对不同的客户环境部署redis 哨兵集群,由于大都数用户都是专网环境,无法使用外网,为了更便捷,高效的部署,针对业务系统的特性,我这边编写了基于ans…

唤醒手腕 Go 语言开发学习笔记(基本简介、环境安装)

1. Go语言简介 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收&#xf…

Java中String类的常见问题

目录 Q1:为什么String类要定义成不可变类型? 方便String对象缓存HashCode值 字符串常量池的需要 衍生问题:String str new String("hello world") 创建了几个对象? 为了保障程序的安全性 Q2:String的…

2022年深度学习在时间序列预测和分类中的研究进展综述

时间序列预测的transformers的衰落和时间序列嵌入方法的兴起,还有异常检测、分类也取得了进步 2022年整个领域在几个不同的方面取得了进展,本文将尝试介绍一些在过去一年左右的时间里出现的更有前景和关键的论文,以及Flow Forecast [FF]预测…

解决Windows莫名其妙地从休眠状态唤醒的问题

因为经常写代码开很多个工作区,电脑经常就是合盖休眠,这样打开就能用,但是总是在我不经意的时候发现电脑风扇在狂转,不知道是哪个应用又在qj我的电源管理计划,今天午休发现电脑风扇狂转,打开发现是windows系…

c语言操作符(下)

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>: 讲解c语言中有关操作符的知识. 金句分享: ✨✨✨行程…

我用python写了个小病毒,老板再也不敢扣我工资啦

名字:阿玥的小东东 学习:python正在学习c 主页:阿玥的小东东 今天做个什么呢,我的好朋友提议做一个关机的代码吧,我这一想,对吼,我以前还做过一个关机代码呢,于是乎,今天…

时序收敛技巧之寄存器复制

1、何时需要复制寄存器? 在设计中的关键路径发现某个寄存器具有高扇出和高延迟时,使用寄存器复制是个不错的实现时序收敛的方法。下图是一个典型的例子: 可以看出,第一个寄存器的 IC(InterConnect) 延迟为 1.476ns,该寄…

seo站内优化的方法有哪些(站内优化和站外优化)

站内部优化什么意思 网站优化公司的内部优化意味着什么?网站内部优化,就是网站关键词优化、内容优化、内链优化等等,网站要有一定的排名和流量,要做到内部优化,要做到最快,最快的优化排名?接下…

「认知」打工人的自我修养

都说认知以外的钱难搞,那认知内的呢? 01互联网内卷年代,作为不着调的普通选手; 在诸多花里胡哨的黑话中,个人最待见的就是"认知"这个词; 认知,有强烈的抽象感; 想要深刻…

Mr. Cappuccino的第37杯咖啡——Kubernetes资源管理

Kubernetes资源管理kubectl常用的命令陈述式管理方法1. 创建一个namespace2. 查询所有namespace3. 在namespace下运行一个pod4. 查询指定namespace下的pod5. 查看指定pod的详细信息6. 删除pod7. 删除namespace声明式管理方法命令式对象配置1. 创建yaml文件2. 基于yaml文件创建资…

【JavaEE】多线程(初阶)

目录 Thread 线程的创建 线程的常见属性 中断线程 等待线程 休眠线程 线程的状态 多线程相比于单线程的优势 Thread 在Java中操作多线程,最常用的类就是Thread。 Thread 类是 JVM 用来管理线程的一个类,换句话说,每个线程都有一个唯一…

一网打尽带环链表问题(手把着手带你理解,木有基础也能看懂!)

目录 0.前言 1.认识带环链表 2.带环链表OJ问题简述 3.判断是否为带环链表 4. 寻找入环节点(法一:数学推理的魅力) 5. 寻找入环节点(暴力拆解带环链表的魄力) 6.番外:判断是否为带环链表(fast和slow的…

树上的DP

ACACAC来的如此之快,让我以为还要再调试几个点(h),本文涉及思路参考:参考文章 嗯,这个题和思路让我对跨父节点的树上链有了一个认识,我们来看一下: 如果说,我们要对这样的一条链进行dpdpdp操作&#xff0c…

[GXYCTF2019]BabysqliV3.0

发现我们随便上传一个以后返回的是 alert(Wrong pass); 密码错误 如果上传一个账号永真的话返回 Not this user! 没有这个用户,所以感觉可以使用盲注,对账号进行盲注 可是题目 ascii(substr((select database()),1,1))>1 也不对 最后才知道是…

电脑组装配件知识

目录 1.电脑硬件基础知识 1.1CPU 1.2内存 ​编辑 1.3硬盘 1.4主板 1.5显卡 ​编辑 1.6显示器 1.7电源 1.8机箱 2.电脑硬件搭配及选购 2.1硬件搭配原则 2.2怎样查询软件或游戏配置 2.3配件购买注意事项 2.4搭配一台普通办公电脑 3.电脑组装 1.电脑硬件基础知识 …

软件测试/测试开发 | 一文学会 Appium 环境配置

Appium 是一个开源的、跨平台的测试框架,可以用来测试 Native App、混合应用、移动 Web 应用(H5 应用)等,也是当下互联网企业实现移动自动化测试的重要工具。Appium 坚持的测试理念: •无需用户对 App 进行任何修改或…