今天Linux越来越成熟, 应用越来越多, 但是自己构造, 是购买商业版本依然困扰开发者,这篇写在2007年的文章很好地 回答了产业界长期的困惑一开源软件为何要付费,商业的嵌入式Linux的价值何在。
20世纪80年代初, 商用实时操作系统(RTOS)提供商的出 现,让人们开始了一场旷日持久的争论。争论的焦点是:到底应 该购买商业的实时操作系统还是自己构建实时操作系统呢?经常 为嵌入式设备开发软件的工程师们也卷入了这样的争论之中。如 今, 对于很多嵌入式设备来讲,Linux已经成为了更受欢迎的操 作系统。但在这个崭新的Linux世界, 有关购买还是自建的争论 是不是依然存在呢?
要回答这个问题,必须理解以下两点:
1)让开发者选择Linux作为嵌入式操作系统, 而不是其他实时操传统作系统的压力。
2) Linux与其他RTOS的一些细微差别, 其开源和软件开发 过程、深远地影响了实时操作系统开发和购买之间的平衡。
设备中的软件内容爆炸
在嵌入式系统世界中,以下两个方面的快速扩张是让开发者 转向Linux的基础:
1)新的复杂的产品种类增多。
2)嵌入式设备本身系统软件需求的增加。
请试想一下,一个曾经只需要微控制器和小型控制程序(固 件)的玩具制造厂,需要开发系列新产品、这些产品要基于完全 开源环境, 而且是多线程程序, 有TCP/IP连接、蓝牙无线通信 等。结果、这家跨国消费电子公司突然发现将不得不为自己的产 品开发决定采用有上百万行的操作系统软件,因为现在每个产品 都要求有多线程程序以及网络连接。内部成本的增加以及产品设计开发复杂度的提高、都使得贯穿整个产品的软件产生了风险。
可以这样概括现在的系统软件市场情形:
1)产品对复杂系统软件的需求日益增加,包括网络连接、 使用最具竞争力的高端微处理器技术,支持快速扩展和极度复杂 的I/O技术。
2)很多不同的产品小组和团队都对这类系统软件有旺盛的 需求,连以前根本没有任何计算内容的产品也不例外。外围激烈 的竞争形势根本不能忍受高成本的系统软件;现金预算约束也不 支持以前维持的内部开发团队; 一个公司的工程资源必须集中在 能增值的技术上才能保持自己的竞争力。
3)现在的商业软件的版税部分成本是巨大的,严重地影响 了公司的利润。
4)选择一个公共的策略性系统软件平台将使公司避免陷入 多种解决方案中而难以决策的窘境,而且这些解决方案都是高成 本架构的、没有一个方案具有完全的杠杆平衡力量,以往的工程经验显示,统一的平台可以降低成本并且加快产品开发周期。
这些因素结合起来就使得基于Linux的操作系统成为一个卓 越的解决方案、以此来解决设备制造者面临的越来越多的软件内 容危机。这一点有数以千万计的电子设备(如移动电话、机顶盒、 高清晰电视等)采用了Linux为操作系统的实例为证。
具有讽刺意味的是,今天虽然很多公司依然要面对制造多功 能高质量软件集成产品和强大的时间表压力,自己开发产品系统 软件的诱惑依然存在。时至今日,30多年前在RTOS领域里, 我 们听到的争论依然存在, 只不过, 现在争论的焦点变成了Linux。
显性成本
在嵌入式Linux和Linux发行版中有很多过程和成本的支出, 从下边7个方面的叙述中可见一斑:
1)嵌入式Linux或Linux发行版由超出3000万行源代码构成。
2)源代码一般包含19种或者更多的、不同步更新的、没有集成到上代码库川面的软件代码
3)源代码常常每人改变。
4)很多大公司使用广泛的嵌入式处理架构,需要24个微处 理器架构、并且其变量还有多于100个硬件平台的支持。
5)必须支持多种主计算环境(如Windows、Linux、Solaris, 以及这些计算环境的各种版本等)。
6)构建、测试、发布一个最初发行版最起码需要30个开发 人员(还不包括需要进行的维护、微小的改进或支持上的人力和 时间成本),整个成本加起来很容易达到数百万美元。
7)正在进行的维护、增加的微小改进、支持,构造一个开 发的环境同样是笔不小的开支。
隐性成本
对于一个成功软件开发的过程来说,很多工作是隐性的或经常被忽略的,包括以下几项:
1)开发一个可以全面测试和质量保证(QA)能力系统:测 试套件是为操作系统本身开发的,支持大量的I/O设备,特别是 为SoC设备定制的。一个典型的移动设备SoC内部有20~30个复杂 的I/O设备,它们都需要测试。支持每一个架构参考板的物理底 层、同样需要开发和布置。
2)创建一个有效构建计算环境,以便尽可能快地更改构建(以小时计,而不是天),否则构建过程本身在整个项目开发流 中会成为一个瓶颈。
3)开发工具:交叉调试、内存泄漏检测工具、性能调整工 具、内核识别的调试等。一般情况下,项目资金很少分配到工具 的开发上,因为大部分钱必须投在内核本身的开发上。
4)发布培训课程和课程材料:Linux系统极其庞大而且功能 繁多,开发人员需要在其编程模板、设备驱动架构和开发工具上 训练,以便快速出成果。
这些隐性努力的成本加上前边讨论过的显性开发成本,对于 正确构建和支持一个嵌入式Linux系统都是必需的。
开发过程、新的复杂度和成本
传统的内部开发过程,整个软件开发要很严格地遵守从头到 尾的开发步骤。与此不同,Linux开发过程始于大量没有定制的 过程、这就是开源开发进程。一个公司可能对一项特别的开源项 目有重大贡献,但绝不可能控制整个进程;公司能做的仅仅是影 响和参与。比如,Linux更新版本的速度可以不同。从微小bug的 解决、适度新特性改进,到整个底层系统的改变,引进新功能、 不稳定以及新的bug都可以影响Linux版本改变的频率。
为这些改变所做的整个支出大到让人沮丧的。让我们跟踪一 个独立LinuxCPU架构活动, 以MIPS为例来说明这种情况:为保 证跟踪每天发生的改变,开发人员需要监视11种不同的异步开源 项目的Email通信, 包括:kernel.org-Linux内核的核心、gcc以及glibcprojects(核心的工具链和库), 还有至少9种其他的能组成可用Linux开发环境的因素,kerneL org本身每无可能有近 5000条信息,其中1000多条需要反复评估,因为它们可能会应用 到你们Linux的源代码部分。如果忽视了这些信息, 认为自己现在的系统运行正常,这将后患无穷。比如,一个最新的13行代码 的安全补丁能起到保护你的嵌入式Linux的作用, 如果你忽略了 这13行代码、那么补丁可能要用多于80万行的代码来补救。这是 一个典型例子,你是现在付账还是以后付,当然后付的费用更多 了。
所以,需要开发新的进程来适应开源进程的动态化开发过程, 这个进程可能会与任何公司内部开发进程相交叉。将自己的内部 软件开发进程和外部开源进程相结合是十分必要的。这种结合的 实现方式可以作为企业竞争的优势,但是必须以知识财富的形式 小心保护。
自己构建Linux项目很少考虑这种开源开发进程的成本。 如 果没有正确的Linux/开源意识的引导, 开发进度表和产品质量都 将遭受不可知的风险或彻底的失败。这些新开发进程成本应该和前边提到的显性成本一起包括在付出之中。
综观总成本
考虑以上所有的因素,可以认为:要开发一个商业可用嵌入 式Linux发行版本, 时间上和财力上的投资是不菲的, 而通常企 业在这两项上的投入又常常是非常有限的。 为整个开发进程设计一个成本模型是很重要的,成本要包括 工具, 对小、中、大型Linux的支持维护等。即使最简单的Linux系统开发,开发成本也动辄以百万美元计。系统越高级,成本也 就越高。
摘自《嵌入式操作系统风云录》