YodaOS:一个属于 Node.js 社区的操作系统 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yorkie
V2EX    Node.js

YodaOS:一个属于 Node.js 社区的操作系统

  •  
  •   yorkie 2019-02-01 15:46:27 +08:00 5280 次点击
    这是一个创建于 2517 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,很开心在这里宣布 YodaOS 开源了。他将承载 Rokid 4 年以来对于人工智能和语音交互领域的沉淀,并选择 Node.js 作为操作系统的一等开发公民,全部开放给社区。

    yoda-arch.png

    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。

    yoda-nodejs.png center

    为什么是 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

    8 条回复    2019-05-24 19:40:58 +08:00
    blue0125
        1
    blue0125  
       2019-02-01 15:49:33 +08:00
    Javascript OS ?
    phithon
        2
    phithon  
       2019-02-01 15:53:35 +08:00
    为啥不把源码放 github 上
    yorkie
        3
    yorkie  
    OP
       2019-02-01 17:44:40 +08:00 via Android
    @phithon 因为我们内部有部分依赖 gerrit 开发,不过慢慢都会全部放上去的。
    leopku
        4
    leopku  
       2019-02-02 11:00:27 +08:00
    歪个楼:贵 Logo 里用的字体名字是啥,方便透露一下不?
    janhu9527
        5
    janhu9527  
       2019-02-03 20:57:57 +08:00
    可以理解为在 Linux 内核上开发了一套轻量级 Javascript 运行环境?
    yorkie
        6
    yorkie  
    OP
       2019-02-03 22:08:10 +08:00 via Android
    @janhu9527 不完全对,可以这么理解,是在 Linux 基础上先实现了 Node.js 部分核心接口,并以此为基础,实现了一个语音交互系统,并提供 JS 的应用开发接口。
    xymn
        7
    xymn  
       2019-02-14 12:20:32 +08:00
    @yorkie 和 AliOS 什么区别,alios 也是类似 android 的架构,也是使用的 node.js
    yorkie
        8
    yorkie  
    OP
       2019-05-24 19:40:58 +08:00
    @xymn 你说的是 YunOS 吧,YunOS 还是面向手机市场的,配置相对来说比较高端一些,Node.js 使用的是官方版本,YodaOS 的配置一般是 128MB 内存左右,然后使用的是 ShadowNode 这款更轻量级的引擎+运行时哦。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3864 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 00:07 PVG 08:07 LAX 16:07 JFK 19:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86