大家好,很開心在這裡宣佈 YodaOS 開源了。他將承載 Rokid 4年以來對於人工智慧和語音互動領域的沉澱,並選擇 Node.js 作為作業系統的一等開發公民,全部開放給社群。
YodaOS 的架構跟 Android 類似,從下至上,由 Linux Kernel、系統服務和應用框架組成。不過 YodaOS 有以下不同:開發者可以直接使用 JavaScript / Node.js 來開發本地應用(技能); 封裝了 AI 抽象層,可以通過 JavaScript 直接呼叫到諸如語音啟用、語音識別、人臉識別等介面;
除了支援預設的 Node.js API 外,YodaOS 還提供:
內建的語音啟用和語音識別 API,真正做到了開箱即用(開發)的語音互動系統; 對音量控制、電源管理、藍芽、多媒體播放、LED 燈效和 OTA 等都進行了介面封裝; 對物聯網開發者來說,內建了標準化的 WebSocket、MQTT 等物聯網協議的客戶端實現;
YodaOS 也支援 npm 倉庫,開發者可以根據自己的需要在 OS 中執行所需的模組,不過並不推薦使用一些實現起來很重的模組,因為 YodaOS 需要支援中低端裝置,所以有時候也需要考慮到效能方面的因素。
如果遇到一些 npm 倉庫確實實現很重,但又不得不用的時候,在 YodaOS 上,我們一般的做法是使用 N-API 橋接 C/C++ 模組,然後保證 JavaScript API 與對應的 npm 包一致。
同時藉助於 N-API,開發者可以將任何 Linux 的庫移植到 YodaOS 上,並通過 N-API 以 JavaScript API 方式使用,可以這麼理解,N-API 之於 YodaOS,就像 JNI 之於 Android。
為什麼是 Node.js
前面提到了 YodaOS 選擇擁抱 Node.js 和 Node.js 開發者,最大的一個原因就是在過去將近10年的時間,從最開始 Ryan Dahl 定義的,一個輕量級的 Web 伺服器框架,到如今的 Express、Loopback、Koajs、Midway 和 Egg Framework,在 Web 伺服器框架領域已經漸漸成熟。
依託於 Node.js 提供的執行時,從 Grunt、Gulp 到現在的 Webpack 和 Parcel,在構建工具領域,社群也不斷湧現出非常卓越的開源專案來。Node.js 正在發揮每位開發者的想象力,社群中幾乎有你需要的一切,甚至於在社群中,有一句流傳已久的名言:
“any application that can be written in JavaScript, will eventually be written in JavaScript”
——Atwood’s Law
意思就是說,只要能被 JavaScript 來編寫的程式,終將使用 JavaScript 實現。那為什麼不用 JavaScript 來寫一個作業系統呢?
當然上面的只是一個有趣的引子,Rokid 真正想做的是讓 Node.js 開發者能夠以更低的門檻進入語音互動和嵌入式領域。
Node.js 與 ShadowNode
YodaOS 雖然跟 Android 的架構相似,不過解決的問題,及目標裝置並不盡然相同,對於現在越來越便宜的手機,Android 開發者幾乎不用擔心繫統效能的問題。然而對於像智慧音響、IoT 終端以及其他嵌入式裝置,通常硬體資源都是非常緊缺的,在這種情況下,OS 就要解決開發者“既要節省資源、又要便於開發”的問題。
於是針對中低端硬體產品(記憶體介於 128MB 到 256MB 之間),我們創造了 ShadowNode 來解決這個問題,它是 Rokid 基於三星 IoT.js 二次開發的一款 Node.js 執行時,它具備更快的啟動速度和更低的資源佔用,相比 IoT.js,它:
提供了更好的錯誤棧資訊和效能除錯工具; 支援了基於 N-API 的跨執行時模組執行; 針對特定晶片的效能優化,比如 AmLogic A113 和 Kamino18;
藉助於 N-API 的 ABI 相容特性,我們實現了 OS 上層框架和應用的執行時相容性。比如開發者完全可以選擇在更高階的裝置上執行 YodaOS,此時記憶體和 Flash 不再是瓶頸,開發者只需要更換系統中的 Node.js 執行時,即可獲得更快的執行速度,不需要修改一行上層程式碼。
最後
我們希望藉助 YodaOS,為 Node.js 社群補全終端開發這一版圖,讓我們用這門親切的語言,再次回到我們熟悉的“端”的開發。
如果想一起加入 YodaOS,可以在 GitHub 上關注我們,專案地址:github.com/yodaos-proj…
關於 YodaOS:
YodaOS 是 Rokid 公司研發的首個全棧開源 AI 作業系統,由 Linux 核心、硬體抽象層、AI 抽象層和 JavaScript 框架組成,專為下一代人機互動裝置開發,可用於智慧音響、智慧家居、智慧穿戴和車載等多種裝置和場景。