http://geek.csdn.net/news/detail/191904
2017-04-12 16:36
作者丨陈渝
作者丨陈渝
操作系统是用来提供一个支持各种应用程序运行的基础软件环境。Linux 当前的在各个领域的发展情况如何?到 2016 年底为止,从不同的数据统计来源,我们看到了 Linux 创造在巨型机(占 99.6%)、服务器(占 80%以上)、移动终端(以 Android 为主,占 87.5%)领域的统治地位,貌似 Linux 已经无处不在了。但 Linux 在其他两个大的领域还没有一统天下。在 IoT/Embedded System 等弱设备/硬实时工控领域,由于特定硬件能力和专用应用的差异性很大,Linux 的通用性和多功能在某种程度上成了负担或多余的部分。
当然,目前还没有一个操作系统在这个领域处于统治地位,各种操作系统在这个领域都有一个适合自己的范围,但随着硬件能力的增强和应用对多功能的需求,Linux 的优势会逐渐凸显,目前在机器人,车载电子等领域已经有这样的趋势了。在 PC/桌面端,我们虽然看到了 MintUbuntu、Fedora、SUSE、Deepin(国内发起)等优秀的桌面 Linux,这些桌面操作系统主要基于 X Window、KDE/QT、GNOME/GDK 等技术创建窗口环境,但桌面 Linux 的占有率却一直处于可有可无的地位,其占比仅为 1.63%,在这个领域的统治者是 MS Windows(占 88.7%),在 MS Windows 面前,桌面 Linux 就像面对着一堵墙,无法逾越。为什么上述提到的 Linux 系统都是基于同一个 Linux kernel 但最终的结果却差别显著?这里原因只是在应用层面的技术选择的不同吗?
移动端的爆发,离不开 Internet 的快速发展。虽然 Apple 在桌面端的软件和硬件始终不是微软+Intel 的对手,但 2007 年 iPhone 带来的触控操作的新型人机交互体验(注意,并不在操作系统内核上有新的突破,而主要是便捷的多点触摸式人机交互软硬件设计的突破)在移动端打开了一个新的窗口,紧接着 Google 的 Android 手机采用开放的生态模式(开放源码,建立开放手机联盟 OHA,即 Open Handset Alliance,与软件厂商、硬件厂商、运营商、芯片厂商深入合作,寻求共赢)和类似 iPhone 的交互体验(注意,如果不算 Binder 机制,在操作系统内核上也没有新的突破)逐渐超过 iPhone/iOS,并在移动端形成了垄断地位。到 2017 年 4 月,根据分析公司 Statcounter 的研究发现,Android)首次超过 Windows 成为第一大操作系统。
在桌面领域,微软在 1985 年推出的 Windows 操作系统,加上与 Intel 的 x86 CPU 的完美匹配,形成 Wintel 联盟,几十年来,通过 Killer Application —— MS OFFICE 形成了桌面上的垄断地位,并在推出 Windows NT 后,进一步把触角延伸到服务器领域。受制于 Windows 操作系统已经建立起来的强大桌面生态环境,桌面 Linux 和其他桌面操作系统加在一起,在百分比为个位数的市场占有率上徘徊不前。虽然 iOS 和 Android 在大屏上有比较好的支持,但类似手机操作和使用的平板电脑并没有带来新的突破,目前还没有对桌面端形成威胁。在桌面 Linux 的探索中,除了上述传统的桌面系统研发外总有一些火花在不经意间闪烁。把移动端的霸主 Android 放到桌面端来挑战桌面端的霸主 Windows,是否是一个可以探索的思路?下面将介绍一下这方面的一些情况。
对于一般用户而言,在 PC 上玩 Android 应用,是一个很有意思的想法,包括现在在 PC 上还出现了很多定制 Android 硬件模拟器(如 BlueStacks 等),方便用户在 PC 上玩各种 Android 游戏和移动应用。于是有 Hacker 开始考虑,为什么不能直接在 PC 上运行 Android 呢?在 2009 年,Yi Sun 开始了把 Android 移植到 x86-PC 上的尝试,并基于 Android 1.6 推出了 Android-x86 1.6,并在后来持续跟随 Android 的发展步伐,形成了 Android-x86 社区,目前正在开发基于 Android 7.x 的 Android-x86 7.x,当前主要负责人是黄志伟(同方公司资深工程师),对 Android-x86 系统的定位是 Android 正对 x86-PC 的 BSP 部分,希望有更多的爱好者能够在 Android-x86 的基础上扩展 Android 框架,让 Android 能桌面 PC 上提供方便的使用环境。
2013 年,Tieto 公司提出了在手机上实现类是 PC 多窗口显示的想法,并展示了基于 Android 4.2/4.4 的多窗口支持技术方案,这个扩展原型系统可运行在 Nexus7 手机上和 Android 硬件模拟器上,且 Tieto 公司进一步把相关代码开源,并放到了https://github.com/tieto/multiwindow_for_android。至此,我们知道,通过对 Android Framework 进行扩展,是可以象其他桌面操作系统一样,在大屏幕上,支持以多窗口方式运行多个应用。与 Linux/Windows 桌面操作系统不同的是,在其上运行的是数量远大于前者的移动端 Android 应用,与前者的应用生态完全不同。
来自 Google 的工程师周哲、高恒、陆韵晟在实现财务自由后,并没有停止对技术的探求。他们一直在思考一个问题:很多事情智能手机就能搞定,但你为什么还需要一台笔记本?他们认为在当前的年代,移动应用的开发远远超越了 PC,所以你不需要带各种各样的设备,而是有一个设备把所有问题给解决了。2014 年 1 月,他们创建了技德(Jide)科技公司,并在 2015 年初推出了 Remix OS —— 它是基于 AOSP 开发的深度定制操作系统,主要以 PC/笔记本电脑(基于 ARM/x86)、二合一平板电脑、一体机、智能大屏显示器为载体,实现了一个类似桌面操作系统的多窗口 GUI 界面,能够在一个大屏幕中呈现和方便地运行多个不同的 Android 应用。并且技德公司还推出了运行 Remix OS 的笔记本电脑、平板电脑、迷你(mini)PC 等多种硬件形态。
2014 年 12 月,来自国内浏览器 —— 世界之窗的创始团队以创始人谢震宇为首,在经历了 360 公司收购后,也不安于现状,跳出 360 公司,成立了超卓科技公司,他们也看到了 Android 大屏化的潜在商业前景,从开发应用出发,首先推出了基于 Android 的超卓文件管理器、星尘网络浏览器、超卓文本编辑器等,并在 2015 年 1 月推出了 Phoenix OS Beta 版,并与国内多家硬件厂商合作(联想、TCL、五元素、昂达等),在相关硬件上安装 Phoenix OS。Phoenix OS 与 Remix OS 类似,也是一个基于 Android 的桌面 PC 系统,两者在功能上的差异不大,主要体现在风格的差异性上,其最新版本已经建立在 Andriod 7.1 基础上。超卓科技希望在轻办公属性的 Phoenix OS 系统展现其新的亮点。
2014 年到 2015 年期间,同方公司和一铭软件公司各自通过前期调研,都认为在国内桌面操作系统方面,需要有新的形态出现,看好 Android 应用的丰富类型与庞大数量而形成的强大生态,认为把 Android 进行桌面化改造是实现桌面操作系统的可行方案。在 2015 年下半年,同方公司和一铭软件公司先后找到清华大学计算机系的陈渝副教授,希望开展技术合作,探索 Android 桌面化的技术可行性。经过技术可行性分析,对 Android-x86, Tieto 等开源软件的理解,三方初步认为技术上是可以尝试的。于是在 2015 年底成立了清华大学-同方股份有限公司计算机系统结构联合研究中心,三方一起开始了 OPENTHOS 系统的研发,后续 Android-x86 社区、北京大学、北京工业大学、西安邮电大学、南开大学也参加了相关重要研发工作,还得到了技德、超卓、Intel 工程师的技术帮助。在 OPENTHOS 系统的开发过程中,首先基于 Android-x86 5.1 和 Tieto multiwin 扩展,实现了类似 Remix OS 和 Phoenix OS 的多窗口桌面 Android 系统原型,在 2017 年 3 月发布了 OPENTHOS-1.0-RC1 版本,所有源码开放在https://github.com/openthos/openthos。
为何 Google 不直接让 Android 跑在 PC 上呢?虽然没有得到 Google 的官方确认,但大家知道 Google 在桌面端(以笔记本电脑为主要硬件载体)有一个基于 Web Browser 的 OS – ChromeOS,与 Android OS 具有不同的定位,界面是 Browser,运行的软件主体在云上,这符合 Google 与云为核心的战略发展方向,但 ChromeOS 没有 Android 发展得顺利,没有形成广泛的基于 HTML5 的应用生态。目前二者谁也吃不了谁,不过最近 ChromeOS 已经添加了 Android 支持层,可以让 Android App 直接运行在 ChromeOS 的界面上。且 Android OS 在 6.x 后,也逐步添加了多窗口的支持,只是相对与上述三个多窗口扩展的 Android 系统而言,还略显简单了一些。但这并不表示 Google 没有实力让 Android 直接在 PC 上运行,且让 Android 具有更加完善的多窗口能力。
上述介绍的 Android-x86、Remix OS、Phoenix OS、OPENTHOS 软件系统都是基于 Android 的 AOSP(包括了面向 Android 的 Linux Kernel)来完成的。Android-x86 侧重在 Linux Kernel 的驱动(如 GPU driver 等),HAL 层面的硬件适配软件(如 MESA OpenGL 图形库,键盘/鼠标相关的库),系统启动支持(UEFI/Legacy BIOS 支持),基本不涉及 AOSP 中与硬件无关的 Android Framework 层、dalvik/ART VM 层等。由于 AOSP 4.4 以后有对 x86/x86-64 的很好的官方支持,所以,把 AOSP 移植到 x86-PC 平台的难度也比基于 AOSP-4.4 以前版本要容易一些。而 Remix OS、Phoenix OS、OPNENTHOS 主要的改进集中在 Android Framework 层,通过扩展,实现对键盘/鼠标的有效桌面化支持,多窗口支持等。
从对 AOSP 中 Android Framework 的内部分析来看,Android Framework 架构本身对实现基本的多窗口支持是有预见的,在相关数据结构和代码逻辑上已经有对应的基本支持了。这也使得扩展 Android 多窗口的难度降低,所改动的核心代码在几千行的范围,主要修改的代码量估计在 1~2 万行代码范围内(这里主要基于开源的 OPENTHOS 来分析),相对于 AOSP 的庞大代码量而言,这是一个很小的范围了。所以,从技术上看,当前的 Android-x86, Remix OS、Phoenix OS、OPNENTHOS 应该都属于一个 Android 的有限扩展实现,不算是一个全新的操作系统。且 Google 没有把 Android 扩展到桌面,并不是没有这个技术实力(其实 Android-6.x 已经有平铺式多窗口的探索性的支持,在 Android-7.x 已进一步有堆叠式多窗口的支持),而是由于 Google 同时还有面向未来的 Chrome OS 的存在,阻碍了 Android 桌面化的发展进程。
当前 Android 的移动应用生态由于其使用方式,使用习惯等原因,与桌面传统方式和应用特点有较大差异,并不能代替已有 Windows 的生态环境,但确实存在代替的可能性了。目前能够发起挑战的,应该还是只有 Google 公司。在当前桌面的硬件形态,交互方式,典型应用没有出现大的变化的情况下,如果认为 Remix OS、Phoenix OS、OPENTHOS 等已经具有挑战桌面霸主 Windows 操作系统,这就有些高估了自身。因为一个通用操作系统能够挑战(甚至战胜)另外一个通用操作系统的因素有很多,操作系统自身的技术因素只是其中的一个部分,而抢占先机,应用/开发生态,应用需求,厂商实力,用户认可度等综合因素的比重远大于技术因素。所以,Android-x86、Remix OS、Phoenix OS、OPNENTHOS 如果能用在一些还没有形成垄断的环境,没有成熟的应用生态的领域,也许是其生存的地方。
Android-x86 的特点主要体现在让 Android 直接支持在笔记本电脑/PC 上,且剔除了大部分底层私有协议的软件模块,用开源软件进行了替换。Remix OS、Phoenix OS、OPNENTHOS 的特点主要体现在支持多窗口,适配面向键盘鼠标的人机交互模式,让典型 Android 应用更贴近传统桌面应用的展现形式。另外,OPENTHOS 比较独特的地方包括:
于是陈渝老师和他的学生田博开始了让 Android Studio 运行在 Android 中的设计与实现。大致技术路线是:采用 Container 技术来同时支持 Android 应用和 Linux 应用的 Kernel 运行环境;并通过让 X Windows 系统运行在 Wayland 系统上,修改 Wayland 系统,让 Wayland 系统能够运行在 Android 的 GUI 窗口系统中。经过几个月的努力,不光是 Android Studio,包括 Firefox Browser、WPS Office、Video Player、OpenGL Game Engine 都能跑在 OPENTHOS(Android)上了。另外,西安邮电大学的陈莉君老师和她的学生何兴鹏、陶申荣基于 proot(用户空间实现的 chroot)开源软件,把 Linux 环境下的 CUPS 打印系统对接到 OPENTHOS 中,使得在 Android 环境下可以方便地使用 Linux 的本地/网络打印支持。一铭公司的陈刚工程师对 Android 多窗口的移植和适配做出了主要的贡献,北京大学的荆琦老师和她的学生冯杰等把多窗口支持一升级到了 Android-6.0,北京工业大学的王丹老师和她的学生罗浩等完成了 Android 多窗口的移植改进等。
一方面,如果在桌面领域没有新的应用需求,新的交互方式,新的硬件形态,仅仅把 Android App 运行在桌面上,即使加上键盘鼠标支持和多窗口支持,并不能改变当前的桌面生态环境,无法撼动微软的霸主地位。此外,有人认为,我们可以先跟着 Google,搭顺风车,做一定的改进或定制,然后自己羽翼丰满后,再甩开 Google,自立门户。这种思路在国内外已经有过失败的尝试,比如中移动等支持下的播思通信,国外的 CyanogenMod 等。他们低估了脱离 Gooogle 苦心经营的应用生态和跟进 Android 开发快速迭代等的难度。还有,Android 来源于 Google,基于 Android 开发的系统如果不想按照 Google 的要求和限制做,则会承担法律风险,且如果没有给 Google 看到潜在的好处,则很难得到 Google 的支持。
这里引用魏永明“‘自主’操作系统——为什么及如何”一文的内容:Google 在开发 Android,尤其是 Dalvik 虚拟机以及 Java 类库的过程中,肯定积累了大量专利,而这些专利是凌驾于软件的著作权和许可证之上的。也就是说,如果你基于现有的 Android 派生了一个分支,要想将运行有这个 Android 派生版本的软件放到自己的手机里边销售,Google 马上可以拿出专利大棒来限制你。当前,Google 尚未拿出专利大棒来限制各种派生于 Android 的系统。拿阿里 yunOS 和谷歌最近的争论当中来看,Google 也只是说 yunOS 导致 Android 不兼容。但一旦有厂商真的使用了,Google 马上就会拿出专利大棒,这将毫无疑问。
上述面向桌面的 Andorid 操作系统目前都没有强调自主或自主可控,但不排除以后有其他人或单位会提出基于 Android 改造的操作系统是自主或自主可控的。这里引用魏永明“‘自主’操作系统——为什么及如何”一文的内容:
做一个软件系统,如果是跟在已经取得很大领先优势的已有其他软件系统后面,采用模仿或非根本性创新,是无法形成健康的应用生态,是无法超越已有其他软件系统的。站在通用桌面领域,比如上述系统(包括现在的桌面 Linux)想直接与 MS Windows/Google Android 争夺已有市场,几乎没有成功的可能。Windows 比其他桌面系统早了十几年的技术积累,早已形成了相对封闭的 Windows 桌面应用生态,这一点 Andorid 也类似。所以,上述系统也许在一些有没被 Windows/Android 覆盖的应用需求且还没形成垄断的专用领域,比如车载电子、虚拟云桌面、教育培训、数字医疗、工业控制、移动终端办公、机器人、自然交互、人工智能、特定硬件等,找到匹配上述系统的关键应用,找到这些领域的 Killer Application,形成上述系统存在的价值(刚需),并形成新的生态环境。
另外,Chrome OS/Firefox OS/H5OS/Elastos 等为网络而生的 OS 代表了一个未来面向与人交互的桌面/终端/IoT 操作系统的方向,可以实现网络应用和本地应用无缝衔接,可像“水”一样实现数据和控制的按需流动。但这只是未来的技术方向,还有很多技术挑战并没有解决,比如 Javascript、HTML5 在语言层面缺乏高效性,安全性和可扩展性,WebAssembly 语言已经在尝试解决 JavaScript 的问题;Browser 的界面与内核并没有建立好全面支持本地桌面应用的完善基础架构,且本地应用和网络应用无法有效互联互通互操作,操作系统内核的进程机制对网络应用的组件化和保证安全的随意迁移形成了阻碍,Linux Kernel 越来越复杂和庞大使得其逐步变得僵化,Linux Kernel 和底层系统缺少对上层框架(Android 框架、传统 Linux 应用框架、Browser 界面框架等)的统一和灵活可定制的支持。这些需要感兴趣的人去深入探索和解决。但前面也提到了,操作系统的新理念/先进技术因素只是一个 OS 能够成功的一小部分,还有很多因素需要综合考虑。路很长,需要一步一步脚踏实地的走,没有捷径。