2. 从 1970 年代 IBM 大型机 OS/360,到 1980 年代 VAX 小型机操 UNIX,操作系统内核技术及
TCP/IP 互联网技术日臻完善。尽管 UNIX 开创性地设计了外设驱动模型及对结构化 C 语言程序运行
的支撑,直到 1985 年之后,苹果 Macintosh、微软 Windows 视窗技术普及之前,操作系统作为应
用运行平台的人机交互界面仍旧非常简陋,中间件框架及容器基本不存在。
今天的 Linux 操作系统诞生于 1990 年代初期,基本是用开源理念对 UNIX 的重复实现,在技术上谈
不上多少创新,但是开源的理念迎合了操作系统作为生态环境的必然。由此酝 酿了操作系统不再是
“产品”的观念,赋予操作系统作为各类软硬件产品赖以生存的载体的角色,大概可以类比商家与政
府,创业公司与孵化器的关系。
随着 1946 年 ENIAC 作为第一台被世人关注的通用计算机投入使用,到 1950 年代中期,冯·诺依曼在
论文中总结了集体研发的两项基本原则:程序作为数据加载到内存运行,计算机体系结构由寄存器、
内存、磁盘等三层架构组成。遵循这两项原则设计的计算机也常被后人称为“冯·诺依曼机”。在之后
的三十多年中,无数英雄人物、商业公司试图挑战冯·诺依曼机的原则,比如:向量机、堆栈机、数据
流机、Lisp 机、Prolog 五代机等。那时与各种机器配合的操作系统也是层出不穷,每年小有名气的操
作系统发布十几个。
回首往事,人们意识到一个非常不幸的事实:尽管那时的机器规模不大,操作系统编写核心团队也不
过五到十人,但不论设计新机器还是开发新的操作系统,研发周期起码要五年。摩尔定律说:每两年
左右 CPU 的速度就翻番。结果导致新型的机器的效率不如老机器换个新 CPU。另一个更不幸的事实
是有人证明各种机器都与冯·诺依曼机等价,操作系统的消息机制与调用机制也等价。到 1990 年代中
期,超大规模集成电路技术成熟,十几个人的团队,五年已经做不了任何新机器,也不可能完成任何
一个有实质意义的通用操作系统了。
天不变,道亦不变。既然至今所有计算机都是冯·诺依曼机,Linux 内核作为最普遍采用的计算机内核
也就越来越被接受了。不是说 Linux 内核无懈可击,但既然等价,在某些指标上好百分之几的内核,
已经很难撼动 Linux 内核的地位了。微软最近也在努力推进其开源战略并积极贡献代码到 Linux 开源
社区。
Linux 加上 UNIX 的历史已经将近半个世纪了,比大多数 IT 工程师的岁数还大,再因为开源又普及,
大家毫无疑问地以为 Linux 是操作系统。如果我们仔细想一下,曾经 DOS 也被称为操作系统,后来
DOS 上面运行 Windows。由于一段时间内 Windows 的市场占有率奇高,大家跟着微软顺嘴叫
Windows 操作系统。那么到底 DOS 是操作系统还是 Windows 是操作系统?Android 运行于 Linux
内核之上,Android 是操作系统还是 Linux 是操作系统?这个问题我们留在后面章节来回答。
3. 施乐(Xerox)与网景(Netscape)的故事
Window 视窗技术既不是苹果,也不是微软发明的,而是一间曾经赫赫有名的施乐公司(Xerox)发
明的。为了方便人与机器交互,施乐发明了鼠标。为了方便机器与机器交互,施乐发明了以太网。为
了便于程序员编写人机交互程序,施乐发明了非常理想化的面向对象语言 Smalltalk-80(1980
年)。就凭这四样技术,大家有没有想过施乐不发财都难。
电影、小说、报刊、杂志上都说 Steve Jobs 如何天才,去施乐 PARC 研究中心看到了视窗演示,发
现了未来。等 Bill Gates 去 PARC 研究中心看到了视窗演示,就成了偷窃了未来。其实,施乐研究院
既然发明了以太网和视窗技术,他们当然最先知道什么是互联网及计算机的未来,用不着 Steve Jobs
或者 Bill Gates 去指点江山。
当年施乐的看家产品是静电复印机,一台的售价上万美元。他们就是在高额利润下,不计成本投入研
发,吸引大量优秀研发人员,顺带发明了许多计算机相关技术。这点非常像 AT&T 贝尔实验室,曾经
利用电信通话的垄断性利润,发明了晶体管、超导等造福人类的技术。1984 年在美国电脑商店里,
一台 Xerox Star Workstation 的售价是$14,000 美元。一台苹果或者 IBM PC 的售价大概是$2,000
美元。那时一辆汽车一万多美元,一栋别墅十几万美元。如果再考虑每两年电脑价钱掉一半,没人会
去购买施乐电脑。华尔街股票市场是逐利的,不会允许施乐生产$2,000 美元的 PC,自然也就没有后
来了。
近三十年来,操作系统内核争斗以 Linux 胜出告一段落,但伴随 Window 视窗技术的诞生,中间件/
框架+虚拟机/容器技术却如火如荼地发展,还有愈演愈烈的趋势。
1995 年夏天,网景公司股票上市,当时提出的口号是“浏览器是未来的操作系统”,其影响至今不
乏拥趸。前几年还红火一阵的 webOS、Firefox OS 的技术特点可圈可点。网景发明的 JavaScript 语
言至今越来越普及了。浏览器的好处就不在这里赘述了,一句话,浏览器改变了世界。
浏览器引导的万维网(WWW)超越了公司的生死,网景、雅虎没了,成千上万新公司出现了,谷
歌、亚马逊、Facebook、阿里、腾讯、百度是其中的佼佼者。政府搭台,公司唱戏,建议政府把资
金投向开源、平台类技术,投到让所有创业公司受益的事业上。比如网景公司的技术(包括初始源代
码)来自美国伊利诺大学(UIUC)超级计算机应用中心(NCSA)相关项目,而该中心的资金来自美
国能源部和国防部的公共技术赞助基金,要求所有成果在互联网上公开。
4. 前面提到冯·诺依曼计算机存储架构,不论 Linux 还是 Windows 操作系统的文件地址空间都是指向硬
盘。硬盘上的资源无非两类:数据和程序。浏览器通过 URL 直接访问互联网门户网站上的数据文件。
webOS、Firefox OS 等通过 URL 直接访问互联网门户网站上的 JavaScript 程序。如果读者看过谷歌
Google I/O 2016 大会的视频,谷歌正在积极推进的“Instant App”模式,点击链接就能立即运行
应用,无需程序安装与卸载。
SUN 在 1992 年随着 Java 语言的推出,提出了“网络就是计算机”(The Network is the
computer.)的口号。浏览器大概实现了一半,谷歌 Instant App 想实现另一半。二十年前点击 URL
网页链接就能得到无穷无尽的信息。网景当年的梦想今天也已经非常接近实现了,不久的将来,浏览
器是未来的操作系统,操作系统就是未来的浏览器,不但能点击运行 JavaScript,能点击运行 Java,
也能点击运行 C/C++编译的原生应用。
关于新一代操作系统的思考
名不正,则言不顺;言不顺,则事不成;事不成,则礼乐不兴。(引自《论语·子路》)
如果不能用发展的眼光看操作系统,就不可能设计新的操作系统;没有新型操作系统设计,自然做不
出来新型操作系统;没有新型操作系统,未来的操作系统生态就只能是海市蜃楼。
首先,Windows 是操作系统吗?假设我们从应用编程程序员的角度看操作系统 API(Application
Programming Interface),能看到的最底层哪个系统的 API,那个就被称为操作系统。按照这个定
义,应用程序员用 DOS API 编程,DOS 就是操作系统。应用程序员用 Windows API 编程,尽管
Windows 运行于 DOS 之上,Windows 就是操作系统。
这里我们强调一下,不考虑向后兼容的应用,操作系统必须能向前编写任意(图灵等价)应用,能在
需要时段跑出 CPU 的速度。Win16/32 SDK 的应用编程 API 可以编写任意应用,而无需诉诸 DOS
API,因此我们说 Windows 提供了完整的操作系统环境。
2000 年左右,美国 SUN 公司的 Java 语言大有占领世界的势头。他们认为 Java 与 C/C++相比的效
率损失在四倍左右,也就是说 4-6 年之后,CPU 速度提升,利用 Java 可以完成 100%的应用程序实
现。如此这般,Java 虚拟机提供的 API 就是操作系统 API。至于 Java VM 和系统底层抽象,TCP/IP
等网络协议栈仍旧采用 C/C++语言,这与应用无关,并不影响操作系统的定义。谷歌的 Android 采
用 Java 作为母语,微软的 Windows Vista 采用 C#作为母语,两者都和 SUN 的布道脱不了干系。
5. 1992 年 Java 语言诞生伊始,“Write once, run every where!”的理念声彻云霄,但至今未果。二十
多年来 Java API 不能实现 100%的应用编程,这大概是不争的事实。Android 的松耦合编程框架已经
深入人心,控制了近 80%的手机市场份额。但是 Android 上面的第三方游戏引擎、编解码器、浏览
器、Office 等大型应用软件仍旧必须依赖底层 Linux 系统 API 的支撑。
有人说 Android 是 Linux 操作系统的衍生品,尤其是至今这个论点还充斥媒体和专业舆论。毋庸置
疑,Linux 架构沿用了 UNIX 架构,40 多年了,成熟稳定 ,并取得伟大的历史性胜利。
Android 出于商业考量选择 Linux 为基石,但并非 Linux 的衍生品,毕竟 Android 也可以选择其他操
作系统内核为基石,比如最近 Google 也在尝试自己实现全新的 Fuchsia 系列内核(包括 Magenta
和 LittleKernel)。以发展的眼光看,Android 的缔造者们期望 Android 是操作系统,只是梦想还没
真正实现。
1970 年代末期中国主流计算机是 DJS-130,该机源自美国 Data General 公司 1969 年发布的 Nova
机,其操作系统没有 BIOS,启动加载需要人工输入十三条指令(俗称手拨十三条)。后来的 PC、手
机加载不同操作系统,如 Linux 或者 Windows,都要通过硬件内置的 BIOS。如今流行的 BIOS 标准
是 Intel 主导的开源 UEFI 规范,其功能已经非常强大了。
今天的 Android、Blackberry、webOS、Chrome OS、 Firefox OS 等操作系统的底层都是 Linux 内
核。iOS、Mac OS 底层是类似 Linux 的 Unix 系内核。以上多个操作系统的设计理念大相径庭。
Linux 的功能只是负责本地计算机硬件抽象,并不具备任何面向对象(Java 编程),面向服务(SaaS
编程),面向分布式(DCOM、.NET 编程),面向互联网(HTML/JS 编程),面向人工智能(逻辑
编程)的理念。
我们认为 Linux 是现代高级 BIOS 的描述并不夸张。
本文中只是简单、非学术地讨论了 Windows 和 Android。并不是说各个时代没有其他操作系统,但
相比之下,各个时代里操作系统第一名的市场占有率比第二名起码高很多。
其次,Windows 10 是 Windows 吗?Windows 是微软的注册商标。Windows 10 同时提供两套完
全独立的应用编程 API 集合,一套是传统的、基于消息机制(Polling)的 Win32 编程 API,另一套
是基于注册/回调的推送机制(Pushing)的 WinRT 编程 API。微软应用商店里的应用都是基于
WinRT 实现的应用,目前微软的应用商店中并不未涵盖著名的 Office 等大型软件应用。
6. 撇开 Windows 商标,Windows 10 与 Windows XP 根本不是同一类(或者说同一代)技术。废弃
Win32 消息机制应用编程,启用全新的 WinRT API 应用编程的好处是什么?据微软说,未来采用统
一的 Windows 10 操作系统可以支持手机、平板、电脑、电视、游戏机、服务器、工控嵌入式设备、
眼镜、机器人等智能终端。微软还说,Windows 10 的未来不会有 Windows 11,这一款操作系统就
是未来。
过去手机是 WinCE,桌面是 WinXP,服务器是 Win Server,游戏机是 Windows for XBox,工控机
是 XP Embedded,微软一个公司同时做了五个操作系统发行版。今天的苹果的手机、平板是 iOS,
便携电脑和台式机运行 MacOS。谷歌有 Android 和 Chrome OS。Linux 的主要发行版有 Ubuntu、
Redhat、Debian 等。用过去的技术,大家都不能统一操作系统发行版,为什么现在 Windows 10 就
能做到?
起码我们隐约能感觉到,新一代操作系统可能真的要来了,但关键肯定不在于 Windows 10 能在电脑
上运行 Office。
以 HoloLens 眼镜为例,眼睛的 CPU 能力受到电源限制,眼睛的硬盘受到重量限制,眼镜的智能要对
接云计算,眼镜还可能需要与周边的 IoT 设备进行动态交互。
Windows 10 的机器人项目代号是 Bamboo。机器人需要动态插拔“胳膊”、“大腿”;人工智能需
要动态切换各种智能算法;VR/AR 需要有云(互联网)、雾(周边环境)、端(各种穿戴设备)的协
同操作,传统操作系统(比如 Linux)的局限性越来越明显,新一代操作系统的痛点也就明确了。
我们认为统一应用平台的核心难点是 AR 眼镜和机器人,同时兼顾服务器、PC 机、手机、游戏机等传
统计算机。
操作系统及互联网安全架构顶层设计
我们知道传统计算机是由 CPU 主板、硬盘、外设、I/O 终端(包括屏幕/键盘/鼠标)等四部分组成,
如今的通用操作系统就是协调这四大件的应用软件运行平台。
我们特别指出常见的操作系统的安全机制只限于单机(本地),虽然操作系统提供网络接口,但并不
负责网络安全。我们还注意到传统外设其实是自带嵌入式操作系统的不能独立上网的智能设备。随着
CPU 造价越来越低廉,目前计算机外设其实也是由 CPU、内存、永久存储组成的计算机,只是因为人
7. 机交互及网络安全等原因被赋予了能力受限的角色,这个认识有助于理解 AR/VR 眼镜、机器人、智
能家居安全问题及解决对策。
四种角色——任何 IoT 设备,手机、平板、眼镜等智能终端,机器人的胳膊、大腿、心脏、大脑的硬
件,都无时无刻不在扮演这四种角色中的某一种或者二、三、四种角色。传统通用操作系统在一台计
算机中协调四种角色,未来的操作系统要在去中心的分布式环境里,动态协调不同分立设备扮演好这
四种角色。
举个例子,当我们介绍传统的浏览器,我们一定会强调互联网的另一端还有门户网站,中间要通过
HTTP、HTTPS 之类的网络协议连接。仔细一点的读者还会注意到浏览器可以离线访问本地硬盘上的
HTML 内容。四十年前传统电脑的数据文件和应用程序都存放在本地硬盘上。二十年前浏览器可以方
便地访问互联网上的数据,程序仍然只能预装在本地。
如果我们把网站的内容全部存储在云盘里,浏览器是否稍加改良,仍旧可以继续工作呢?网站演变为
云盘;浏览器演变为终端;HTTP/HTTPS 等网络协议演变为云盘计算机内部的 PCI 总线;CPU 主板
的负载由云盘 CPU 与终端 CPU 分摊;外设终端周边 IoT 设备作为本地终端及云盘服务器上运行的
Web 服务。不但数据可以放在互联网云盘上,程序/软件服务也可以放在互联网云盘上。
以上云盘计算机顶层设计的好处是什么?务虚来说,这就是 25 年前人们说的“网络就是计算机——
The Network is the Computer。”务实来说,网络变为云盘计算机内部总线,所有网络数据包由操
作系统代为收发。我们知道,Windows 上面的应用访问硬盘 E:时,并不知道 E: 盘的通讯协议,其协
议可能是 IDE,或者 USB,甚至是 TCP/IP。未来的云盘应用也不知道云盘的通讯协议,这也称为应用
与网络协议正交。
想象移动运营商是一台网络计算机,世界上可以有大大小小许多虚拟运营商。每只手机或者虚拟手机
里面只跑一个应用或者服务,并且不管应用还是服务都不允许直接访问运营商网络(不许直接读写 IP
包)。应用与应用,应用与服务,服务与服务之间的寻址都是通过某种 UUID
(Universal Unique ID),比如手机号码。所有通讯数据包都由运营商代为传递。
容器方兴未艾,Android 作为容器操作系统,因为没有解决原生代码 JNI 的事情,容器底层漏了。作
为轻量级容器内运行的操作系统 CoreOS 虽然轻巧,但仍旧采用 Sockets 通讯,容器侧面漏了。
假设完美的互联网网络没有漏洞,仍然不可避免第三方应用/服务发起 DDoS 攻击。假设理想的 Linux
操作系统没有漏洞,仍然不可避免后台服务/伪驱动监听鼠标、键盘并泄露用户隐私。这是由于互联网
协议和操作系统顶层架构导致的问题。