从嵌入式硬件的角度来看开源和商用软件嵌入式系统的软件许可证

作者 Mike Parks, P.E, Lynette Reese, Mouser Electronics

在嵌入式系统开发中人们总会提及一个问题:“开源软件与商用软件,哪个更符合我们的应用呢?”

关于开源代码和商用代码的讨论总是能激起极客们的热情。这个讨论就等同于在硬件方面人们讨论哪种电容是音频电路的理想选择。大多数人都不希望使用的东西需要软件许可,所以开源和商用的区别在很多技术领域引起了哲学性的讨论。

当把一个嵌入式系统领入市场时,开源与商用哪种模式更好呢?有时候你别无选择。

1源代码101

企业出于掌握自己命运及未来潜在成本的考虑,会在源代码上下很多功夫。那么,什么是源代码呢?源代码是指挥处理器进行工作的人类可读指令。只有源代码,计算机什么都做不了。它必须编译为计算机可识别的二进制代码。如果你有源代码,你就可以对它进行修改和再编译,并创造一个符合你的独特需求的应用程序。你也可以通过查看源代码来保证程序没有漏洞或后门程序。操作系统也可以开源从而透明化,在更深层次上控制处理器以提供中断处理、周边管理等等。

1

2操作系统和编译器

使用开源软件,你可以不受他方限制的应用你的产品(无论是开源操作系统,程序或者软件开发工具)。如果有必要,你可以自己进行开发。基于专利的商用系统,如果没有经过你个人改进,那只会在被淘汰后才有可能开放使用。例如,一个操作系统(OS)需要在其他的公司购买和维护才能在你的中断设备上使用,但是那个公司如果被你的竞争对手收购呢?他们会放弃对于新技术的更新和漏洞修复。更严重地,如果没有合同保护,你可能会被要求立即停止使用软件。

另一方面,如果你使用开源的编译器和操作系统,你需要知道你正在做什么;在嵌入式系统中开源的很少有成套工具。你还需要对开源维护社区能对你的产品进入市场的急切需求所能做的事情有一个合理的预估,因为开源软件使用新技术的进程相对比较缓慢。你可以自己解决自己的需求,同时也为开源社区做出贡献,即使这样,接受为正式库的进程也不一定如你期望。当然,你也可以不把你的改进贡献给社区,这完全合法,不过无论你认为它有多好,除了你自己,没有人会帮助你维护它。

这里提一下开源硬件(OSHW)。开源硬件是“类开源”,它会提供原理图的源文件。但这种开放性无法延伸到片上系统(SoC),处理器或电路板上的支持新片。开源硬件也可以使用商用开发工具,这取决于处理器。然而,“开源”的概念已经扩展渗入到各个设计领域,并不局限于电子产品。“开放”通常指公开分享信息,以便其他人对设计(无论是实体产品,软件,教育或想法)进行重现。事实上,一场开源的运动正在进行之中,很多人认为它受与1991年底出现的Linux系统的启发。

3优点、缺点及误解

凡事都有两面性,开源与商用软件受到了同样的误解。开源的最复杂问题是大量的许可证,即使最精明的技术员也可能被搞晕。为了达到本文的目的,我们使用开源代码促进会对开源的定义——开源软件是可以被任何人随意使用、修改和分享的软件。开源软件由很多人开发,并在拥有遵守开源定义(原网页链接)的许可证的条件下发布。

应用最多的开源许可证包括Creative Commons(知识共享组织)许可、Apache许可,BSD(加州大学伯克利分校软件)许可,GNU通用公共许可,麻省理工许可和Mozilla公共许可。想要得到完整清单,可以点击这里(原网页链接)。开源许可多种多样,但是一个典型的许可证可以保证你在一个开源项目中建立和扩展,那些在你工作基础上继续开发的人必须在同一个许可下写入他们的代码。这样可以避免别人在你的辛苦工作上获利,至少很难做到。

根本上来讲,开源软件是对云端集体智慧的获取和分享。很多大的不兼容开源项目由一小帮志愿者进行开发、调试及整理源代码。而有些项目会聚集数量庞大的社区,使得开发者可以向终端使用者索取适当的资金。开源项目中用户与开发人员相互协作的属性使其可以吸引新用户和程序员。对于独立开发者来说,参与开源项目是一项很重要的能力体现。有些人参与其中是为了从他人那里学到知识,不管通过何种学习模式你都需要有谦卑的态度和心里承受能力,毕竟开源是开放的(别人都可以看到你的不足)。你的代码可能会被别人挑出来,批评或表扬(有时来自同一个人)。社区中所有被贡献的代码里只有最好的会被加入到维护版本中,以让大家对程序员的技术进行查看及评论。

相反地,如果使用商用软件,经营者通过对他们的代码实施版权限制以给保留更多的合法权益。商用软件就是典型的“闭源”,即使你购买了应用程序,也无法访问源代码。通常在“用户许可协议”(EULA)或其他法律性文件中列出了完整的限制条例。这些协议规定了用户使用程序时可以及不能做的事情。这是为了限制对程序进行修改、分享、再分布以及反向工程操作的行为。总而言之,商用软件是一种知识产权。比如说,你发明了一种独特的算法,该算法成为了你的产品中的“秘方”,对它进行商用许可限制则是一种明智的行为。反过来讲,如果你的软件是众多解决办法之一,那么对你的代码进行开源会使你的想法被更多人承认,至少是赞誉。

有一点必须要澄清的是开源并不意味着免费,商用也不意味着必须花钱才能使用。另外,认为开源是业余人员的项目,专业开发人员只做商用软件的想法也是错误的。然而,然而,当你选择了一个商用软件平台,必须先搞清楚它许可证中的费用收取架构,以免当你使用软件时被它的使用费用吓到。另外还要交付“版税”,以供开发人员对他们的程序代码进行优化及调试。从开发人员的角度来看,这意味着商用软件开发商可以给他们提供准时而长久的资金支持(有些情况下,维护和支持费用的协议是以年费来记得)。

因为商用和工业嵌入式系统需要使用几年到几十年,所以来自开发商长久的支持至关重要。从这方面来说,开源软件不如商用软件那么可靠。如果一个关键开发人员决定退出一个项目而没有人能够顶替他的工作,则这个应用会很快失去竞争力,就像现在没有那个基础技术能像USB 3.1一样更新。但是至少你已经获得了源代码,如果你有足够的专业知识、时间或金钱雇人替你做,你就可以对代码进行改进。对于商业软件的代码,在没有原创人员同意的情况下获取源代码或进行改进的行为是违法的。

还有更复杂的情况,有的软件中同时包含开源和商用代码。例如,苹果的操作系统OS X就是在开源的UNIX操作系统上建立。然而,窗口化的系统使得OS X人机交互界面是非开源的。Google的安卓操作系统源代码被别人模仿改造,并安装在他们经过授权的手机中,这种行为是合法的,但他们的代码不受Google支持和维护。(这种改造通常造成手机中软件臃肿——一些不必要的软件会消耗电量和内存,也无法删除。)

2

图1:德州仪器最新的开启面板(开源硬件),使用MSP32处理器,面向笔记本、便携设备、智能电网、医药自动化与控制市场/center>

当二进制遇到金属:嵌入式系统中的开源和商用软件

嵌入式电子设备的世界一直被商用软件统治,包括像集成开发环境(IDE),即时操作系统(RTOS)以及固件库等。像Arduino的一些平台想要改变现状,但是很多“专业”平台仍然在专有许可协议之下处于封闭状态。不仅是开源社区想要推进这种改变,美国国防部以及国家航天局也想促进建立开源架构使得协作、数据共享以及避免“厂商锁定”——项目的推进被限制在一个供应商中而造成低寿命高成本。

一些已成立的嵌入式平台开发公司正在响应开发者们对更多开源解决方案的需求。随着开源慢慢地渗入到嵌入式系统,其它的公司也开始反思许可费用以期望吸引更多的开发人员。从集成开发环境的角度来看,开源的Arduino集成开发环境与其它平台相比非常的简朴,商用平台像德州仪器的代码调试器,包含很多重要的专业特性,比如功耗监测。德州仪器也支持一个叫做Energia的开源产品作为其它微处理器的替代品。意法半导体的开放式开发环境(STM32OE)中有他们的开源硬件Nucleo 开发板。德州仪器和意法半导体这样专注于提供集成电路芯片的芯片制造商,也清楚的认识到硅片并不是嵌入式系统的全部。而软件已经触及到电子设备的方方面面;即使是集成电路的设计者也必须使用向Synopsis、Mentor Graphics以及Cadence等工具软件开设计集成电路版图。

3

图1:开源硬件Nucleo开发板大约10美元,包括免费的mbed.org工具软件,也可以支持KEIL工具。STM32与大多数Arduino兼容。

开源:不再单指软件

硬件也在进行开源化改革。可想而知,关于硬件开源的讨论会更复杂。软件的软代码一但写出来很快就可以得到版权保护。另外,源代码中不存在有形资产呢。在硬件的世界中便是另一幅景象。CAD设计文件和3D打印机的STL文件最终可以转化为实物产品。那么版权是仅对设计文件有效,还是对最终生产的有形产品都有效呢?虽然传统观点认为版权对实物不产生作用,这种未知领域还没有经过测试。现在已经有了开源硬件专用的许可,使用最广泛的是CERN开源硬件许可和TAPR开源硬件许可。

概要

出于对嵌入式开发领域的尊重,使用开源或商用软件通常取决于所选用的硬件。如果微控制器或现场可编程门阵列所在的项目说明书只来自一家供应商,而且供应商把他们的代码封锁起来,那么你就没有机会获得它们。你或许可以争取获得更多数据,但也要付出额外的开销。也就是说,随着硬件越来越商品化,多个厂家可以提供类似的解决方案,需要更多的软件许可的厂家可能会影响到整体的市场供给平衡并产生分化。因此可以推测,随着产品的商业化,更多的供应商会在软件方面提供更多的选择。集成开发环境、(即时)操作系统和固件库的许可架构或许会影响到开发人员的选择。无疑,在越来越多的社区、贡献者的推动下,在法律的完善和秩序的确立下,开源许可的商业模式和商品正在渐渐成为主流。