開源硬件會像開源軟件給軟件業(yè)帶來的影響那樣,也給硬件相關技術(以及硬件團隊自身)帶來巨大發(fā)展嗎?這也許是每一個硬件工程師(當然也包括軟件工程師)都會思考的問題。硬件與軟件畢竟不一樣,本文主要從硬件開源與軟件開源的區(qū)別的角度,來簡單說說硬件開源為什么那么難。
首先我們要明確的是:硬件的開源工作遠遠要比軟件復雜。
為什么呢?因為硬件工程相對于軟件工程而言,有著以下幾個本質的區(qū)別:
1、模塊化,標準化,以及修改的便捷性
軟件產(chǎn)品都有著定義完整,并且可以隨時調整輸入輸出。一旦一個軟件模塊編寫運行測試通過,那么這個模塊就可以被視作黑盒子,被另外一個完整定義的模塊調用運行。只要軟件之間的接口不變,那么各個模塊之間的邏輯就不會發(fā)生變化,這就使得軟件的開發(fā)人員之間可以僅僅通過定義好的接口來互相合作,而無論這些開發(fā)人員身處何處。
而在硬件領域,工程師們就沒有那么幸運了。這個世界上不存在只要知道接口就可以加入設計使用的硬件。硬件的選型是一件很麻煩的事情,即使工作很多年的硬件設計師,在選用從未使用過的硬件設備時,也很有可能在接口電壓或是時鐘頻率的匹配這種“小事情”上栽跟頭 —— 隨便哪里冒出來的一個接觸電阻和寄生電容就可能把整個電路給弄砸了。
硬件設計師們沒有強大的IDE(Integrated Development Environment,集成開發(fā)環(huán)境),沒有美好的編譯器和解釋器,所有硬件工程師都在第一堂EDA(Electronic Design Automation,電子設計自動化)設計課上被告知:“軟件仿真是不可靠的,只能作為參考。”硬件設計唯一能依靠的就是扎實的理論基礎和反復的實驗檢測。像是“一個中國工程師和一個美國工程師遠距離合作開發(fā)出來一個信號采集器”這種在開源軟件看來很正常的合作模式,在硬件領域是不可能發(fā)生的。硬件設計師們必須坐在一起跑仿真,測芯片,焊板子。
有的人可能就問了:“為什么硬件不能像軟件那樣標準化,提供接口刷一下rom呢?”
那是因為我們身處的這個物理世界是沒辦法標準化的。硬件直接和物理世界打交道,老天爺沒把這世界做的標準化,我們也沒辦法?,F(xiàn)在硬件模塊化已經(jīng)做的很好了,尤其是數(shù)字電路這塊。問題主要是模擬電路,電容電感電阻,這些量無處不在,電路的幾何形狀,材料,加工工藝都會影響這幾個參數(shù),實在是沒法在設計時標準化。比如,兩根導線之間距離的不同所產(chǎn)生的互感和電容差值就可能導致電路無法正常工作,這玩意我覺得實在是很難標準化。設計模塊的時候總不可能把所有引腳的線長、線寬、線距都規(guī)定好吧?這種問題到了高頻和小尺度的時候就會特別明顯。
2、生產(chǎn)和發(fā)布成本
在軟件開發(fā)過程中,一旦某個模塊的接口需要改變,那么軟件工程師所要做的就是坐在電腦前修改代碼然后使用短信,電話,email或是git,svn這些工具通知所有需要使用這個模塊的人,大家一起調試通過后,修改就完成了。這個過程的溝通成本和修改成本,除了人力以外,基本為零。發(fā)布軟件的成本那就更低了,以前好歹還需要用軟盤光盤這樣的載體,現(xiàn)在有了互聯(lián)網(wǎng),那基本都是零成本了。
硬件開發(fā)的情景則相反,硬件工程師先是千辛萬苦跑了無數(shù)仿真做出來電路,送到工廠再花不少鈔票制作出來之后,示波器、邏輯分析和頻譜分析儀(他們都價值不菲)會用嚴酷的事實告訴你:你這個東西不對。如果你做的是板級電路,那么恭喜你,運氣好的話rework其中的某些器件也許就能夠拯救你的設計。如果你做的是芯片級設計,那么就準備好再花個幾十萬做剖面、X光、FIB等找出問題,重新流片看看老天爺是不是能保佑你吧。
硬件的設計修改成本實在是太高了,這也是為什么現(xiàn)在Arduino之類的通用板和IP core的市場這么火的原因。
另外,等做出產(chǎn)品熱賣了,那么隨之而來的倉儲、貨運、分銷、售后等體系的建設,絕對也是花錢如流水。在硬件產(chǎn)品公司中,開發(fā)人員的成本往往只是很小的一部分。
3、入行門檻
在軟件業(yè)極度發(fā)達的今天,任何具有良好邏輯思維能力的人只要感興趣,就可以通過互聯(lián)網(wǎng)獲得足夠的教育從而稱為一名軟件開發(fā)人員。而所有的投資僅僅只是一臺可以上網(wǎng)的電腦。這就使得現(xiàn)在的程序員數(shù)量不斷上升,你總是可以碰到幾個閑著找事的程序員一起來合作一些有趣的事情。
而硬件這行當,至今仍然還需要科班出身的專業(yè)人員來進行設計開發(fā),我沒有見過自學成才的優(yōu)秀電子硬件設計工程師。為什么呢?儀器耗材只是原因之一;另一方面,硬件設計需要扎實的物理和數(shù)學基礎。無論是麥克斯韋的電磁理論,還是香農(nóng)的信息論,亦或是傅立葉/拉普拉斯變換,都不是一朝一夕能夠搞明白的,沒有大量的時間深入學習和實踐,真的很難達到實用的水平。相比之下,hello world和實戰(zhàn)之間的距離實在是很近。硬件工程師的培養(yǎng)周期很長,光憑興趣,靠自學真的很難堅持下去。
就算你只是把硬件買回來組裝,自己只是搭板子,其難度也取決于硬件工程師自身的基礎和設計目標之間的距離。比如Arduino對新手來說已經(jīng)算是足夠簡單了,但要玩轉Arduino也至少要懂C、懂單片機、懂各種板級接口。如果要上傳感器或電機伺服器的話,至少還得懂點ADC和馬達/PID。
培養(yǎng)一名合格的硬件設計工程師,需要大量物理和電子方面的基礎理論學習,并且伴隨大量使用各種儀器的實習工作,這其中的時間和材料成本是非常高的。硬件工程師數(shù)量不多,加上之前提到的協(xié)作的困難,使得找一批搞硬件的聚到一起做風險很高的開源工作很不容易。
總而言之,硬件的開源要做起來,就需要克服設計非標準化、成本高、入行門檻高這幾個問題。而在我看來,這些問題很難在短時間內被解決?;蛟S像Arduino和IP core這樣的解決方案能夠在某些領域獲得突破,但就總體的電子電路設計而言,我尚未看到很好的開源模式。不過物聯(lián)網(wǎng)應該是個緩慢持續(xù)地將整個社會數(shù)字化的過程,我個人認為這個過程將會持續(xù)相當長的一段時間(10年以上),這期間會發(fā)生什么,還是拭目以待吧。