在嵌入式系统开发中人们总会提及一个问题:“开源软件与商用软件,哪个更符合我们的应用呢?”
关于开源代码和商用代码的讨论总是能激起极客们的热情。这个讨论就等同于在硬件方面人们讨论哪种电容是音频电路的理想选择。大多数人都不希望使用的东西需要软件许可,所以开源和商用的区别在很多技术领域引起了哲学性的讨论。
当把一个嵌入式系统领入市场时,开源与商用哪种模式更好呢?有时候你别无选择。
1源代码101
企业出于掌握自己**及未来潜在成本的考虑,会在源代码上下很多功夫。那么,什么是源代码呢?源代码是指挥处理器进行工作的人类可读指令。只有源代码,计算机什么都做不了。它必须编译为计算机可识别的二进制代码。如果你有源代码,你就可以对它进行修改和再编译,并创造一个符合你的独特需求的应用程序。你也可以通过查看源代码来保证程序没有漏洞或后门程序。操作系统也可以开源从而透明化,在更深层次上控制处理器以提供中断处理、周边管理等等。
2操作系统和编译器
使用开源软件,你可以不受他方限制的应用你的产品(无论是开源操作系统,程序或者软件开发工具)。如果有必要,你可以自己进行开发。基于专利的商用系统,如果没有经过你个人改进,那只会在被淘汰后才有可能开放使用。例如,一个操作系统(OS)需要在其他的公司购买和维护才能在你的中断设备上使用,但是那个公司如果被你的竞争对手收购呢?他们会放弃对于新技术的更新和漏洞修复。更严重地,如果没有合同保护,你可能会被要求立即停止使用软件。
另一方面,如果你使用开源的编译器和操作系统,你需要知道你正在做什么;在嵌入式系统中开源的很少有成套工具。你还需要对开源维护社区能对你的产品进入市场的急切需求所能做的事情有一个合理的预估,因为开源软件使用新技术的进程相对比较缓慢。
你可以自己解决自己的需求,同时也为开源社区做出贡献,即使这样,接受为正式库的进程也不一定如你期望。当然,你也可以不把你的改进贡献给社区,这完全合法,不过无论你认为它有多好,除了你自己,没有人会帮助你维护它。
这里提一下开源硬件(OSHW)。开源硬件是“类开源”,它会提供原理图的源文件。但这种开放性无法延伸到片上系统(SoC),处理器或电路板上的支持新片。开源硬件也可以使用商用开发工具,这取决于处理器。然而,“开源”的概念已经扩展渗入到各个设计领域,并不局限于电子产品。“开放”通常指公开分享信息,以便其他人对设计(无论是实体产品,软件,教育或想法)进行重现。事实上,一场开源的运动正在进行之中,很多人认为它受与1991年底出现的Linux系统的启发。
3优点、缺点及误解
凡事都有两面性,开源与商用软件受到了同样的误解。开源的最复杂问题是大量的许可证,即使最精明的技术员也可能被搞晕。为了达到本文的目的,我们使用开源代码促进会对开源的定义——开源软件是可以被任何人随意使用、修改和分享的软件。开源软件由很多人开发,并在拥有遵守开源定义(原网页链接)的许可证的条件下发布。
应用最多的开源许可证包括Creative Commons(知识共享组织)许可、Apache许可,BSD(加州大学伯克利分校软件)许可,GNU通用公共许可,麻省理工许可和Mozilla公共许可。想要得到完整清单,可以点击这里(原网页链接)。开源许可多种多样,但是一个典型的许可证可以保证你在一个开源项目中建立和扩展,那些在你工作基础上继续开发的人必须在同一个许可下写入他们的代码。
这样可以避免别人在你的辛苦工作上获利,至少很难做到。
根本上来讲,开源软件是对云端集体智慧的获取和分享。很多大的不兼容开源项目由一小帮志愿者进行开发、调试及整理源代码。
而有些项目会聚集数量庞大的社区,使得开发者可以向终端使用者索取适当的资金。开源项目中用户与开发人员相互协作的属性使其可以吸引新用户和程序员。对于独立开发者来说,参与开源项目是一项很重要的能力体现。有些人参与其中是为了从他人那里学到知识,不管通过何种学习模式你都需要有谦卑的态度和心里承受能力,毕竟开源是开放的(别人都可以看到你的不足)。你的代码可能会被别人挑出来,批评或表扬(有时来自同一个人)。社区中所有被贡献的代码里只有最好的会被加入到维护版本中,以让大家对程序员的技术进行查看及评论。
相反地,如果使用商用软件,经营者通过对他们的代码实施版权限制以给保留更多的合法权益。商用软件就是典型的“闭源”,即使你购买了应用程序,也无法访问源代码。通常在“用户许可协议”(EULA)或其他法律性文件中列出了完整的限制条例。这些协议规定了用户使用程序时可以及不能做的事情。这是为了限制对程序进行修改、分享、再分布以及反向工程操作的行为。总而言之,商用软件是一种知识产权。比如说,你发明了一种独特的算法,该算法成为了你的产品中的“秘方”,对它进行商用许可限制则是一种明智的行为。反过来讲,如果你的软件是众多解决办法之一,那么对你的代码进行开源会使你的想法被更多人承认,至少是赞誉。
有一点必须要澄清的是开源并不意味着免费,商用也不意味着必须花钱才能使用。另外,认为开源是业余人员的项目,专业开发人员只做商用软件的想法也是错误的。然而,然而,当你选择了一个商用软件平台,必须先搞清楚它许可证中的费用收取架构,以免当你使用软件时被它的使用费用吓到。另外还要交付“版税”,以供开发人员对他们的程序代码进行优化及调试。从开发人员的角度来看,这意味着商用软件开发商可以给他们提供准时而长久的资金支持(有些情况下,维护和支持费用的协议是以年费来记得)。
因为商用和工业嵌入式系统需要使用几年到几十年,所以来自开发商长久的支持至关重要。从这方面来说,开源软件不如商用软件那么可靠。如果一个关键开发人员决定退出一个项目而没有人能够顶替他的工作,则这个应用会很快失去竞争力,就像现在没有那个基础技术能像USB 3.1一样更新。但是至少你已经获得了源代码,如果你有足够的专业知识、时间或金钱雇人替你做,你就可以对代码进行改进。对于商业软件的代码,在没有原创人员同意的情况下获取源代码或进行改进的行为是违法的。
还有更复杂的情况,有的软件中同时包含开源和商用代码。例如,苹果的操作系统OS X就是在开源的UNIX操作系统上建立。然而,窗口化的系统使得OS X人机交互界面是非开源的。Google的安卓操作系统源代码被别人模仿改造,并安装在他们经过授权的手机中,这种行为是合法的,但他们的代码不受Google支持和维护。(这种改造通常造成手机中软件臃肿——一些不必要的软件会消耗电量和内存,也无法删除。)
|