大家好候醒,很開心在這里宣布 YodaOS 開源了。他將承載 Rokid 4年以來對(duì)于人工智能和語音交互領(lǐng)域的沉淀一睁,并選擇 Node.js 作為操作系統(tǒng)的一等開發(fā)公民冈闭,全部開放給社區(qū)。
YodaOS 的架構(gòu)跟 Android 類似册招,從下至上岔激,由 Linux Kernel、系統(tǒng)服務(wù)和應(yīng)用框架組成是掰。不過 YodaOS 有以下不同:
開發(fā)者可以直接使用 JavaScript / Node.js 來開發(fā)本地應(yīng)用(技能)虑鼎;
封裝了 AI 抽象層,可以通過 JavaScript 直接調(diào)用到諸如語音激活键痛、語音識(shí)別炫彩、人臉識(shí)別等接口;
除了支持默認(rèn)的 Node.js API 外絮短,YodaOS 還提供:
內(nèi)置的語音激活和語音識(shí)別 API江兢,真正做到了開箱即用(開發(fā))的語音交互系統(tǒng);
對(duì)音量控制丁频、電源管理杉允、藍(lán)牙、多媒體播放席里、LED 燈效和 OTA 等都進(jìn)行了接口封裝叔磷;
對(duì)物聯(lián)網(wǎng)開發(fā)者來說,內(nèi)置了標(biāo)準(zhǔn)化的 WebSocket奖磁、MQTT 等物聯(lián)網(wǎng)協(xié)議的客戶端實(shí)現(xiàn)改基;
YodaOS 也支持 npm 倉庫,開發(fā)者可以根據(jù)自己的需要在 OS 中運(yùn)行所需的模塊署穗,不過并不推薦使用一些實(shí)現(xiàn)起來很重的模塊寥裂,因?yàn)?YodaOS 需要支持中低端設(shè)備,所以有時(shí)候也需要考慮到性能方面的因素案疲。
如果遇到一些 npm 倉庫確實(shí)實(shí)現(xiàn)很重封恰,但又不得不用的時(shí)候,在 YodaOS 上褐啡,我們一般的做法是使用 N-API 橋接 C/C++ 模塊诺舔,然后保證 JavaScript API 與對(duì)應(yīng)的 npm 包一致。
同時(shí)借助于 N-API,開發(fā)者可以將任何 Linux 的庫移植到 YodaOS 上低飒,并通過 N-API 以 JavaScript API 方式使用许昨,可以這么理解,N-API 之于 YodaOS褥赊,就像 JNI 之于 Android糕档。
為什么是 Node.js
前面提到了 YodaOS 選擇擁抱 Node.js 和 Node.js 開發(fā)者,最大的一個(gè)原因就是在過去將近10年的時(shí)間拌喉,從最開始 Ryan Dahl 定義的速那,一個(gè)輕量級(jí)的 Web 服務(wù)器框架,到如今的 Express尿背、Loopback端仰、Koajs、Midway 和 Egg Framework田藐,在 Web 服務(wù)器框架領(lǐng)域已經(jīng)漸漸成熟荔烧。
依托于 Node.js 提供的運(yùn)行時(shí),從 Grunt汽久、Gulp 到現(xiàn)在的 Webpack 和 Parcel鹤竭,在構(gòu)建工具領(lǐng)域,社區(qū)也不斷涌現(xiàn)出非常卓越的開源項(xiàng)目來回窘。Node.js 正在發(fā)揮每位開發(fā)者的想象力诺擅,社區(qū)中幾乎有你需要的一切,甚至于在社區(qū)中啡直,有一句流傳已久的名言:
“any application that?can?be written in JavaScript,?will eventually be written in JavaScript”
——Atwood’s Law
意思就是說,只要能被 JavaScript 來編寫的程序苍碟,終將使用 JavaScript 實(shí)現(xiàn)酒觅。那為什么不用 JavaScript 來寫一個(gè)操作系統(tǒng)呢?
當(dāng)然上面的只是一個(gè)有趣的引子微峰,Rokid 真正想做的是讓 Node.js 開發(fā)者能夠以更低的門檻進(jìn)入語音交互和嵌入式領(lǐng)域舷丹。
Node.js 與 ShadowNode
YodaOS 雖然跟 Android 的架構(gòu)相似,不過解決的問題蜓肆,及目標(biāo)設(shè)備并不盡然相同颜凯,對(duì)于現(xiàn)在越來越便宜的手機(jī),Android 開發(fā)者幾乎不用擔(dān)心系統(tǒng)性能的問題仗扬。然而對(duì)于像智能音響症概、IoT 終端以及其他嵌入式設(shè)備,通常硬件資源都是非常緊缺的早芭,在這種情況下彼城,OS 就要解決開發(fā)者“既要節(jié)省資源、又要便于開發(fā)”的問題。
于是針對(duì)中低端硬件產(chǎn)品(內(nèi)存介于 128MB 到 256MB 之間)募壕,我們創(chuàng)造了 ShadowNode 來解決這個(gè)問題调炬,它是 Rokid 基于三星 IoT.js 二次開發(fā)的一款 Node.js 運(yùn)行時(shí),它具備更快的啟動(dòng)速度和更低的資源占用舱馅,相比 IoT.js缰泡,它:
提供了更好的錯(cuò)誤棧信息和性能調(diào)試工具;
支持了基于 N-API 的跨運(yùn)行時(shí)模塊執(zhí)行代嗤;
針對(duì)特定芯片的性能優(yōu)化棘钞,比如 AmLogic A113 和 Kamino18;
借助于 N-API 的 ABI 兼容特性资溃,我們實(shí)現(xiàn)了 OS 上層框架和應(yīng)用的運(yùn)行時(shí)兼容性武翎。比如開發(fā)者完全可以選擇在更高級(jí)的設(shè)備上運(yùn)行 YodaOS,此時(shí)內(nèi)存和 Flash 不再是瓶頸溶锭,開發(fā)者只需要更換系統(tǒng)中的 Node.js 運(yùn)行時(shí)宝恶,即可獲得更快的執(zhí)行速度,不需要修改一行上層代碼趴捅。
最后
我們希望借助 YodaOS垫毙,為 Node.js 社區(qū)補(bǔ)全終端開發(fā)這一版圖,讓我們用這門親切的語言拱绑,再次回到我們熟悉的“端”的開發(fā)综芥。
如果想一起加入 YodaOS,可以在 GitHub 上關(guān)注我們猎拨,項(xiàng)目地址:https://github.com/yodaos-project/yodaos膀藐。
關(guān)于 YodaOS:
YodaOS 是 Rokid 公司研發(fā)的首個(gè)全棧開源 AI 操作系統(tǒng),由 Linux 內(nèi)核红省、硬件抽象層额各、AI 抽象層和 JavaScript 框架組成,專為下一代人機(jī)交互設(shè)備開發(fā)吧恃,可用于智能音箱虾啦、智能家居、智能穿戴和車載等多種設(shè)備和場景痕寓。