使用 Go 使用者空間(user-space)環境和編譯器的好處

Go 是由 Google 創建的系統程式語言。Go 具有強類型(strong typing)、語言級別的並發支援(concurrency support)、透過通道(channels)進行進程間通訊(inter-process communication)、運行時類型安全性(runtime type safety)和其他保護措施、動態分配(dynamic allocation)和垃圾收集(garbage collection)以及閉包(closures)。Go 具有與 Java 類似的套件名稱符號(package name notation),使得可以清楚地確定給定程式需要哪些套件(packages)。

現代語言結構使 Go 成為比 C 更安全的語言。這種安全性對於網路連接的嵌入式系統至關重要,這些系統通常擁有用 C 編寫的網路工具程式,包括網頁伺服器、包含 sshd 的網路伺服器(network servers),以及提供命令解釋器存取的程式(本身以 C 編寫)。所有這些都證明容易受到互聯網成為攻擊頻繁環境的威脅。

即使是最熟練的程式設計師也會犯下 C 語言中無法恢復的錯誤,尤其是在網路連線系統上。目前,即使我們個人電腦、印表機和恆溫器中最低等級的韌體也是連網的。這些程式錯誤要麼在 Go 中不可能犯,要麼如果犯了,則會在運行時檢測到並導致程式退出。

在低階嵌入式韌體中使用像 Go 這樣的高級安全語言的理由,可能比用戶程式更為充分,因為在韌體層級的漏洞幾乎不可能被檢測和緩解。

在韌體等儲存受限的環境中使用 Go 的挑戰在於,高階語言特性會導致二進位檔案過大。即使是簡單的日期程式也約有 2 MiB。一個實現單一功能的 Go 二進位檔案大小是實現多個功能的 BusyBox 二進位檔案的兩倍。當前,典型的 BIOS 快閃記憶體(FLASH)大小為 16 MiB。將多個 Go 二進位檔案裝入單一 BIOS 快閃記憶體區塊是不切實際的。Go 編譯器速度非常快,且其速度顯示了只有在使用程式時進行編譯的解決方案。透過這種方式,您可以建立一個幾乎不含二進位檔案(除了 Go 編譯器本身)的根檔案系統。編譯後的程式和套件可儲存到基於 RAM 的檔案系統中。另一個解決方案是將所有程式編譯成一個 BusyBox 風格的程式。或者,程式可以透過網路獲取,但動態編譯 Go 或創建 BusyBox 程式是建議的解決方案。