開發四年只會寫業務代碼,分布式高并發都不會還做程序員? >>>??
大家好,很開心在這里宣布 YodaOS開源了。他將承載 Rokid 4年以來對于人工智能和語音交互領域的沉淀,并選擇 Node.js 作為操作系統的一等開發公民,全部開放給社區。
YodaOS(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 上關注我們,項目地址:https://github.com/yodaos-project/yodaos。