开源硬件的一个例子:arduino.cc
像Arduino和IP Core这样的解决方案能够在某些领域获得突破,但就总体的电子电路设计而言,还没有看到很好的开源模式。
开源不难, 难在开源还要赚钱,Arduino模式的背后是 atmel。 energia 的背后 是TI。 这些所谓的开源模式,给你方便给你自由度,同时扩大自己在半导体市场的影响和销量。但是半导体公司真正赚钱的部分,是不会开给你看的,只会扶持Arduino这样的社区 提供资金和技术支持,大家都 win win,看起来是个挺成功的模式。
像 Arduino 这样(也就只有这么一个例子,Bug Labs 和 Openmoko 之类后来就没听说过了)。硬件没有真正意义上的开源和开源的价值(解释可见 Steve Jobs 在 MacWorld 2007 上说手机按键),所以那些开源硬件其实很大一部分是软件开源,而且限于集成电路领域。
自称是开源硬件的Arduino提供了各式各样的开发板、扩展板还有传感器模块,看似开源,但还是达不要像开源软件一样不做任何修改自己放到自己的产品设计之中。Arduino的硬件设计是使用eagle完成的,然而想在自己的设计中自己调用Arduino的硬件电路设计还是需要一定的处理的(转换到Altium Designer或是PADS等电路设计软件中)。此外,个人认为使用Arduino的人(例如创客)可能根本不关心其硬件设计,所以Arduino真正开源的还是在于软件上,其所提供的Arduino IDE,封装的语言,提供的Code Demo,复用性强,入门门槛极低。所以Arduino的硬件只是初期的验证和Demo中使用,而其软件可以被复用到产品中,所以归根结底,Arduino的开源还是软件上的开源,绝非硬件。
硬件工程相对于软件工程而言,有以下三个本质区别,使得硬件的开源工作远远比软件复杂:
- 模块化,标准化,以及修改的便捷性。软件产品都有些定义完整,可以随时调整的输入输出。一旦一个软件模块编写运行测试通过,那么这个模块就可以被视作黑盒子,被另外一个完整定义的模块调用运行。只要软件之间的接口不变,那么各个模块之间的逻辑就不会发生变化,这就使得软件的开发人员之间可以仅仅通过定义好的接口来互相合作,而无论这些开发人员身处何处。而在硬件领域,不存在只要知道接口就可以加入设计使用的硬件。硬件的选型是一件很麻烦,即使工作很多年的硬件设计师,在选用从未使用过的硬件设备时,也很有可能在接口电压或是时钟频率的匹配这种“小事情”上栽跟头——随便哪里冒出来的一个接触电阻和寄生电容就可能把整个电路给弄砸了。硬件设计师们没有强大的IDE,没有美好的编译器和解释器,所有硬件工程师都在第一堂EDA设计课上被告知:软件仿真是不可靠的,只能作为参考。硬件设计唯一能依靠的就是扎实的理论基础和反复的实验检测。像是“一个中国工程师和一个美国工程师远距离合作开发出来一个信号采集器”这种在开源软件看来很正常的合作模式在硬件领域是不可能发生的。硬件设计师们必须坐在一起跑仿真,测芯片,焊板子。
- 生产和发布成本。在软件开发过程中,一旦某个模块的接口需要改变,那么软件工程师所要做的就是坐在电脑前修改代码然后使用短信,电话,email或是git,svn这些工具通知所有需要使用这个模块的人,大家一起调试通过后修改就完成了。这个过程的沟通成本和修改成本,除了人力以外,基本为零。发布软件的成本那就更低了,以前好歹还需要用软盘光盘这样的载体,现在有了互联网,那基本都是零成本了。硬件开发的情景则相反,当硬件工程师千辛万苦跑了无数仿真做出来的电路送到工厂花了不少钞票制作出来之后,示波器,逻辑分析和频谱分析仪(他们都价值不菲)会用严酷的事实告诉你:这个东西不对。如果你做的是板级电路,那么恭喜你,运气好的话rework其中的某些器件能够拯救你的设计。如果你做的是芯片级设计,那么就准备好再花个几十万做剖面,X光,FIB等找出问题,重新流片看看老天爷是不是能保佑你吧。硬件的设计修改成本实在是太高了,这也是为什么现在Arduino之类的通用板和IP core的市场这么火的原因。另外,等做出产品热卖了,那么随之而来的仓储,货运,分销,售后等体系的建设,绝对也是花钱如流水。在硬件产品公司中,开发人员的成本往往只是很小的一部分。
- 入行门槛。在软件业极度发达的今天,任何具有良好逻辑思维能力的人只要感兴趣,就可以通过互联网获得足够的教育从而称为一名软件开发人员。而所有的投资仅仅只是一台可以上网的电脑。这就使得现在的程序员数量不断上升,你总是可以碰到几个闲着找事的程序员一起来合作一些有趣的事情。而硬件这行当,至今仍然还需要科班出身的专业人员来进行设计开发,我没有见过自学成才的电子硬件设计工程师。培养一名合格的硬件设计工程师,需要大量物理和电子方面的基础理论学习,并且伴随大量使用各种仪器的实习工作,这其中的时间和材料成本是非常高的。硬件工程师数量不多,加上之前提到的协作的困难,使得找一批搞硬件的聚到一起做风险很高的开源工作很不容易。