2001年IBM大张旗鼓的宣布支持Linux,并投入10亿美金用于Linux相关开发。
【陈怀临注:是的,没有IBM Linux Research Center的R&D投入,Linux在服务器市场方面的发展绝无今日之局面】
最近的Cisco抛弃了其专有的IOS核心,在 ASR1000的控制平面软件上采用了Linux为基础平台。【陈怀临注:思科在OS方面目前比较乱了。是的,IOS确实没有能力支持其将来的发展。有兴趣的读者也可参阅弯曲评论相关文章,如“思科的OS战略是用三个OS逐步取代IOS。IOS XR用于核心路由器(Core Router),IOS XE用于边缘路由器,NX-OS用于数据中心的网络交换机。三个都是模块化的OS,IOS XE和NX-OS基于Linux内核(目前Linux的代码质量已经全面超过BSD,JUNOS 1996年起步时Linux还不成熟,如果Juniper现在起步,大概也会选择Linux),IOS XR基于一个兼容POSIX的微内核(Microkernel), 名叫QNX。IOS的各个功能模块被移植到这些新的OS,作为单独的进程运行于内核之上。”—《思科和Juniper的操作系统之争:一个还是多个?》】据传Huawei、H3C等厂商的软件平台也纷纷转向以Linux为基础,而以前他们都采用 vxWorks作为基础。【陈怀临注:我个人对华为在这方面的判断力,特别是决断力略表失望。要加快步伐。这与决策者的知识面和视野的局限性有关系。】几年前,就连vxWorks的开发者风河公司也宣布同时支持vxWorks和Linux【陈怀临注:风河:WindRiver Inc. 目前,WindRiver在Linux方面力挺其收购的RTLinux/FSMLab技术方案。相关信息可参阅笔者的陈怀临时间–RTLinux/RTCore体系结构】。由此看来,Linux在网络设备领域取 代vxWorks几乎已成定局。这背后的原因究竟是什么?与vxWorks相比,Linux究竟有那些优势?
在我看来,IBM支持Linux,是为了借Linux来挽救其规模庞大的服务器产品线,借助Linux拓展其软件服务市场。(注1)
【陈怀临注:是的,IBM不可能是因为,或单纯的因为GNU的道德精神,而投入大把的美金来支持。其主要原因是:扶持Linux,抗衡微软及其联盟。】
而网络设备上用Linux,并不在于Linux的技术有多先进,而是Linux所代表的产业链的发展速度超过了vxWorks,用Linux会使软件开发成本更低。
【陈怀临注:是的,大量的第三方应用软件,大量的社区人员是Linux生命力和自由软件精神永存的基础。严格来讲,不参考Open Source 源码的工程师不存在。如果有,他要么是什么都不懂,或者其实从来不写程序。】
Linux和vxWorks在技术上的主要差异在于:A、Linux的核心和用户进程之间是的地址空间隔离的,【陈怀临注:这里指System Call Interfac.用户态与核心态的分离。】每个用户进程之间的地址空间是隔离的,当某一个用户进程崩溃的时候,不会影响操作系统核心和其他用户进程正常运行【陈怀临注:这里指每个用户进程拥有其自己的4G逻辑地址空间,共享1G的核心空间,3G的用户态地址空间。】。B、Linux支持页面级的内存管理,支持换页【陈怀临注:这里指Page on Demand, Copy on Write等Linux内存管理机制。当然,页面PageFault机制带来的效率开销有时也是嵌入式系统所不希望的。所以对一个Linux系统的从新开发和裁剪是很重要的。避开Linux的缺点,最大化的利用Linux的优点。】。C、由于隔离的原因,使得Linux软件的各部分之间耦合性更小,Linux的应用程序跟核心之间有清晰的界面,POSIX API。总而言之,Linux充分利用了现代微处理器的MMU硬件,而vxWorks则采用平面地址空间(注2)。在某些高端设备上Linux的保护模式 的确可以让系统更稳定,至少更容易找Bug。这个特点也是也是长期依赖Juniper赖以攻击Cisco IOS的主要论据,因为Juniper的JunOS是基于freebsd的,也具有同样的特点,而Cisco的IOS核心与vxWorks类似(注3)。
Linux除了具有上述技术优势之外,其实也还有很多缺点,如:(a)Linux的网络协议栈是针对主机优化的, 对于低端路由器这类设备,运行效率不高。(b) Linux的软件镜像较大,占用flash和内存空间大,对甚低端设备来说,成本高。(c)就总体运行效率而言,Linux比vxWorks 差,Linux系统调用开销大,Linux的动态连接库调用的开销也大,在某些硬件上Linux的进程间切换的开销也大等等。【陈怀临注:Linux作为控制平面应该是不错的,System Call的开销不应该是考量。】
我认为,Linux相对于vxWorks的技术优势是微不足道的。【陈怀临注:技术优势会变得significant。越来越多的人参与这个社区,她一定会强大。她的后面是一种人文精神团结的数千,数万人,而vxworks后面是最多2,3百人的研发队伍。Eric Raymond的经典文章《大教堂和市集》的问世,基本上奠定了Open Source开发一定超过商业开发的理论基础。】导致网络设备厂商转向Linux的主要原因是 Linux代表产业链越来越成熟,用Linux的开发成本将远低于vxWorks。主要表现在:(a)支持Linux的软件越来越越多,而支持 vxWorks的软件越来越少,Linux下面有很多开源软件,而这些开源软件多半不支持vxWorks。现在用于网络设备的商业软件几乎都支持 Linux,如:Gated、Zebos、Trillium、InterPeek的协议栈等。(b)几乎所有的芯片都提供Linux驱动程序,几乎所有的CPU、评估板都提供Linux支持。【陈怀临注:这一点异常重要。Driver上来就是Linux 版本的。这也是Linux Prevail重要原因之一。一个非常好的正反馈生态环境了】(c)熟悉Linux的开发人员更好找。与Linux相比,vxWorks则越来越显得曲高和寡,其生存环境也越来越差。【陈怀临注:vxworks其实曲也不高,也没什么人和。当年NASA就应该将其彻底废掉。Mars Path Finder的Priority Inversion的事故犹如昨天。】
对于网络设备来说,选择哪种操作系统软件并不是决定成败的关键因素,操作系统只提供了一些如任务调度、任务间通 信、中断管理、内存管理等基本功能。在一个路由器中,操作系统软件占总代码量的5-20%,而且无论选择那种操作系统,这部分代码都是相对稳定的,不需要作太多修改和维护。但是如果操作系统选择不当,却可能增加很多开发成本。例如:如果你选择的CPU不被vxWorks支持,那么就必须自己开发其CPU支 持代码和BSP(注4)。如果某个以太网芯片没有vxWorks的驱动程序,那么你也不得不开发vxWorks的驱动程序。最让人无法忍受的事情是,现在用过vxWorks的人越来越少,会Linux编程的人越来越多,并且很多人非常熟练。【陈怀临注:非常好的观点。在网络设备中,经典操作系统通常承担基本的功能,而且许多模块有可能被改写,如协议栈,内存管理系统等。也包括调度系统。】
如果说IBM选择Linux还带有一定的冒险成分的话,那么现在Cisco、H3C、Huawei等选择Linux,更多是无奈之举。【陈怀临注:也是明智之举。我就不明白某个公司花了好几年的时间还折腾不清楚GPL Lincese的事情。让人哭笑不得。】
注1: 当时的Linux已经在互联网行业得到了广泛应用,像FTP、Web这类服务器程序在Linux上运行已经没有任何问题,并且有Sybyse、 Oracle、Infomix等一批商业数据库有Linux版本。有一大批刚刚从学校毕业不久的年轻技术人员熟悉Linux,Linux各种技术资料在互 联网随处可得,讨论Linux论坛网站也层出不穷,Linux在服务器市场的份额快速增长。虽然IBM的AIX在技术上暂时领先(这一点也许有人不同意, 但我认为在2001年左右的时候,Linux在技术上还远远赶不上AIX、Solaris等商业Unix。也许这个问题可以专门作为一个话题展开讨 论。),并且有良好的商业化支持,而且在金融等传统企业市场占有率暂时领先与Linux,但是其活力和前景却远远落后于Linux。对IBM来说,AIX 软件销售并不是其主要收入来源,IBM主要业务是软件服务、服务器硬件的研发和销售。在这种情况下,IBM押宝Linux,不失为明智的选择。当大批信仰 Linux的年轻技术人员逐渐掌握了决策权的时候,他们会在采购中更倾向Linux,这是他们会发现,这些产品中很多都是IBM的。【陈怀临注:在Web 2.0系统中,大量的LINUX做服务器。如经典的LAMP:Linux + Apache + MySQL + PHP.另外,Google就是Linux的集群系统。】
注2:这样说不完全准确,vxWorks在6.x版本中也提供了保护模式的支持,但这个不是vxWorks主要的特性,vxWorks下的大部分应用程序还没有用到这个特性。
注3:可能是基于某个QNX特殊版本的。
注4:有时候甚至这个工作是完全不可行的,某些CPU是跟Linux绑定了的,没有提供完整的寄存器文档。