魏永明: 三谈操作系统
Posted Linux阅码场
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了魏永明: 三谈操作系统相关的知识,希望对你有一定的参考价值。
昨天(2018年4月25日)的最新消息,美国司法部开始调查华为……
我不懂芯片的设计和制造,但作为软件行业从业者,就中国高科技产品里边的魂(操作系统),我还是可以继续说道说道的。所以有了这第三篇文章:《三谈操作系统》。
写这篇文章之前,我把六年前、三年前的第一、二篇文章又拿出来读了读。有些说法已经过时,但核心观点还是正确的。这里先总结一下,以便让大家不必再费心费力读这两篇文章,亦可对我的想法有个了解。
前情提要
在第一篇文章里边,我重新定义了“自主”的含义。提出“自主”是“有效知识产权保护下的自己主导”而不是“自有知识产权”。后来很多人都提“自主可控”,最初的说法大概来自这篇文章。
在第一篇文章中,我批判了什么样的操作系统不是自主的操作系统,指出自主操作系统必须建立自己的生态系统,并且详细从技术层面阐述了如何开发一个自主的操作系统。其要点是:用一个特别的编程语言发展自己的 API(应用程序编程接口)。
六年过去了,很多人仍然不能理解我第一篇文章中提到的思路,仍然在走一些错误的路线。
三年前,在撰写第二篇文章之时,国内顶尖的高手们通过我组织的“下一代智能操作系统”微信群讨论过有关操作系统的方法论,强烈批判了做 android 兼容操作系统的思路。比如阿里的 YunOS、科泰的 Elastos等。三年过去了,阿里的YunOS 改名叫Alios,转做车联网了,是不是兼容 Android 不重要,也不必要了;Elastos 趁着区块链的热潮成功 ICO 了,兼容 Android 的初心改成了支持 Dapp。
作为旁观者,我不得不感叹:人们所犯的错误里边的大部分,也许就是这种常识性错误。人们有时候所说的“执着”,大概就是“明知不可为而为之”的胆量吧。
操作系统的概念
操作系统是非常基础的系统软件,它支撑所有的应用程序执行。但操作系统以及相关术语的不规范使用,经常会给我们带来一些认知上的混乱,比如,所有人都知道Linux 是一个操作系统,但基于Linux 的 Android 也被称为操作系统。
目前大家公认的操作系统定义,应该和百度百科给出的一样:
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。
但这个定义需要做些调整。
我认为,运行在特定硬件运算平台之上,为上层应用程序提供了完备、自洽的程序接口,方便开发人员利用各种硬件资源开发应用程序的系统软件,就可以称为“操作系统”。
在上面这个定义里边,我强调如下两个概念:
操作系统必须提供完备、自洽的程序接口;
操作系统首要服务于开发人员(软件工程师)。
百度百科给出的操作系统定义,其实应该属于另一个术语“内核(Kernel)”。比如 Linux 操作系统,本质上是 Linux 内核外加一些基础的函数库、工具等形成的。基于此原因,自由软件基金会的 Richard Stallman 就一直强调应该把 Linux 操作系统称为“GNU/Linux”操作系统,因为配合 Linux 内核工作的基础库和工具,是由自由软件基金会组织开发的,这个项目的名称是 GNU。
一个操作系统的内核,会通过特定的手段提供一些接口,但这些接口相对原始,对开发者并不友好,而且不同的操作系统可能会提供不同的接口。后来大家想到一个办法,通过对原始接口做进一步的封装,可以让开发者不管用哪个内核,都可以使用统一的接口来编写应用程序。为满足这个需求,出现了 POSIX 标准。目前大部分的操作系统都遵循 POSIX 标准为应用程序提供接口。
但是,基于 POSIX 标准的操作系统接口仍然比较底层,对程序员的要求较高,一般需要使用较为低级的计算机编程语言(常见的如C语言)来开发应用程序。而后来出现的图形用户界面,由于各个操作系统厂家的实现差异太大,并没有形成统一的标准,这就导致了很多操作系统,就算针对同一种领域,比如同为桌面电脑操作系统的 Windows 和 MacOS,在接口上也存在着巨大的差异。
而操作系统提供给应用程序的编程接口,其实是围绕操作系统形成的生态体系之护城河。
何为操作系统的生态
在各种谈及中国高科技领域缺芯少魂的文章中,90% 都会提到中国做芯片也好,做操作系统也罢,均需要巨大的资金和人力投入,而且很难打破已有的成功芯片或者操作系统通过长时间的市场营销打造出来的生态系统之铜墙铁壁。但何为芯片或者操作系统的生态,鲜有文章可以阐明。
本文不打算谈芯片的生态系统,这里谈谈操作系统的生态系统。
就我来看,操作系统的生态系统实际上就是围绕操作系统对外提供的接口形成的。也就是说,不同的操作系统,本质区别就在于其接口不同。不同的接口,意味着不同的操作系统。或者说,接口就是操作系统的基因。甚至在智能手机时代,不同的操作系统提供了不同的编程语言。比如 Android,其接口在 Java 编程语言基础上建立,而 iOS,早期使用 Objective-C 编程语言,近两年切换到了对开发者更加友好的 Swift 编程语言。显然,使用不同的编程语言,操作系统的接口肯定会更加不同。再比如,桌面操作系统的两大霸主Windows 和 MacOS,所提供的接口几乎没有重叠之处。
显然,美国人很清楚,打造一个操作系统,从一开始就要考虑赋予这个操作系统以不同的基因,并围绕这个基因打造生态系统。
特定操作系统的生态系统,说白了是由围绕这个操作系统的开发者构成的。有的开发者开发应用,有的开发者开发工具,大家协调配合,热闹起来,事儿就成了一半。显然,有更多的开发者,这个生态系统就会更加强大。缺少了开发者,操作系统将是一潭死水,无法持续发展。当然,一个生态系统要良性发展,生态系统中的各方都需要获得利益:操作系统厂商要赚钱,而开发者也要赚钱。
这就是为什么我在前文中,强调操作系统的首要用户是开发者的原因。也是为什么我极力反对搞兼容(比如兼容 Android)操作系统的原因——就算你做了一个更好的 Android,也是在为谷歌的 Android 生态系统添砖加瓦。
一切还要看市场基础
生态系统是表象,而市场基础才是根本。假如没有市场基础,开发者就不会为某个操作系统开发应用,缺少了开发者的操作系统,自然无法长久。
拿 Linux 举个例子。为什么 Linux 成了全世界最流行的操作系统内核?最根本的原因是 Linux 的出现恰逢其时(有市场基础),其次是 Linux 使用 GPL 许可证保持了开源和免费,而第三个原因是 Linux 借它的内部接口形成了自己的生态系统。
作为内核,Linux 向上层符提供了合 POSIX 标准的接口,而向下为硬件外设提供了统一的驱动程序接口。正是因为 Linux 为硬件提供了统一和稳定的驱动程序接口,使得 Linux 成为硬件生产商开发计算机硬件外设时的首选,这让 Linux 内核中存在着大量的各类驱动程序,进而聚拢了大量的内核开发者,而这反过来又促进了 Linux 内核的广泛应用。
这也可以解释,为什么国产的那些各种各样的 Linux 发行版,除了政府或者极少的行业客户之外,在民用市场几乎没有任何建树,更谈不上取代 Windows 了。其表面原因是,除了操作系统厂商之外,没有开发者为这个操作系统开发应用,也就无法形成良性的生态系统。但从根子上讲,这是由于市场需求疲软造成的——Windows 的市场地位不可撼动,而开发者无法通过开发这些操作系统上的应用软件赚到钱。或者,换句话说,国产的那些针对桌面的 Linux 发行版,是不可能围绕政府“自主可控”的口号创建一个生态系统的——没有这个市场基础。
所以,做一个操作系统,最根本是要有市场基础。在有确定的市场基础之前提下,一定要赋予这个操作系统以独特的基因(接口),并围绕这个基因打造这个操作系统的护城河——生态系统。如此才有成功的可能。
国产操作系统是否还有机会
看过梁宁那篇《关于国产芯片和操作系统的一些往事》的读者一定知道,几十年来,倪光南院士一直在奔走呼吁,希望政府牵头、大企业支持一同打造自主可控的国产CPU和操作系统。
不说芯片,就操作系统来讲,我不太认同让政府牵头的做法。如前所述,一个新操作系统的发展一定要有市场基础,没有市场基础,我的接口生态论是不成立的。目前,在服务器、桌面、智能手机领域,美国巨头没有给我们留下任何市场机会。所以,我认为国内那些林林总总的国产桌面操作系统(包括国产智能手机操作系统),是没有任何机会的,顶多就是赚点政府的钱。
但国产操作系统仍然有机会,但机会一定来自新的市场。
以通用操作系统为例。新的操作系统,往往在计算机的设备形态,尤其是交互方式发生变化时出现。比如个人电脑上最初运行的DOS,有了图形终端和鼠标后出现了Windows系统;而智能手机的出现催生了iOS和Android系统,对应的交互方式从鼠标变成了触摸屏。
所以我认为,当计算机的形态(比如人机交互方式)发生重要变化时,才会给新的操作系统带来发展机遇。或者反过来讲,新的操作系统要为新的计算机形态,尤其是新的交互方式进行设计才有发展壮大的机会。其中深层次的原因是计算机形态(如交互形态)的变化,会使得操作系统的软件栈发生变化,进而会催生出新的应用编程接口。如前所述,应用编程接口则是操作系统赖以构建自己的生态系统的护城河。
所以国产的操作系统要想在竞争中胜出,就必须先他人一步去为新的计算机形态做准备。那么,新的计算机形态会是什么样的?其实不同于服务器、桌面和智能手机的计算机设备在近几年越来越多,比如智能音箱、智能门锁为代表的智能硬件,工业机器人,物联网,车载系统等等,而且随着各行各业信息化的发展,会有更多不同于传统计算机形态的产品出现(最具革命性特征的应该是量子计算机),而这就是国产操作系统的机会所在。
再次强调,针对服务器、桌面和智能手机的通用操作系统领域,国产操作系统不会有任何机会。如果您还在持续投入,那最好尽早放弃。
国内正在开发的几个典型操作系统
除了那些吃政府饭的操作系统之外,国内一直有几批人在针对不同的领域开发自己的操作系统。在第二篇文章里边,我对比了几个国产的原创操作系统,接下来看看这些操作系统的现状。那些原来做操作系统,后来项目整个儿转移到区块链,搞ICO 的,比如 Elastos、Ruff等等,人家已经进入了另一个世界(币圈),这里就不赘述了。
LiteOS
作为贯彻任正非 2012 实验室讲话精神的产物,华为在 2015 年推出了LiteOS 操作系统。LiteOS 面向物联网,本质上属于一种 RTOS(实时操作系统),增加了物联网相关协议的支持,整合了一些云端服务。目前正在做大力推广。
LiteOS 是华为第一次做操作系统,这个操作系统未来怎么样,不好说。但从旁人看来,LiteOS 和华为的体量有那么一点儿不匹配。毕竟 RTOS 这个东西,全世界前前后后出现过太多了,据说光开源的 RTOS就有两千多个,还有完全开源免费的,比如 FreeRTOS。LiteOS 的独特性到底在哪里?如何迎合开发者?还需要华为仔细思考。
AliOS
“2017年9月27日,阿里巴巴发布全新的AliOS品牌及口号,面向汽车、IoT终端、IoT芯片和工业领域研发物联网操作系统,并整合原YunOS移动端业务。”这是阿里巴巴对 AliOS 的官方定义。
从原来的 YunOS 转向 AliOS,是阿里巴巴在操作系统领域的一个重要变化。这说明了一点:原来兼容Android 为目标的 YunOS 彻底失败。从我的判断看,AliOS 一下子要支持汽车、IoT 终端、IoT芯片、工业等这么多领域,有点勉为其难。从其市场动作看,AliOS 最关心的还是车载,也就是车联网。
SylixOS
SylixOS 属于传统 RTOS 范畴,主要市场目标是替代VxWorks 这个老牌的嵌入式实时操作系统。SylixOS 在这几年取得了比较大的发展。2015 年的时候,大概十几个人的团队,目前已经一百人了,而且还在很多二线城市设立了分公司。SylixOS 的发展得益于军工、航空、航天等领域的自主可控需求,通过来自军工和行业客户的各种开发和定制项目,养活一个二百人的团队都是可能的。
RT-Thread
RT-Thread 的团队,去年拿到了“近千万”风险投资,算是国内基础软件领域不多的几个成功融资的项目。这个操作系统发展历史较长,最早的定位是一个实时嵌入式操作系统(RTOS),后来定位为物联网操作系统,是LiteOS 的竞争对手。和 LiteOS 相比较,这个操作系统的开发者基础要好一些,毕竟问世时间长很多。
RT-Thread 团队的问题在于,如何围绕这个操作系统构建自己的生态系统和商业模式。
DJYOS
DJYOS(DJY 是“都江堰”的拼音首字母缩写)是一款主要应用于单片机的操作系统。以前,单片机的开发非常原始,而 DJYOS 则为单片机应用提供了一个独特的操作系统,使得单片机上的开发变得容易起来,同时还能兼顾非常好的实时性要求。
OPENTHOS
OPENTHOS是个很有意思的操作系统。这个操作系统的目的是为传统的电脑(台式机或者笔记本等大屏终端设备)打造一款桌面操作系统。和大家都知道的红旗 Linux、中标 Linux 等不同,OPENTHOS 在大家都熟悉的 Android 系统基础之上进行开发。
2016年(也许是 2015年,反正是冬天),清华陈渝老师找我讨论过这个操作系统。按我的观点,这个项目当然是没有多大价值的,技术上、工程上都没有价值,最终会浪费大家的精力和时间。两年间,OPENTHOS保持了开源,而且在持续发布新版本,但我仍然不看好这个系统。假定有政府或者行业的市场基础,先不说生态系统的问题,一个现实的问题是:你能跟得上 Android 的演进速度?
一般人不太明白我上面这个简单问题的深层次内涵。这里简单解释一下。Android 是谷歌控制下的智能手机操作系统,现在大部分人每天都在用。虽说 Android 是开源的,但开放的源代码不一定是最新的;另外,Android 版本之间的 API 差异很大。应用开发者为 Android 开发应用,都会跟着 Android 最新的版本走,首要目标是支持好智能手机上运行的 Android 版本。这就为 OPENTHOS 上面可以跑 Android 应用埋下了一个重要的隐患。实际上,所有号称可以兼容 Android 的系统,最后都失败了,YunOS 如此,Elastos 亦如此,OPENTHOS 也不会例外,更何况 OPENTHOS 还试图同时兼容 Linux 上的原生应用程序。
LMOS 和 HOT-POT
这几年,民间也有高手在独立开发操作系统(内核),其中比较活跃的有LMOS 和HOT-POT。
LMOS 由彭东独立开发,主要支持 x86 架构,近期开源了支持ARM 架构的 LMOSEM。
HOT-POT 正在由谢宝友独立开发,目标是实现一款工业级的服务器操作系统,尚未正式面世。据谢宝友介绍,HOT-POT 还在起步阶段,这是作者“一份20年的情怀,也许还有一份淡淡的无奈,或者还有一点点不切实际的幻想”。
对这类个人发起的内核项目,除了口头上的支持之外,我没有其他任何异议。毕竟 Linux 最初也只是 Linus的个人爱好而已,没想到最后变成了全世界最牛的操作系统内核。不过我本人仍然有一些建议给他们:
不要重复前人走过的道路,要做,就做前人没做过的事情,走前人没走过的道路。比如最近RISC V 架构很火,有精力有愿望有情怀的独立开发者,能否针对 RISC V 架构设计一个全新的操作系统内核?
结语
很明显,中兴被禁运的事件将为国产芯片、操作系统等基础软件的发展带来契机。我本人祝贺还活着的操作系统从业者,尤其是仍然坚持自主操作系统理想的创业者。
然而,契机只是契机,能否借机发展壮大,实现人生理想,进而为国争光,则是另外一回事儿。
六年间我写的这三篇文章,苦口婆心地解释何为“自主”操作系统,何为操作系统生态,如何构建操作系统,其实都是纸上谈兵而已。现在,我们需要行动起来,去实践这一方法论。希望这些文字,能够对国内操作系统的从业者有所帮助。然而,我最希望的是,这是我最后一次撰写操作系统方法论的文章。
相关阅读:
加关注
以上是关于魏永明: 三谈操作系统的主要内容,如果未能解决你的问题,请参考以下文章