zoukankan      html  css  js  c++  java
  • 黑白色的华为(3) 他山之石

    他山之石

     

    前面讲了华为软件定位的窘境,很多人会急切的想知道该如何解决问题,但实际上,华为软件面临的远远不仅仅前面列的定位,锦囊窘境,人力陷阱等等问题,更是一个体系的问题,包含软件的开发流程的合理性,大规模软件解耦的问题,工程师文化缺失等等,等等。饭要一口一口吃,问题要一个个解决,我们还是先把“窘境”中的问题讨论一下。

    对于一个问题的解决,方法大家耳熟能详:学习外部先进经验,结合华为实际,给出解决方案。那么第一步,就先看看外部经验吧。

    外部如何做软件,这个话题显然很大,不同的公司有不同的做法,也有很多厚度超过一寸的经典书籍等着去解读。但我这个人一向讨厌太宏大的东西,我就仿照佛陀舍身饲虎的故事来把自己的职业生涯剖析一下,结合亲身经历的事情讲讲平台软件的设计理念总还是可信一点。

    我的职业生涯很简单,毕业以后进入了一个小公司TurboLinux,接着加入美国WindRiver公司,再后来到了华为。

    故事就从TurboLinux开始。

    TurboLinux,职业开始的地方

    现在的小朋友们可能对TurboLinux没有什么感觉了,但是在十几年前,TurboLinux和Redhat几乎是同步发展起来的,获得的融资也基本上是旗鼓相当。但是在我加入的时候,TurboLinux已经处于衰败的过程中了,市场已经开始退守到日本和中国,在美国业务只有IBM的OEM了。没有什么比在毕业的时候加入一个衰败中的公司更糟糕的事情了,但是一个刚刚毕业的学生当时是没有能力和眼界去看清楚趋势的。不过事情也有好的一面,公司弱,倒是给了能力强的新人更多的机会,我很快就成了这个小公司的技术负责人。这个时候真正的麻烦来了。

    当我是一个单纯码农的时候,生活是简单而快乐的,动手能力强而且上手很快的我干完自己的活是一个挺容易的事情。但是当一个毕业不到两年的人被赋予了一个团队,同时要告诉公司做什么,怎么做才能在市场上生存下去的时候,生活就完全不一样了。当和销售们一起在市场上开始接触客户,竞标打单子以后才知道钱有多难赚。才真正理解“钱难赚,屎难吃”这句大白话是多接地气。

    我当时的做法也无外乎跑客户,做特性,调性能,一个标一个标,一个客户一个客户,一个项目一个项目的死磕。我能做的也就是把性能搞的比redhat, suse,红旗(十几年前的几个主要的玩家)要好,最好还能多几个特性,在竞标的时候技术上不弱于对手。

    但是很快我就感觉这样做下去基本没戏,一个是团队的规模很小,只有20多个工程师,加上日本那边,工程师也不过50多个。OS那么大,特性那么多,怎么做的过来。另外一个是TurboLinux相对其它三个品牌,在认证和厂商合作这块有者先天的劣势。特别是相对Redhat,redhat有很完整的一套软硬件生态体系,这个几乎是不可逾越的鸿沟。这个“死穴”几乎是逢大单就会触及,基本上是一触即溃。虽然工作很努力,而且2005,2006两年TurboLinux还获得了历史上最好的销售成绩,但是颓势已经开始显现,redhat(包括Suse)对产业的完整把控能力已经开始显现了。2006年以后整个公司就状态全无了。

    面对颓势,我又坚持了两年,也做了种种努力,最后自己的信心也都做没了。当一个业务负责人自己的信心都被打没了以后,剩下的就只缺一个猎头的电话了。

    WindRiver,成功的失败者

    WindRiver无疑是嵌入式软件领域的龙头大哥,当时WR开始在国内设立开发中心,由于中国的工程师能力好,价格便宜,干活靠谱。当时几乎所有的美国软件公司都纷纷在华设立研发中心。而WR的研发中心设立却有点不太一样。

    1.       WindRiver的Linux产品线刚刚成立,所以几乎整个Linux产品线的研发都放在了中国。

    2.       由当时的华人VP Stephen Li回国直接负责这个开发中心,Stephen魔法般的将这个开发中心从几个人扩展到了鼎盛时候的400人左右。

    通过我们的努力,整个中国开发中心很快就成了WindRiver公司最大,也是最重要的开发中心,Linux开发的90%,vxWorks开发的50%左右其实都是在中国,或者换句话说,2008年以后的WindRiver公司,中国味已经很浓了。

    对我个人来说,我有机会几乎从零开始和国外的架构师们一起打造一个全新的产品,并且亲眼目睹这个产品是怎么一步步占领市场,获得成功的(当然,也包括怎么没落的)。在这个过程中我也理解了“平台软件到底做什么”这个核心的问题。这种机会是一般的西方公司很少放在中国的,很多外企的研发中心做的事情更多是确定性的开发工作,而不是成体系的设计工作。同时在这个过程中,我也系统的走过了一个完整软件开发流程体系的建立过程,这种历练也是受益匪浅。这些都是我对WR始终心怀感激的原因。

    对于刚进入WR的我来说,有很多有意思的观察:

    l  开发人员其实也不多,和我想象的完全不一样,风河的工程师比例远没有我想象的那么多,整个WR Linux产品线工程师一共就100人左右,这其中还包含测试。如果单从人数来讲,也并不比Turbolinux人多多少。

    l  工程师的技能和水平也没有我想象的那么高。WR当时确实招了一拨好手,再加上北美的几个高水平的架构师,整体能力肯定比TL要高不少,但是如果按工程师的平均能力来讲,其实倒也没有那么大差距。

    l  WR由于商业策略的问题,对Linux的投入是非常晚的,市场上已经存在了一批嵌入式Linux的公司和玩家,WR Linux产品线实际上还是后来者,市场是非常劣势地位,我去的时候一年的销售额才几个Million。产品能力也没有和别人拉开档次,根本谈不上什么竞争力(或者说是我当时所理解的竞争力)。

    那么,对我来讲,最有趣的事情就是:

    l  我要看看WindRiver这么一手烂牌怎么打出好的结果。

    那真是一段很难忘而且不堪回首的日子,传统上,我们都认为外企的工作是轻松而且惬意的,老美是悠闲而自在的。对也不对,至少在WR Linux的开始岁月是不对的,在入职WR的前半年,我记忆中很少在凌晨一点前上床睡觉。忙什么呢?实际上就是忙三件事情:

    1.    如何建立一整套的开发流程和规则,就好比要生产东西,先要调试生产线一样,如何能让整个生产线能够高效,稳定的运转起来,同时保证产出的产品的质量是过硬的。

    2.    设计产品代码在Git 库中的布局,以及Git和开发流程的衔接。

    3.    倒腾一堆脚本。

    对于1和2,我们后面的章节再进行细致的分析,这块内容我认为也是无比重要,但是却和华为的体系相差甚远的一块。同时也不被国内公司所重视。但实际上,我个人认为,1和2才是这些西方软件公司真正的核心竞争力。是保证稳定的开发节奏和少犯错的根本。

    对于3,则是从技术层面让我开始逐步理解WR设计逻辑的开始。

    WR所面临的设计语境是什么呢?世界上有很多的芯片厂商,基本上分为四大体系架构,x86, ARM,PowerPC, MIPS,各个架构后面都矗立着若干个厂商,每个厂商又都出品了一系列的芯片,每一个芯片又被不同的厂商集成为很多种硬件板子,每一个硬件板子又会被包裹在不同形状的铁皮中变成各种各样的盒子。最终客户点亮这个盒子的时候会出现一个闪烁着#符号的界面。你可以想象一个嵌入式开发者面临的是怎样一个糟糕的世界。

    在这些众多的芯片厂商,硬件厂商,盒子厂商中间,需要一套标准,一套工具,一套机制来给上层的使用者,开发者构建一个标准的界面。显然,OS是抹平所有这些差异的连接点。这就是那一堆脚本所干的事情,这堆脚本,最开始是Makefile的形式,后来在WR Linux4.0开始切换成了Yacto。这堆脚本要处理:

    l  提供用户的使用界面和编程界面。

    l  解决不用架构,不同种类的芯片的差异性。

    l  融合芯片厂商各自的SDK。

    l  标准统一的构建工具链条,包括交叉编译等。

    l  对补丁进行管理,包括安全补丁等。

    l  对芯片的设计问题进行规避处理。

    l  对板子的硬件问题进行规避和处理。

    l  小到几十K,大到几百兆的系统如何灵活生成并互不影响。

    l  不同需求之间如何进行组合和冲突解决。

    l  。。。

    和大家想象中的一堆穿着T恤,甚至留着大胡子的geek,黑客,面前摆放着好几个屏幕,屏幕上充满了各种高深程序的形象是不是差距甚远。这都是体力活,哪里有半点高科技含量,说穿了不就是一个集成商么。

    我们并没有关注很多特性,features,甚至都没有什么性能优化团队(虽然我知道风河会对外宣传性能好,PS部门会针对客户的业务做一些优化工作,但这个不是产品部门做的,产品部门对性能关注度并不高)。

    在这种“低档次的”,重复性的,枯燥至极的工作中度过了大约两年。在这两年中,产品开发到了3.0版本,营收也增加了10倍左右。我进公司时候还能听到的一些对手小公司已经销声匿迹了。芯片公司在发布芯片前也要找我们协调版本的配套工作了。不知不觉,WR Linux在行业中已经变成了事实上的工业标准。

    由于有之前TurboLinux工作中积累的市场经验,在这忙碌的前半年时间内,我很快就理解了整个设计逻辑。实际上,一个平台类软件要做的事情就是要在某一个市场空间中建立起连接生产者和消费者的一座桥梁。而这一堆全无技术含量的脚本就是这座无价的桥梁。和华为“连接全世界,做数据的管道”的思路如出一辙。

    https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1551348964164&di=9bc762542fa51b5a712a24724ae4e80a&imgtype=0&src=http%3A%2F%2Fwww.fromgeek.com%2Fuploadfile%2F2018%2F0404%2F20180404090053150G.jpg

    一旦这座桥梁被建立起来以后,当桥梁的两头连接了足够的用户,当客户习惯了通过这座桥梁。那么这座桥梁也就成为了人们的生活必备。这个时候,WRLinux的真正威力才体现了出来。它无须在对有多少特性挠头,也不会为一点点的性能斤斤计较。

    对它的上游客户,也就是那些芯片厂商,它体现出了很大的掌控能力。因为任何一个芯片要上市的前提是需要OS,特别是商用OS的支持,否则芯片怎么用呢。所以WR会收取芯片厂商的开发费用。如果想在我们的开发计划pipeline中排的靠前,芯片厂商可能还需要多交一点。

    对下游,WRLinux屏蔽了很多芯片层面的底层,对用户呈现的是一个方便的开发平台,用户当然需要支付一定的费用。在这个基础上,也可以按照用户的要求进行一些特殊需求的开发。WRLinux的使用习惯,接口被大多数用户所接受,实际上也就是事实上的工业标准了。

    当完成了这个体系的建立,成为上游和下游的标配以后,实际上也就无所谓性能是不是比Redhat,Suse,或者其它什么厂商好那么一点了。也不在意我们的特性比别人多一些还是少一些了。背后的潜台词很简单:客户你可以不选择WRLinux,有本事你说服其它厂商支持这些芯片。否则就安安静静的我提供什么你就用什么。

    当我回过头去反思自己在TurboLinux的工作经历,我才发现,之前我在TurboLinux和RedHat的所谓竞争根本就不是一个维度上的,当我带着团队一个feature一个feature死磕,一个性能指标一个性能指标死扣的时候,RH团队就如WindRiver一样,在围棋的棋盘上不断布子画圈圈。我们还在棋盘上的一个角上争一口气死活的时候,RedHat早就在通盘布局,棋局到了中盘以后,其它的对手早就没得下了。

    TurboLinux的努力在RedHat看起来,更像是一个三维生物看着一个二维生物在绝望的挣扎。

    https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1547472899881&di=325513dc3f19d4a5b28dd8ff5942aa6b&imgtype=0&src=http%3A%2F%2Fs3.sinaimg.cn%2Fmw690%2F0027vop2gy6TM5t2jJwf2%26690

    甚至我再去RedHat网站去浏览的时候,蓦然回首才发现,对于视性能为生命的OS行业来说,RedHat的网站甚至都找不到一条和性能相关的内容,只有穷人才会炫耀自己又新买了一条1000块的领带。

    回到WindRiver,当它建立起这样的一套体系以后,其实就已经和芯片,硬件厂商和用户形成了一个共生体,我已经完全不在乎我的产品是否比别的厂商快一点还是慢一点了,也不在乎我们的功能是多一点还是少一点了。我们所要做的就是按照自己的节奏来推出产品,维护好和上下游的关系和配套。

    一旦产品在市场上形成了类似的垄断的生态,对我直观的感受就是大半年以后,除了早上和美国的例会以外,我10点左右才晃晃悠悠的到公司,下午准点拿包走人(这在WindRiver已经算是很勤奋和敬业的了)。真正开始享受起“外企”的舒适生活了。当然,这段时间也是我人生中最后悔的一段时光。Stay hungry, Stay foolish绝对是说给当时我这种人听的,但这是另外的话题了。

    整个过程看起来有点冷笑话的既视感,外界所认为的由一群疯子极客,内核偏执狂构建起来的嵌入式领域领先产品。其实真正的core value是一堆脚本。这堆脚本才是真正的架构,它们其实并不简单。小人物也能干大事业。(在这里还是要强调一下,WRLinux还是有很多的内核好手,技术极客,基本上从风河来到华为的工程师,工程技术能力都是很受认可的。这里并不是说他们在内核上做的那些工作不重要。但是真正决定产品成败的并不单纯是高深的技术。)

    几年以后我进入了华为,由于被定义为高端“砖家”,刚进公司的时候,很多部门都盛情邀请我去给他们讲讲WR如何能做到业界那么“牛逼”,有什么样的诀窍,绝招,一招制敌的功夫。甚至,希望我是那种盯着满屏的二进制就能指出我们产品的问题在什么地方的“传奇人物”,希望我能点播十行代码就能让产品性能脱胎换骨的“TOP GUN”。不幸的是,我不是这样的传奇,而且在我的职业生涯中,也从来没有遇到过这样的传奇。

    可当我耐着性子来讲述我们真正的“成功经验”的时候,大多数人的反应当然是失望:不会吧,就这些东西?还有一小部分的人依然会坚持认为WR还是有不可告人的“秘诀”。在大多数华为人的字典里,成功背后一定是要有“不可告人”的神秘武器,否则为什么会那么轻易成功呢?华为一直相信“技术阴谋”致胜论,却不相信“技术阳谋”才是正途。甚至有人给我列举了WRLinux的种种“先进性”,表明当年选择WindRiver也是通过了各种评估,表明WRLinux设计的伟大和前瞻性。

    每到这个时候,我都有点哭笑不得的既视感。我不禁想起来小时候需要针对文章总结“中心思想”这样的功课。每当我下笔写下如下的文字“作者的这篇诗歌歌颂了祖国壮丽的河山,抒发了诗人的爱国主义情怀”,原作者其实:我没那么多想法,当时只是喝醉了,随口吟唱出来而已。

    回到我的故事,如果只是这样的结尾,这个故事可能还未必多么动人,毕竟,WindRiver的年销售额一共也就4-5亿美元左右(我离开已经很久了,这大约是2011年左右的数字),vxWorks和Linux产品线的销售比差不多是9:1,也就是说Linux产品线杂七杂八加在一起也不过5000万美元左右(包含PS部分),这个销售额在华为来说几乎连芝麻都算不上。所以单单是从营收的角度来看,WR在世界上本不该有那么显眼。但是2009下半年以后WindRiver发生的事情才是故事的高潮部分。

    大约是2009年上半年WR被Intel收购,价格应该是9亿美元左右,WindRiver退市。9亿美元的收购价格也确实表明WR做的是一门小生意。经过大半年的整合,大约在2009年底,2010年初,变化开始显现。彼时整个芯片行业4大架构,但是很快WindRiver就宣布不再支持MIPS架构了。freescale,这个PowerPC的顶梁柱,也逐步和WindRiver渐行渐远,我们已经很难从Freescale拿到他们内部的资料了,Freescale对和Intel穿一条裤子的WR从亲密无间的合作变成了防备,ARM也仅仅是有2-3款处理器意思一下。而且产品的base也在4.0被切换成为Yacto,这个由intel主导的项目上。

    这些变化很大程度上加速了整个芯片行业的整合,从我的感觉来说,大约1年半以后,市面上的芯片架构就只剩下x86和ARM了,我所谓的只剩下不是说MIPS和Power不出货了,而是这两家眼见是前面没路了。道理简单到任何人都能看清楚:产业链断了。

    这种影响甚至在我加入华为以后还都余温尚存。我加入华为以后是处理器CTMG的成员之一,对公司处理器的引入进行技术看管。我记得是在15年左右,CTMG开会的时候评审一个产品线引入的一款处理器,是MIPS架构。因为我显然知道WindRiver肯定是不支持MIPS了,所以等产品线讲完,我问了一句:谁提供OS?后面的半个小时就热闹了,因为这种芯片公司软件平台的支持只有两条路:一条路是借助WindRiver这样的公司进行商业支持,另一条路是芯片公司自己养一个小团队攒一个OS供客户凑合用。显然这个公司只有第二条路可走了。但是第二条路对华为公司这样体量的公司,产品都是长维护周期的产品线是很不靠谱的,哪个产品线敢于把自己的系统构建在一个小公司里面的小团队呢(假定还能养的起这种团队)。虽然我记得因为种种原因,这个处理器还是不得不少量采购一批,但肯定是这款处理器在华为最后的绝唱了。

    风河这样的小公司决定了某些芯片公司的生和死。这才是这个故事最精彩的结局。

    如果复盘一下Intel的这波操作,我们可以很简单的了解到平台软件在产业链中的位置和作用。Intel一直试图在巩固服务器市场的情况下向CT, 嵌入式,IOT等行业发展,其中收购WindRiver我认为是很妙的一个操作。为了在行业内快速发展起来,Intel并没有大肆收购芯片公司,而是通过控制产业链中的WindRiver,经过短短2-3年,把嵌入式处理器产业中的4个架构清盘成为了2个,竞争对手一下少了很多。把本应正面硬抗式的对抗性战争变成了钳制对手发展的绞杀式战争。虽然现在Intel在嵌入式领域也难说成功,但是这并不妨碍它用一个很巧妙的手段呈现了另类的“芯片战争”。

    虽然我这里把过程讲的激情壮烈的,但实际上我身处其中,并没有感觉那么轰轰烈烈,惨烈厮杀。一切都平淡如水的进行着,但是2-3年以后回头一看,已然换了人间。这种节奏感是后续的章节中我也要着重讲的内容。

    对于Intel收购WindRiver的动机和策略,以上是我作为WindRiver的一个中层所能看到的过程和结果。在WindRiver的时候也听说VP谈起过,收购WindRiver是出于当时Intel的Renee个人欲望,希望软件部门做大做强,争取CEO的位置。就和“中心思想”的故事类似,也许这么高大上的结果的动机来源是很Low的。这个我确实无法得知。不过最合理的解释也许是:

    Renee推动收购WindRiver的原因是自身对CEO的渴望,但是呈交给董事会的收购分析报告可能是上述的战略。;-),一如我们项目的Charter和PDCP。

    我的职业故事讲完了。这么长的职业总结还是要来引发之前提出来的两个关键问题的思考:

    l  公司的软件平台部门的任务是什么?仅仅是应该提供产品线的一些特性支撑么?还是应该将眼光放在全行业的战略卡位点上呢?

    l  软件的创新是什么,是“别人做不出来”的东西吗?

    我所有的“先进经验”都讲完了,接下来的步骤就要“结合华为公司实际”了,需要来看看华为公司是怎么样的一个公司,对公司没有一定程度的认知,就谈不上结合公司实际。当然,对公司战略品头论足是一件危险的事情,下一章就冒一次险吧:危险的评论

  • 相关阅读:
    Async、Await
    CommandLineParser命令行解析类
    Dispose in c#
    授权oAuth
    Hadoop技术内幕1——源代码环境准备
    postgreSql——时区问题
    Linux命令3——c
    Linux命令2——b
    Linux命令1——a
    hadoop的Linux操作
  • 原文地址:https://www.cnblogs.com/gongxianjin/p/15703736.html
Copyright © 2011-2022 走看看