V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yorkie
V2EX  ›  Node.js

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

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

    大家好,很开心在这里宣布 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   ·   实用小工具   ·   1132 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:13 · PVG 02:13 · LAX 10:13 · JFK 13:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.