备注:本文节略自中国电力出版社2008年第1版《Windows CE工程实践完全解析》(李大为编著)一书的“绪论”,我们认为作者对于Windows CE的见解深刻而适当,非常接近于我们对于Windows CE操作系统的看法,因而在此进行节略转载,供广大用户参考。在此,一并对本文的作者致以敬意。
1、从纯粹软件技术的角度看Windows CE
从纯粹软件技术的角度看Windows CE,则可以说Windows CE就是嵌入式的Windows,虽然Windows CE不是微软唯一的一款嵌入式操作系统产品,但无疑是最有代表性的一款。在纯粹技术的方面,Windows CE和嵌入式的Linux、VxWorks等种类繁多的嵌入式操作系统没有本质区别。
包括windows CE在内的所有类型的嵌入式操作系统,其区别于桌面操作系统最本质的特点,一是可裁剪,二是可移植。嵌入式操作系统的这两个本质特点是由运行嵌入式操作系统的嵌入式硬件的特点决定的。嵌入式的硬件平台首先是由于成本的限制造成其硬件资源较为稀缺,以这样的硬件平台为基础的嵌入式操作系统对硬件资源的使用就不得不精打细算;针对嵌入式的电子产品应用功能比较专门化的特点,嵌入式操作系统实现不同功能的各个组成部分最好要能做到按需选用,即特定的产品需要的功能就留下,不需要则不留,这就是可裁剪。经过裁剪的嵌入式操作系统不仅意味着较少地占用存储空间,而且由于软件的运行负荷较小,对于目标嵌入式系统的启动速度和运行速度也会大有好处。
如果要说Windows CE相对于其它嵌入式操作系统在技术方面的优势所在,则几乎可以一言以蔽之——Windows操作系统在桌面操作系统中的技术优势其实就是Windows CE在嵌入式操作系统中的技术优势。下面以Windows CE与嵌入式的Linux作比较,分四个方面说明Windows CE操作系统的技术优势。
(1)Windows CE可以保证操作系统的软件产品质量
Windows CE毕竟是由世界知名度最高的软件厂商设计开发的操作系统,质量比较有保证。相比之下,Linux则主要是由一群组织松散的所谓“黑客”提供的程序软件。负责组织和管理Linux开源项目的GNU组织希望打破软件厂商对操作系统源代码的垄断,在他们看来这样做不利于软件技术的推广和交流,所以鼓励以开放源代码的形式开发和使用嵌入式系统。这样的目标在我们所处的这个时代虽然显得有些不够务实,却也还算崇高。但是对于大多数的通过国际互联网联系起来的做基础工作的Linux开源项目的开发者来说,除去纯粹的兴趣爱好以外,他们为Linux做事情的主要目的是出名。没有人向他们付费,他们也不用为软件的质量问题承担责任,于是重开发而轻测试就成了必然。此外,还有一个问题是由于组织松散以致各个开源项目之间缺乏协调一致,比如某个版本的Linux内核只能或者不能用某个或者某些版本的GCC工具进行编译,否则就会出错。类似这样的现象给Linux的使用者带来了不少的麻烦。这些问题对于版本众多、使用不够充分、对提高开发者的知名度又帮助较小的嵌入式版本的Linux操作系统尤其严重,我曾经亲身经历过,从Linux的官方网站下载的源代码,一字不改的情况下竟然编译不能通过。
(2)Windows CE有大量的经过嵌入式处理的应用软件和操作系统特性可供用户灵活选用。
任何的计算机系统总是要依靠应用软件才能向用户提供使用价值,除用户自己或者第三方开发以外,桌面版操作系统的厂商都会随操作系统一起向用户提供一些常用的应用程序和操作系统特性(feature),前者主要包括网页浏览器、媒体播放器、办公软件等,后者则以网络协议栈、文件系统、多语言的支持库、音视频多媒体的编码解码器为代表。Windows CE是嵌入式的操作系统,微软也随它一起向使用者提供了大量的这两种类型的软件,并且给它们起了一个更时髦、更有抽象意义的名字——用户体验(user experience)。操作系统的厂商无疑是想通过这些用户体验向用户提供开发使用时的最大便利从而吸引客户,应用软件可以代替用户在需要时自己开发或者花钱另买,而操作系统特性可以在用户自己或者第三方开发应用软件时提供强有力的支持。
客观地说,Linux操作系统也不缺少丰富的应用软件和操作系统特性,但是与Windows CE相比较,它所欠缺的就是这个嵌入式处理。很多软件就功能和性能来说也是很不错的,可惜它没有经过精简的版本可供嵌入式Linux的用户直接使用。Linux的使用者们如果想自己做精简的工作,只能是逐行最多是逐个函数地裁剪开放源代码,工作量之大可想而知。更严重的是,对原版代码改动越大,引入新的错误的可能性也就越大,解决的办法只有做大量的测试,而这又进一步地加大了所需的工作量。这不是GNU项目的组织者和开发者们考虑不周,他们的兴趣和目标都只在软件技术,对于任何一个开源项目他们只管实现功能,至于是应用桌面环境还是嵌入式的环境,那就是带有商业色彩的产品运作的问题,那不是他们需要考虑的。
(3)微软可以帮助Windows CE的用户解决技术专利的问题。
技术专利的问题主要集中在音视频多媒体方面,比如MP3、MPEG-2、MPEG-4等。就我的经验来看,嵌入式电子产品的厂商对待技术专利的问题再怎么小心也做不到百分之百的放心,往往是一项技术会有多家公司或组织宣称对它持有专利,比如MP3就有汤姆逊和Sysvel同时对它拥有专利,而MPEG-2和MPEG-4的情况就更复杂。比这更麻烦的情况是,随着一项多媒体技术的应用范围不断扩大和知名度不断上升,就不断地有厂家冒出来宣称对它持有专利。微软虽然不能帮客户解决所有的技术专利问题,但是微软承诺凡是在Windows CE开发工具里以操作系统特性的形式提供给使用者的多媒体编码解码器,用户都不用担心这个问题,如果用户在这里遭遇了法律纠纷,微软可以出面帮客户打官司,微软有专门的部门和经费负责这件事。
(4)Windows CE有易于使用的集开发与调试于一体的集成开发环境。
微软正确地认识到原先只在高校和科研单位供专业技术人员使用的操作系统要进入普通人的工作、学习和生活当中,稳定性并不十分重要,安全性也可以先放一放,而操作简单、易于使用的特点对于非专业的人士来说才是压倒一切的优点,Windows甚至因此而获得了“傻瓜操作系统”的美名。这正是微软的领导者的高瞻远瞩,抓住了这一点他们做成功了,操作简单、易于使用的特色就在微软后来的所有产品中被一直保持下来。虽然Windows CE的开发工具主要是给专业的技术人员使用的,但是操作简单、易于使用的特点加上集开发与调试于一体的集成开发环境仍可以帮助用户提高开发的效率和减少学习如何使用的时间。
这里需要指出的是,Linux的完全免费开源并不是绝对的无条件的,所有使用Linux开源项目的源代码的人默认都接受了一个名为GPL的使用授权协议:凡是其中使用了GNU开源项目源代码的使用者自己的软件项目,其源代码也必须是免费开源的。GNU组织不以收费赚钱为目的,却以弘扬开源精神为宗旨。对以盈利为目的的嵌入式电子产品厂商来说,这样的条款无论如何都难以接受。不知名的小厂商或许可以不去管它,尤其是在目前的中国,不过那样的做法其后果也许没有使用盗版Windows CE严重,性质却是相同的。
2、Windows CE与软件工程
有了显著的技术优势,下面就是Windows CE的使用者如何开发的问题,或者叫做开发模式的问题。这里所说的开发主要指开发Windows CE操作系统的底层驱动软件和上层应用软件,这是需要用户自己编写代码的开发活动,它们占据了Windows CE全部开发工作中的绝大部分工作量。
先来看看在嵌入式Linux环境下的软件开发方式,它代表了传统的、一般的软件开发模式。以BootLoader为例,如果是为嵌入式Linux系统开发一个起引导加载操作系统作用的BootLoader,则只需对开发者提出一些表达特点应用需求的限定条件:从何处以什么方式获取操作系统的镜像文件;如何解析这个镜像文件的内容以获得操作系统的运行数据;将最终的操作系统运行时镜像置于内存何处。至于具体怎么实现的技术细节问题尽可以留给开发者自由发挥,这样的软件开发活动就像考试中的论述题,相当自由、相当灵活,同时也相当随意并且评分也相当主观。
与嵌入式Linux相对应,我将Windows CE这种开发模式命名为“填空题形式”的开发模式。还是以开发BootLoader来举例,Windows CE的用户没有了那么大的自由度。微软提供了一个支持库,作用是为Windows CE的BootLoader提供一个与具体硬件无关的软件框架,它把代码实现中与硬件无关的,但是又带有普遍通用性的内容抽取出来,形成标准的函数库。与具体硬件有关的、不具有普遍通用意义的BootLoader代码,比如负责下载操作系统镜像的外设端口读写数据,则由微软事先定义好标准的函数接口和函数功能定位,由Windows CE的使用者具体负责开发实现。这样的软件开发活动不再是开发者可以随意自由发挥的,而是在所限定的软件大框架之下的标准行为,开发者的自由度仅限于具体如何实现每一个单独的预定义函数的功能。这种开发模式有什么好处呢?如果读者是一位普通的软件技术开发人员,他(她)的第一反应也许就是“这种模式可以减少开发的工作量”。没错!在考试中做填空题当然要比做论述题来的轻松。而谈到厂商,涉及到盈利为目的的企业,开发模式就不再仅具有技术层面的意义!
前述的Windows CE的开发模式就是以技术的手段确保在软件开发工作中的纪律、工序与制度,是“麦当劳模式”的软件开发。反观前述的嵌入式Linux环境下的软件开发活动,就是没有纪律、没有工序、没有制度的代表,是“中餐馆模式”的软件研发。现在可以得出这样的结论:单纯地用“好”还是“不好”来评价Windows CE的这种“填空题”形式的开发模式是没有意义的,只能说这种开发模式对使用Windows CE的嵌入式电子产品的厂商是最有利的。
3、Windows CE与嵌入式产品厂商
企业是以盈利为目的的商业组织。但是,当以赚钱为目的的企业活动中加入了高科技研发的成分之后,企业中有不少人,特别是企业里的一些专业技术人员,潜意识中不再以赚钱为目的,转而以高科技研发为目的。高科技企业里的产品研发活动不是企业的目的,只是手段,赚钱才是目的,把手段当目的,那是本末倒置。高科技企业里的产品研发活动的性质完全不同于高校和国家科研机构里的科研活动。高校和科研机构的科研是一种对未知知识的探索过程,科研允许失败,而且失败的几率相当大,但是无论失败还是成功都是都是科研的成果,因为失败的科研就是一种对科学假设的反证。科研活动是一种社会性质的活动,一般由国家投资,科研成果归全社会共享。而高科技企业的产品研发活动是一种将已知的知识转变成产品使用价值、进而转化成市场财富的过程,研发不允许失败,失败的研发就是企业决策和管理的失误。
高科技的企业之所以采用高科技作为赚钱的主要手段,是因为高科技能带来高收益,而伴随着高收益的往往就是高风险。高科技产品带给企业的高风险主要在于3个方面:①高科技产品研发失败,产品没有做出来;②产品做出来了,但是质量不好,导致卖得不好;③产品做出来了,质量也很好,但是没有市场或者有市场却没有卖好。前2个技术层面的风险,使高科技企业的决策者和管理者们要严格对产品的研发管理,就是要做好两个方面:一是尽快把产品做出来;二是尽可能地把产品的质量做好。
显而易见,微软以Windows CE操作系统自身的软件质量优势和先进的软件开发模式所带来的管理优势可以确保目标产品的质量;除此之外,Windows CE的质量优势与开发模式上的优势也能在一定程度上确保电子厂商顺利地快速把产品做出来。
设想一个消费电子厂商使用嵌入式Linux操作系统来开发他们的产品会是一个什么样的状况。裁剪操作系统内核和开发底层驱动软件的工作并不难,一两个技术高手就可以解决全部的问题,但是消费电子产品所需要的丰富多彩的用户体验从哪里获得?也许从GNU的开源项目中都能找到嵌入式产品所需要的适用于Linux的应用软件和操作系统特性,抛开GPL的限制条款暂且不谈,我想问的是谁来做嵌入式精简的工作?所有这些软件的开发工作需要多长时间?等到产品面世,黄花菜都凉了。那些黑客们,那些软件高手们,无论个体的技术如何高超,面对这样的任务,只能徒呼奈何。
对于大多数厂商来说,研发除了要保证“做出来”以外,还有“要做好”的目标。而要做到这两点,管理完善的高科技企业通行的方法是尽量将新产品中的新技术成分减至最低,“不熟的不做”、“只做自己最擅长的”。换言之,企业管理的观点认为,高科技带给企业的高风险并不来源于产品技术之“高”,而是来源于技术之“新”。这里的“新”并不是相对于全社会而言的,是指企业以前没有用过的技术。根据国外高科技企业研发新产品的经验,产品中的新技术的比率超过三分之一,就属于高风险项目,失败的概率极大。也就是说,一方面要控制产品高技术的高风险,另一方面又不能失去有利的商机,所以必要时他们一般会选择寻找合作伙伴或者成熟可靠的技术进行优势互补;那么对于嵌入式领域来说,微软乃至于它提供的嵌入式Windows CE操作系统,就是最好的选择。