Do-It-Yourself-Linux?

作者:Jim Ready Montavista Software公司

25年前,商用实时操作系统提供商的出现使购买还是自己构建实时操作系统的争论变得可能,工程师经常为嵌入式设备开发软件卷入了这样的争论之中。
如今对很多嵌入式设备,Linux已经成为了更受欢迎的操作系统。在这个崭新的Linux世界,有关购买还是自建的争论是不是依然存在?
要回答这个问题,必须理解:
● 让开发者选择Linux作为嵌入式操作系统,而不是其他传统RTOS的压力;
● Linux与其他RTOS的一些“细微差别”,其开源和软件开发过程,深远的影响了开发和购买之间的平衡。

设备中的软件内容爆炸
在嵌入式系统世界中两个方面的快速扩张是转向Linux的基础:
● 新的复杂的产品种类增多;
● 嵌入式设备本身系统软件需求的增加。
考虑一个曾经只需要微控制器和小型固件(控制程序)的玩具制造厂。他需要开发系列新产品,这些产品要基于完全开源环境,且带有多道程序,TCP/IP连接,蓝牙无线I/O等等。结果,这家跨国消费电子公司突然发现将不得不为自己的产品开发决定采用有上百万行的操作系统软件,因为现在每个产品都要求有多道程序以及网络连接。内部成本的增加以及产品设计开发复杂度的提高,都使得贯穿整个技术产品工业的软件存在了风险。
可以这样概括现在的情形:
● 产品对复杂系统软件的需求日益增加,包括网络连接,使用最具竞争力的高端微处理器技术,支持快速扩展和极度复杂的I/O技术;
● 很多不同的产品小组和团队都对这类系统软件有旺盛的需求,并且以前根本没有任何计算内容的产品也不例外。外围激烈的竞争形势根本不能忍受高成本的系统软件;现金预算约束也不支持以前维持的内部团队;一个公司的工程资源必须集中在能增值的技术上才能保持自己的竞争力;
● 现在的商业软件的版税部分成本是巨大的,而且也影响到公司的利润;
● 选择一个公共的策略性系统软件平台将使公司避免陷入多种解决方案中,这些解决方案都是高成本架构的,没有一个有完全的杠杆平衡力量,工业经验显示统一的平台可以降低成本并且加快产品开发周期。
这些因素结合起来就使得基于Linux的操作系统成为一个卓越的解决方案,以此来解决设备制造者面临的越来越多的软件内容危机。这一点有数以千万计的电子设备(如移动电话、机顶盒、高清晰电视等等)采用了Linux为操作系统为证。
具有讽刺意味的是,今天虽然很多公司依然要面对制造多功能高质量软件集成产品和强大的时间表压力,自己开发产品系统软件的诱惑依然存在。25年前,在RTOS领域里,我们听到的争论依然存在,只不过现在,争论的焦点变成了Linux。(见图一)


图1.软件vs.硬件成本。

“显性”成本
在嵌入式Linux和Linux发行版中有很多过程和成本的支出。从下边这些叙述中可见一斑:
● 嵌入式Linux或Linux发行版由超出3千万行源代码构成
● 源代码一般是包含19种或者更多的,不同步更新,非集成代码库里面;
● 源代码常常每天改变;
● 很多大公司使用广泛的嵌入式处理架构,需要24个微处理器架构以及其变量还有多于100个硬件平台的支持;
● 必须支持多种主计算环境(如Windows,Linux,Solaris,这些计算环境的各种版本等等);
构建,测试,发布一个最初发行版最起码需要30个开发人年

不包括进行的维护,微小的改进,或支持时间);整个加起来很容易达到七位数的开支(数百万美元-译者);
● 正在进行的维护,增加的微小改进,支持,构造一个开发的环境同样是笔不小的开支。

“隐性”成本
对于一个成功开发的过程,很多努力是隐性的或经常被忽略,包括:
● 开发一个可以全面测试和“质量保证”(QA)能力系统:测试套件是为OS本身开发的,支持大量的I/O设备,特别是为SOC设备定制的。一个典型的移动设备SOC内部有20到30个复杂I/O设备,都需要测试。支持每一个架构参考板的物理底层,同样需要开发和布置;
● 创建一个有效构建计算环境,可以尽可能快地更改构建(以小时计,而不是天);否则构建过程本身在整个项目开发流中会成为一个瓶颈;
● 开发工具:交叉调试,内存泄露检测工具,性能调整工具,内核识别的调试等。一般情况资金很少分配到工具开发上,因为大部分钱必须投在内核本身的开发上;
● 发布培训课程材料和课程:Linux系统及其庞大而且功能繁多;开发人员需要在其编程模板,设备驱动架构和开发工具上训练以便快速的出成果。
这些“隐性”努力的成本加上前边讨论过的“显性”开发成本,对于正确构建和支持一个嵌入式Linux系统是必须的。

过程开发,“新的复杂度”和成本
传统的内部开发过程,整个软件开发要很严格的遵守从头到尾的开发步骤,与此不同,Linux开发过程始于大量没有定制的过程——开源开发进程。一个公司可能对一项特别的开源项目有重大贡献,但他绝不可能控制整个进程;公司能做的仅仅是影响和参与。比如,Linux更新版本的速度可以不同。从微小bug的解决,适度新特性改进到整个底层系统的改变,引进新功能,不稳定以及新的bug,都可以影响Linux版本改变的比率。
为这些改变所做的整个支出是让人沮丧的。以跟踪一个独立LinuxCPU架构活动的MIPS为例。为保证每天发生并行的改变,开发人员需要监视11种不同的异步开源项目的email通信,包括:kernel.org,Linux内核的核心;gcc以及glibc projects(核心的工具链和库);还有至少九种其他的能组成可用Linux开发环境的因素。
Kernel.org本身每天可能有近5000条信息,其中1000多条需要反复评估,因为它们可能会应用到你们的linux源代码部分。如果忽视了这些信息,认为自己现在的系统运行正常,这将后患无穷。比如,一个最近的一个13行代码的安全补丁达到的保护你的嵌入式linux的效果,如果忽略了以前的补丁可能需要多于80万行的代码。这是一个典型例子,你是现在付帐还是以后付,当然后付的期偿更多了。
所以,需要开发新的进程来适应开源进程的动态化开发过程,这个进程可能会与任公司内部开发进程相交叉。将自己的内部软件开发进程和外部开源进程结合是十分必要的。这种结合的实现方式可以做为企业竞争的优势,但是必须以知识财富的形式小心保护。
自己构建Linux项目很少考虑这种开源开发进程的成本。如果没有正确的“Linux/开源意识”的引导,开发进度表和产品质量都将遭受不可知的风险或彻底的失败。这些新开发进程成本应该和前边提到的“显性”“隐性”成本一起包括在付出之中。

综观总成本
考虑以上所有的因素,可以认出:要开发一个商业可用嵌入式Linux发行版本,时间上和财力上的投资是不菲的,而通常来将这两项的投入又常常是非常有限的。
为整个开发进程设计一个成本模型是很重要的,成本要包括工具,对小中大型Linux的支持维护等。即使对最简单的情形,开发成本也动辄以百万美元计。越高级,成本也就越高。
如果数年前人们倾向于购买而不是自建RTOS,那么如今人们肯定更加愿意购买一个有更多功能更加复杂的基于Linux的嵌入式操作环境了。

 
Advertisements