专栏首页LINUX阅码场魏永明:五谈操作系统:为物联网设计

魏永明:五谈操作系统:为物联网设计

前情提要

对《四谈操作系统》一文评论的回复

在《四谈操作系统之国产七宗罪》一文中,我批判了国产桌面操作系统圈子的一些问题。此文除了在“开源操作系统百家谈”公众号上发表外,在其他一些公众号上也有转载。我看了一下,有一些负面的评论,总结起来大致有如下三种:

  1. 键盘侠喷子类型,光看标题就开喷的。大意就是中国一定要有自己的操作系统,不管多难也要有。对此类言论,我没兴趣做更多的回应,建议他们仔细看完我的文章再来评论。
  2. 怀疑我没有资格和水平来讲操作系统的。我承认,自己的资格和水平未必够,毕竟我没做过操作系统。不过,操作系统是给开发者或者普通用户用的,我天天用 Windows、macOS 和Ubuntu Linux,虽然没用过国产的桌面操作系统,但还是见过的,批评几句的资格还是足够的。
  3. 否认我对国产桌面操作系统圈子的批判。这个可以讨论,我也做了回复。我主要批判的是国产桌面操作系统二十年来没有创新、裹足不前这个事实,并指出了存在的问题。我是无意去做桌面操作系统的,我指出问题是帮国产桌面操作系统这个圈子反思。有所帮助最好,如果他们不认为存在这些问题,那我也没办法。

新操作系统的机会

在前文中提到,新的操作系统,往往在计算机应用到新的市场领域时出现。前文亦指出,新的操作系统要想在竞争中胜出,就必须先他人一步去为新的计算机应用领域做准备。

近几年,计算机技术以及通讯技术正在快速应用到各个领域。看看这两年层出不穷的新名词或者新缩写就知道了:AI、VR、大数据、物联网、工业互联网、智能机器人、边缘计算、区块链……

笔者认为物联网就是一个足够大的市场,或许会成为下一个比肩个人电脑或者智能手机的大市场,巨头们已经进入并布局这个市场领域。国内也有几个操作系统团队在物联网领域耕耘,如 RT-Thread、LiteOS。

然而物联网市场具有碎片化特征。物联网的产品类型庞杂,应用范围太广,几乎无法标准化描述。比如,有的物联网设备只有一个蓝牙芯片,而有的配有 WiFi、NB-IoT 甚至 4G;有的物联网设备强调低成本,内存有限,只能运行简单的 RTOS,而有的带有可触摸显示屏,运行的是复杂的Linux 或者 Android 系统。

在众多的物联网产品类型中,我们发现了一个空白:智能物联网设备。简单来讲,这类设备的硬件配置相比简单的功能性物联网设备要高很多,但又比智能手机低很多。关键点是,迄今为止没有一个好的操作系统支持这类设备:用 Android 吧,系统定制、裁减等工作就很复杂,直接用 Linux吧,开发起来很原始,对开发人员的要求太高。

另一方面,当前的物联网设计,基本仍然沿用传统中心化的网络体系。这带来了一个严重的安全隐患:任何一个非法闯入云端服务器的黑客,都可以轻松遥控所有连到云端的智能物联网设备,包括您家里的智能门锁以及监控摄像头。区块链技术的出现可能改变这一现状。区块链的去中心化设计,分布式存储、不可篡改、智能合约等等特性,为物联网的安全性设计提供了另外一个思路。

在上述需求的驱使下,结合最新的操作系统软件技术、物联网技术以及区块链技术,我们针对智能物联网设备设计了一款全新的操作系统:HybridOS。其中的关键点在于:HybridOS 试图为开发者提供更多可能,而不仅仅是一个针对单机运行环境的传统概念上的操作系统。

笔者认为,面对物联网,我们不能像以前那样,只针对类似个人电脑、智能手机这样的单机运行环境去设计操作系统,而需要从更高的层面去提炼物联网应用的需求,将开发者作为第一用户,从解决他们的需求痛点为出发点去重新设计操作系统。

HybridOS 的设计思路

术语

在阐述 HybridOS 的设计思路之前,我们先明确如下术语的含义:

  • 设备端(device),特指物联网设备。
  • 智能物联网设备(smart IoT device),指具有多重连接能力,可在 WLAN 环境以及互联网环境下和人、其他设备或者计算机系统(如云端)交互的物联网设备。有时,我们也将这类设备称为“物联网网关”设备。
  • 固件(firmware)。特指运行于设备端的软件,包括单机操作系统以及应用或服务在内。
  • 客户端(client)。特指智能手机或者桌面电脑以及运行于其上的 App。
  • 云端(cloud)。指运行各类服务器软件的后台虚拟服务器或者云端服务。

为什么需要一款新的操作系统?

当我们要开发一款智能物联网设备时,对运行在其上的操作系统,我们的选择余地非常少。要么使用功能单一,开发难度很高的实时操作系统,要么使用像 Android 这样庞大和复杂的操作系统并经过大量的定制开发,或者,如果你的团队有 Linux 系统高手,也可以选择基于 Linux 这样的开源操作系统内核来开发。但无论作何选择,你都要花费大量的时间在基础系统的搭建和开发上。当产品的上市时间紧迫时,花费在真正业务上的开发时间就要被压缩,要么只能让自己的产品延期上市。

此外,物联网应用天生连接云端。不管物联网设备是复杂的还是简单的,是直接连入云端还是通过物联网网关接入云端,都需要最终将物联网设备的数据传输到云端,有些物联网设备还需要直接提供某些服务。比如家用路由器,一般都需要提供一个网页或者一个 App 来完成基本的设置,而这需要在物联网设备中运行一个 Web 服务器软件。

也就是说,物联网设备大部分情况下看起来更像是一个服务器,而不是展现数据和内容的终端。因此,物联网操作系统的设计,必须从一开始就面向联网环境,必须从一开始就有能力和客户端、云端交互,甚至扮演服务器的角色。客户端主要用于人机交互,而物联网设备主要用于物物通讯,也需要兼顾人机交互,所以物联网操作系统在设计上应该和针对客户端的操作系统有很大的不同。

另外,由于人工智能的成熟和普及,大量物联网终端开始集成各类人工智能服务,比如语音识别以及人脸识别等。大家都知道,人工智能服务一般运行在云端,而智能物联网设备就要作为人工智能服务的前端来运行,比如采集声音、图像或者视频等,然后在设备上做必要处理,最后发送给云端进行后续处理。这种处理在传统的操作系统中并没有标准化,而在新的操作系统当中,则会成为标准的功能和组件。还有一个趋势就是边缘计算,某些人工智能服务会最终运行在物联网设备中,这样的话,未来物联网操作系统还需要兼顾本地的人工智能计算。

这样的需求,给物联网产品的开发团队提出了更高的要求。拿典型的智能门锁为例,需要有一个云端服务器、一个可以运行在 iOS 以及 Android 上的 App,一个运行在智能门锁设备里边的固件,等等。因此,目前一个物联网产品的开发,需要配备如下不同“工种”的软件工程师:

  • 后台(云端)软件开发工程师:需要使用 Java、PHP 或者 Python 语言进行开发,可能需要调用 AWS、阿里云或者腾讯云的各种服务以及人工智能服务。
  • 前端开发工程师:需要使用 JavaScript、CSS、HTML 等语言进行开发。
  • App 开发工程师:需要使用 Swift 语言为 iOS 开发 App;需要使用 Java 语言为 Android开发 App。如果 App 还要运行在桌面操作系统,还需要 Windows/macOS 的开发工程师。
  • 固件开发工程师:需要使用 C/C++ 进行开发,也就是传统的嵌入式软件开发工程师。

粗略统计,就有五个不同的软件工程师“工种”。

这通常是个噩梦,光是组建这样一个开发团队,就要耗费大量的资金和管理成本。这还没有考虑到物联网安全实现所需要的额外专家或工程师。

笔者在以前的文章(见《三谈操作系统:方法论》)中多次强调,操作系统这类基础软件,必须首先面向开发者,开发者是这类基础软件的首要用户。因此,如果一个物联网操作系统,不能在降低开发成本,提高开放效率方面有所建树,那肯定会是失败的产品。

而目前,业界缺乏一款真正面向智能物联网设备的操作系统,它可以让你降低物联网应用的开发成本,缩小研发团队规模,让你可以集中精力于业务应用的开发上,而不需要花费大量的时间来构建基本系统、运行环境和基础设施,不需要你组建具有五个甚至更多工种的复杂开发团队。

HybridOS 的目标

在这种情况下,HybridOS 应运而生。简单而言,HybridOS 是一个全新的、开源的、基于 Linux的非 Android 操作系统,它专为物联网应用设计。HybridOS 不仅仅运行在智能物联网设备中,它同时还提供了针对云端以及客户端的编程接口,为开发者提供了从设备到云再到客户端的完整软件栈和协议栈。

另外,HybridOS 将基于区块链技术为物与物之间的通讯提供一个全新的实现方法。在 HybridOS定义的实现方法下,所有的数据都带有不可篡改的数字签名以及时间戳,而所有数据的传输和存储都可加密。如此,通讯链路将只是通道,云端存储只是容器,就算黑客侵入中心化的服务器,也无法实现对物联网设备的控制。

为什么我们强调非 Android?

这是因为很多智能物联网设备的开发者往往会首先想到用 Android,或者 Android Things 这样的简化版本。

HybridOS 的开发团队有丰富的 Android 开发经验。我们对Android 的了解越深入,越发现它仅针对智能手机而设计,缺乏许多物联网设备所需要的能力。当我们希望在设备上灵活管理包括4G/LTE、WiFi、Bluetooth 在内的各种联网能力,或者希望设备可以通过 HTTP 协议、MQTT协议甚至流媒体协议提供各种联网服务时,我们发现 Android 很难做到:Android 为客户端应用的运行提供了良好的框架、支撑平台和对应的 API,但缺乏针对服务的设计,而物联网设备,绝大部分情况下的运行状态更像是一台服务器。

另外有一个显著的市场变化值得一提:很多 SoC 厂商,如国内的全志科技、瑞芯微电子、君正,国外的飞思卡尔、德州仪器、三星等,已经从支持 Android 转而支持 Linux 为主。

HybridOS 和其他物联网操作系统的不同

HybridOS和其他针对物联网的操作系统有如下不同点:

  1. HybridOS 的设备端系统基于 Linux 内核,充分利用 Linux 内核生态,降低各种驱动程序的开发难度以及各种协议栈的支持难度,从而降低开发成本。
  2. 和基于 RTOS(实时操作系统)技术发展而来的物联网操作系统(如RT-Thread、LiteOS)相比,HybridOS 更倾向于运行在具有更高硬件配置的智能物联网设备上,而不是小型的单功能物联网设备上,后者的硬件配置往往有限。
  3. HybridOS 不仅仅运行在智能物联网设备中,它同时还提供了针对云端以及客户端的标准框架和编程接口,为开发者提供了从设备到云再到客户端的完整软件栈和协议栈。在未来,HybridOS 还计划统一客户端和设备端上的 App 开发接口。
  4. HybridOS 将基于区块链技术为物与物之间的通讯提供一个全新的实现方法。在 HybridOS定义的实现方法下,所有的数据都带有不可篡改的数字签名以及时间戳,而所有数据的传输和存储都可加密。这将从根本上提高物联网的安全性。

也因为以上因素,我们在设计 HybridOS 操作系统的时候,选择了使用 Linux 内核,用基于 Linux内核的软件栈来实现我们的设计目标。我们没有选择 RTOS,是出于生态建设、开发难易度、商业模式等各种方面的综合考量。相关观点,将在今后的文章中阐述。

HybridOS 的技术特点

HybridOS 超越了传统操作系统的概念,它提供的 SDK和 API,为兼顾设备端、移动客户端、桌面客户端以及云端的开发需求而设计。HybridOS 的技术特点可归纳如下。

设备端:

  1. Linux 内核,用以支持各种物联网物理层的协议以及外设(如 BLE、WiFi、4G/LTE、NBIoT等)。
  2. 基于 GNU 以及常见开源软件的 C/C++ 运行时支撑环境。
  3. 基于 MiniGUI 3.2 的设备端 App 运行环境。
  4. 基于 Python 2.7 的各类服务的运行时支撑环境,如MQTT、WebSocket、HTTP、流媒体服务。
  5. 提供基于 hBUS 的标准设备和系统服务/任务管理接口,如联网设备管理、GPS/重力加速计等传感器管理、USB 接口管理等。
  6. 基于区块链的身份认证机制,以及数据传输签名及加密机制。
  7. 在线固件升级。

为客户端提供基于 HTML5 的 App 开发 SDK:

  1. WLAN 环境下的设备发现接口。
  2. MQTT 连接及消息传递和处理。
  3. JavaScript 本地接口封装,可用于身份验证,访问本地文件系统等。

云端:

  1. MQTT 消息传输。
  2. 固件分发服务。
  3. 基于区块链技术的身份认证服务(试验)。
  4. 通过 MQTT 协议接入标准化云服务(试验)。
  5. 第三方云服务接入(未来)。
  6. MQTT 消息归档及数据统计及分析服务(未来)。

下图给出了 HybridOS 的运行环境。

设备和云端、移动客户端的数据交互,主要通过 MQTT 协议进行,辅之以 HTTP 协议以及WebSocket 等协议。

在设备端,HybridOS 提供了两类不同的 API。一类 API 针对带有交互外设(屏幕和触摸屏)的应用准备,当前使用 C/C++ 编程语言,未来会演进为使用JavaScript 编程语言;另外一类 API 针对各种联网服务,使用 Python 编程语言,用以提供对 HTTP、MQTT、WebSocket、流媒体服务等协议的支持。

不像 Android 或者 iOS 这类操作系统,它们仅针对应用提供单一的编程语言以及对应的SDK 和API,HybridOS 则为开发者同时提供了针对应用和服务的两种不同的编程语言和 API。我们的设计原则是,用最适合的编程语言及其 API 来实现物联网操作系统中扮演不同角色的软件栈。

在设备端,应用和服务之间通过一个数据总线,我们称之为hBUS 进行数据交换。这种设计让不同编程语言开发的模块之间可以互相对话,同时实现了业务模块之间的解耦。

下图给出了 HybridOS 在设备端的架构图和软件栈。

基于上面的设计原则,当您需要在移动客户端、桌面客户端上访问设备时,您可以直接使用HTTP、WebSocket、MQTT 等成熟的技术和设备交换数据,而客户端应用的开发则可以完全使用HTML5 技术进行,这样,您的开发速度将大大提高。

下图给出了 HybridOS 在客户端上的软件架构图。

这也解释了HybridOS 这一名称的由来,就像混合动力汽车一样,既不乏动力,还节约能源。

HybridOS 带给开发者的好处

HybridOS 带给开发者的好处是明显的。

在设备端使用数据总线架构,提高软件可扩展性及健壮性。在设备端,开发者可通过 hBUS 和其他系统组件之间进行交互。这是 HybridOS 提供的强制性软件架构,通过这样的架构设计,可降低不同软件模块之间的耦合度,提高整个软件系统的健壮性。

在设备端的 App 开发中,利用 MiniGUI 3.2 的新特性,HybridOS 提供了一个完整的物联网设备App 开发框架,支持类似 Android 的 Activity、Intent 概念,提供Activity 之间的切换动画,并提供了和 hBUS 的整合能力。

我朋友圈里的梨叔曾经说过一句话:“程序员特别喜欢debug这个词,它给人一种幻觉,好像程序的大部分都是对的,只有细枝末节的小问题;这和事实不符,大部分程序从头到尾都是错的,只有细枝末节写对了几句。”笔者非常赞同这句话。这句话大概说的就是大部分程序员设计的程序,在架构和技术路线的选择在最初就是错误的,这导致项目的质量以及可扩展性、可维护性等方面存在大量的问题。而 HybridOS 通过软件架构上的优化设计,可以让开发者专注于具体应用和业务逻辑代码的实现上。

立即可用的 MQTT 服务以及客户端 SDK,可以降低您的开发成本,缩短产品开发周期。如前所述,HybridOS 上的应用或者服务,通过 MQTT 协议和其他设备或计算机系统交互。在未来,我们将基于 MQTT 服务制定第三方云服务的接入标准,这将大大降低云端服务的接入开发工作量。另外,您可以直接使用 HybridOS 提供的标准化的 MQTT 协议支持,如设备或者用户的身份验证,以及未来的第三方云服务、第三方 AI 服务等。

未来,当 HybridOS 设备端的 App以及客户端的 App 开发全部采用统一的、基于 JavaScript 的API 之后,您的开发团队只要有人会 Python、JavaScript 等脚本语言编程就可以了,原来需要五个工种的团队,以后只要两个工种就好了。

最后,使用 HybridOS 提供的基于区块链技术的设备身份验证以及加密机制,开发者可以实现更为安全的物联网通讯。

HybridOS 的发展思路

和笔者发展 MiniGUI 一样,HybridOS 并不是一个一开始就将发展方式和思路想得很清楚的项目。

笔者在推出 MiniGUI 之前,在 DOS 上写过一个小的 GUI 系统,后来在实验室的项目中要使用Linux,然后就写了一个 Linux 的版本。项目差不多做完的时候,感觉 MiniGUI 这个软件有价值,别人也可以用,所以就以自由(开源)软件的方式推出了 MiniGUI。

HybridOS 也类似,笔者从 2015 年开始就设想有这样一个系统,并在一款真实的产品中尝试实现。产品开发结束了,笔者感觉 HybridOS 的设计思想有价值,所以希望通过开源得到进一步的发展。笔者目前还没想清楚它的发展思路,刚开始,其设计和实现也会比较原始,前述的演进目标并不见得非常合理。但是总得有人起个头,所以,先做起来再说。

值得一提的是,HybridOS 这个名字,2009年时就已经被飞漫软件注册成商标了。那时我们还不懂操作系统,随便糊弄了几天就扔那儿了。当时只是朴素地认为,搞了这么长时间的 MiniGUI,飞漫的下一个产品应该就是操作系统。但那时候看不清楚,也不知道真实的产品开发需求到底是怎么样的。

经过几年的各种折腾,笔者的见识有了一些的长进,从移动端 App 的开发以及真实的硬件产品开发中获得了足够的教训和养分,而物联网、区块链等技术的兴起,又给我们一个机会重新审视操作系统这类基础软件。

但这次发展 HybridOS,我希望能够联合更多认同这个思路的企业一起努力,用市场化的方法共同打造这个操作系统,比如芯片厂商、云服务厂商等。如果真能按照本文的思路一步步迭代并实现这个操作系统,将对中国的基础软件,甚至整个全球的基础软件产业带来深远的影响。届时,大家期望的国产自主可控,将是自然而然达到的目标。

但笔者非常不愿意使用“国产、自主、可控”这几个前缀来修饰 HybridOS。我曾讽刺过:“‘国产、开源、自主、可控’这四个词加起来,就是一剂春药”。

为说明我们发起 HybridOS 的初衷,笔者声明如下:

HybridOS 的着眼点不是为了解决政府的自主可控需求,而是为了降低物联网的开发成本,我们的首要服务目标是各类开发者而不是政府。从这点上讲,我希望 HybridOS是全球化的。

至于往后怎么发展,首先看 HybridOS 是否可以获得其他开发者的认同。为此,我们将发起一个众筹项目,即 HybridOS 的开发原型机 HybridRun。

HybridRun 开发原型机

简单而言,HybridRun 是一款全连接的智能物联网设备原型机。它为物物互联的场景提供了各种连接方式,包括 2.4G/5G 频段的高速Wi-Fi、蓝牙、4G/LTE、USB 等。

HybridRun 脱胎于一款真实的产品——Joopic CBPlus。在设计这款产品时,我们有意地采纳了HybridOS 的设计思路来实现从固件到云端再到客户端的整个软件体系。现在,Joopic CBPlus 产品已经量产。我们希望将我们在 CBPlus 产品开发中的软硬件设计思想和成果与业界共享,所以有了HybridOS 和 HybridRun。

我们计划在八月上旬启动 HybridRun 原型机的众筹,以便测试 HybridOS 和 HybridRun 的市场接受度。如果您有意支持我们,请关注相关公众号以便可以在第一时间获得相关信息。

本文分享自微信公众号 - Linux阅码场(LinuxDev)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • page结构体,何处安放你的灵魂?

    随着硬件能力的提升,系统内存容量变得越来越大。尤其是在服务器上,过T级别的内存容量也已经不罕见了。

    Linux阅码场
  • 一文带你彻底理解Linux的各种终端类型及概念

    每天使用Linux每天都要接触到Bash,使用Bash时似乎永远都让人摸不着头脑的概念就是终端,坐在这台运行着Linux的机器的显示器前面,这个显示器就是终端...

    Linux阅码场
  • Linux内核第一宏

    list_entry()有着内核第一宏的美称,它被设计用来通过结构体成员的指针来返回结构体的指针。现在就让我们通过一步步的分析,来揭开它的神秘面纱,感受内核第一...

    Linux阅码场
  • 最简洁的设置ssh互免密登录

    直接回车,会在~/.ssh/目录下生成私钥id_rsa和公钥 id_rsa.pub

    用户1409099
  • 跟我学Spring Cloud(Finchley版)-01-开篇

    最近挺多童鞋在公众号(itmuch_com)上催更Spring Cloud系列教程,故有此系列。以下是几点说明/规划/答疑:

    用户1516716
  • “过时”的SpringMVC到底在用什么?深入分析DispatchServlet源码

    本文先简述下目前SpringMVC的使用情况,然后通过Demo的简单让大家有一个初步的使用印象,然后带着印象去看其中执行的分发源码。

    Zack说码
  • 海量服务器运营平台的进化之路

    "鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网...

    鹅厂网事
  • 面试必备:Zack 大佬带您深入Spring MVC DispatchServlet 源码分析

    之前已经分析过了Spring的IOC(《零基础带你看Spring源码——IOC控制反转》)与AOP(《从源码入手,一文带你读懂Spring AOP面向切面编程》...

    搜云库技术团队
  • 爱奇艺远程一面

    牛客网
  • 快速学习-Mybatis 注解开发

    这几年来注解开发越来越流行,Mybatis 也可以使用注解开发方式,这样我们就可以减少编写 Mapper 映射文件了。本次我们先围绕一些基本的 CRUD 来学习...

    cwl_java

扫码关注云+社区

领取腾讯云代金券