3 “自主”操作系统应该具备的特征
那么,“自主”操作系统应该张什么样?要回答这个问题,我们先看看假的“自主”操作系统张什么样。所谓假的“自主”操作系统,就是那些号称“自主”操作系统,但其实:
- 只是在已有的开源操作系统之上加了一层皮。比如各种基于 Android 的第三方 ROM,比如 MIUI、Flemy 等。这种操作系统仅仅在 UI/UE 上做了一些工作,就如同一个人换了一身衣服那样,实质上这个人不会因为换了一身衣服而从张三改叫成李四。
- 修改了已有开源操作系统的内部代码,做了一些优化或者去掉了别人的一些东西,添加了一些自己的内容。比如阿里 OS 就属于这种,或者哪些号称深度定制的 Android 系统也属此类。这种做法如同整容,的确动了些刀子,甚至改变了性别,但人还是那人,改了名字或性别也还是那人。
这么类比下来,读者应该就知道了,真的“自主”操作系统,必须要有自己的灵魂,只有这样,不管换什么衣服、是不是经过了整容,那人还是那人;通俗一点讲,只有换了脑袋的才能是一个全新的个体。
那么在操作系统当中,什么东西是灵魂?这个问题回答起来蛮难的。我们先看看哪些东西肯定不属于灵魂:
- 无法形成有效知识产权的软件组件,或者说,满世界有很多(开源的)实现的软件组件。比如内核、基础函数库、网络协议、图形库、浏览器引擎等等。这些东西可以看成是形成一个智能动物(比如“人”)的骨架或者躯体、甚至心脏,但远远算不上脑袋或者灵魂。这也是为什么笔者主张在“自主”操作系统中要尽量使用现有的成熟开源软件、而且不建议再行发明此类轮子的原因。
要知道哪些东西是灵魂,我们分析下 Google 在和阿里 OS 争论的过程中主要维护的是什么东西:
- Google 的说法:阿里 OS 采用了 Android 的虚拟机和 Framework,但又不兼容 Android,破坏了 Android 的生态系统。这个说法可能还不是 Google 打压阿里 OS 的最关键原因,但起码说出了他们的担忧:阿里 OS 是想借 Android 打造自己的一个生态系统!另外,Google 对那些只换衣服的 Android 系统采取听之任之的态度,和他们一贯以来标榜的“只要兼容,我们欢迎”的态度一致——也就是说,这些系统没有从根本上动摇 Google 的生态系统。
所以,真正的“自主”操作系统的灵魂,就是那个背后的、无形的生态系统,一个看似开放但其实封闭的生态系统。一旦加入这个生态系统,你就很难下来——正所谓“上了贼船下不来”。
这就是我的回答:一个真正“自主”的操作系统,必须建立自己的生态系统,一个开放的,但在某种程度上又封闭的生态系统。
操作系统生态系统?这名词大家说了很多年了,一个生态系统具体应该是什么样子?笔者从如下几个方面解释一下:
- 技术层面。操作系统必须通过某种技术将自己和其他的操作系统区隔开来。比如 Android 采用 Java 语言,但使用了不同于 Sun(现在是 Oracle) JDK 的 API;iOS 采用了 Object C 语言,为应用程序提供的接口和框架甚至有别于苹果自己的 Mac OS X;Windows Phone 采用了 C# 语言,在 .Net 框架下进行开发。为什么这些操作系统不使用 C/C++ 这类语言呢,C/C++ 尤其是 C 可是这些操作系统内核的编程语言啊!?这里有如下几个原因:
- 操作系统开发者不希望普通的应用程序通过使用比较低级的编程语言来控制系统或设备,毕竟操作系统是给智能手机、平板电脑这种消费类的电子设备使用的。
- 通过采用更加高级的语言来简化编程和开发人员的学习难度。
- 通过对看起来非常复杂的框架的持续演进,达到牵着开发者和厂商鼻子走的效果。
- 便于形成依附于某个操作系统的独有的开发者社区和文化。
- 法律层面。操作系统必须通过创建自己的有效知识产权体系来保护自己。前面已经说过,越底层的软件组件越没有市场价值(码农们可能不喜欢听这话,但现实就是这样的)。通过建立全新的、包裹在底层操作系统之上的框架、编程接口、编程语言等基础设施,操作系统开发商才有可能建立起有别于他人的有效的知识产权保护体系。也就是说,如果连框架、编程语言、编程接口等都抄袭他人(就算是开源的、许可证允许的),那永远也无法形成一个可以有效保护自己的知识产权体系。
- 市场层面。通过和上下游企业的合作,建立某种联盟或者许可、授权机制,让操作系统的用户(芯片厂商、手机厂商、平板厂商)能够从中获益。比如 Android 开放联盟,做的就是这个事情。
- 开发者社区。一个好的操作系统之生态系统,要充分照顾开发者的利益,具体有如下几点:
- 要有好的开发工具,便于开发者学习、开发和调试软件。
- 要有好的文档或者教程,帮助开发者迅速掌握相关开发技巧。
- 最重要的,要能够让开发者赚到钱。
看到这里,相信大家都会意识到:这也太难了吧!的确,这非常难,这也是为什么 Moblin、MeeGo、Bada、WebOS 等操作系统相继失败,而到目前,只有 iOS、Android、Windows Phone 这三种操作系统的原因。
但是,世上无难事只怕有心人。接下来我告诉你如何搭建一个真正的“自主”操作系统。
4 如何开发“自主”操作系统
4.1 开发“自主”操作系统的两种目的和策略
开发“自主”操作系统的主要目的有两种:一种是想再造一个类似 Android、iOS 的操作系统,并作为其竞争者;一种仅仅是为了在商务谈判和合作中获得一个比较好的筹码。当然,还有一种目的就是骗取政府的财政支持,对这类不良目的,不属本文讨论范围。
我们先猜度一下国内外这几年出现的一些“自主”操作系统,其目的是什么:
- 中国移动通过博思通讯开发的 OMS。本质上 OMS 是 Android 的一个派生系统。很明显,中国移动开发 OMS 的目的属于前一种。中国移动希望利用自己强大的市场地位来左右手机供应商的 OS 选择,并建立起类似苹果那样的全封闭的平台和生态系统。可惜的是,OMS 并没有取得预期效果,在来自联通、电信的强大市场压力下,中国移动不得不允许 TD 手机使用正统的 Android 系统;OMS 也正在被市场淡忘。这里有个比较有意思的现象,Google 从来没有公开质疑过 OMS 系统,阿里 OS 的做法和 OMS 类似,却遭到了打压。这里有两个原因,一个是中国移动的市场地位摆在那里(加上还是巨型国企),Google 不敢轻举妄动,另外一个是 OMS 采用的是 Android 早期版本,那时候 Android 的市场地位还没有这么强。
- 中国联通所谓的 UniPlus。可惜的是,UniPlus 似乎从来没有面过世,也许中国联通只是放了一个烟雾弹而已。要是真开发,目的自然应该和中国移动的 OMS 类似。
- Firefox OS。这是 Mozilla 公司推出的纯粹基于 HTML5/CSS3/JavaScript 等网页前端开发技术推出的操作系统,和 HP 收购自 Palm 的 webOS 有类似的软件架构。HP 收购了 webOS 之后的半年,即宣告放弃 webOS,而 Mozilla 却希望通过类似技术的 Firefox OS 成为 Android 的竞争者。一会儿我们分析下为什么 Firefox OS 要比 webOS 有更强一些的生命力。
- 华为提出要开发的“自主”操作系统。作为一个智者,任正非不可能不知道一个真正“自主”的操作系统应该是什么样子的。华为就算再有钱,再有人才,短时间内也是搞不定一个“自主”操作系统的(如前所述,主要是建立对应的生态系统太难了)。这么说来,华为开发“自主”操作系统,其目的其实就是做一个备胎,以便在和 Android、Windows Phone 等合作时能够有一个可以讨价还价的砝码。也就是说,华为并不是真的要做“自主”的操作系统;或者这么说,支持团队去做,做成 Android 那样最好,做不成 Android 那样,如果真有一天打起架来可以凑合用也行。
- 阿里 OS。马云同志的野心很大,他做阿里 OS,就是要复制 Google 在移动互联网的商业模式,进而在移动互联网领域推广阿里体系的服务和内容。可惜的是,马云貌似不太懂技术,也没个明白人给他做参谋,结果被人害了,花了钱还被人捏住了七寸。最新的传言,说阿里 OS 要换将,继续再投个 2 亿搞。马云同志啊,光有钱是不行的,你身边还得有个把技术大牛帮你把关、出谋划策才行啊。
好,面对这两种开发“自主”操作系统的目的,应该有什么样的策略呢?其实策略很简单,不管你是真心还是假意,都应该按照本文第 3 章给出的“自主”操作系统之特征进行开发,除此之外,别无他法。任何期望找捷径的方法,都不可能获得成功。这里所说的找捷径的方法具体有:
- 给 Android 整容。如 OMS、阿里 OS。
- 忽略操作系统之生态系统的重要性,在 Linux 或其他开源操作系统内核、系统库等基础上包裹一个简单的框架而形成的操作系统。这种操作系统,其复杂度和 Linux 发行版相当,离本人定义的真正“自主”操作系统还差十万八千里。读者可能会问,这样的系统做备胎不是还行吗?为什么也得按照真做那样开发呢?你要知道的是,对手也不是傻子,人家看你的架势,就知道你不是真做——你起码得拉出真做的架势来,人家才能怕你啊!
顺便谈谈我对基于浏览器技术的 web 操作系统之看法。
理论上讲,浏览器可以做很多事情,甚至可以替代 PC 机上的通用操作系统。但是,最新的浏览器技术(HTML5/CSS3等),还存在一些技术上的问题。主要的问题有如下两个:
- 浏览器主要采用的 JavaScript 编程语言,本质上是一种难于管理(源代码保护、无法进行有效的软件架构设计、难于调试等等)的编程语言,同时内存消耗巨大,性能不佳。最新的说法是,Facebook 创始人直言全面采用 HTML5 的策略是个失误,正在向操作系统的原生应用转移。也就是说,JavaScript 语言难以承载一个良性发展的生态系统。
- 因为许多原因(主要是利益和政治因素),HTML5 相关的标准有分裂的迹象,同时进展缓慢。
HTML5 技术作为原生应用的一种补充,可以起到很好的作用,但是,如果要想在浏览器技术上建立一个真正可以和 Android 等竞争的操作系统,恐怕还需要很长的时间(技术上必须有突破)。要不然,Google 现在主推的应该是 ChromeOS,而不是 Android。
现在回答刚才提到的问题:“为什么 FirefoxOS 可以比 webOS 的生命力更加长久些呢?”主要的原因是,FirefoxOS 是开源的,有比较强大的企业在主导其发展,作为一个脱胎于开源基金会的企业(Mozilla公司),也能获得合作伙伴的一些好感;相反,因为 webOS 是封闭,HP 又没有能力像苹果那样打造一个完全封闭的平台和生态系统,所以最终的命运是被人抛弃了。虽然后来 webOS 也走上了开源的道路,但大势已去,HP 不亲自带头搞,光靠开源社区是搞不成的。
4.2 技术层面上的考虑
假定你是一名“自主”操作系统项目的技术管理者,你第一步要考虑的问题是什么?许多人的回答可能是:先选操作系统内核、基础库什么的。其实错了,第一步要考虑的应该是你打算选择什么编程语言作为原生应用的编程语言。
世界上的编程语言有很多种,有些语言贴近机器,比如汇编语言、C语言,有些语言贴近人,比如 Basic、Java,还有些语言用于特定领域,比如网页服务器端使用的 PHP,有些适合做不同软件之间的粘合剂,比如 Perl、Python。本文第 3 章已经解释了编程语言以及围绕编程语言形成的运行环境、框架是将操作系统区隔于其他操作系统的主要技术特征。因此,我们必须慎重选择一种编程语言。而且一旦选定了一种编程语言,“自主”操作系统在开发者看来长什么样,其实就基本上定了。
选择编程语言要考虑如下因素:
- 这种编程语言是否易于学习和掌握?是否有庞大的开发者在使用它?
- 这种编程语言是否具有高级语言的基本特征,比如,支持面向对象编程?
- 这种编程语言是否是编译执行的?
- 这种编程语言是否利于保护开发者的知识产权?
- 这种编程语言是否有完整的工具链支持?
- 这种编程语言是否有集成开发环境的支持?
- 这种编程语言是否易于保护整个操作系统不会被恶意代码轻易破坏?
- 如此等等。
其实很多读者看到这里,都会想到 Java 语言。是的,Java 语言或其派生语言如 C# 是构架“自主”操作系统的最佳编程语言。可惜,已经被 Android 和 Windows Phone 给捷足先登了。
如此一来,你可以考虑重新设计一门类似 Java 的语言,也可以通过其他手段,让你使用 Java 语言构建的操作系统有别于其他操作系统。比如,构建自己的虚拟机,如 Android 使用的 Dalvik 那样(Dalvik 和 Oracle 的 JDK 标准虚拟机有很大不同,从而让 Oracle 还挺难告赢 Google 的);你也可以用 Dalvik,但让类库、运行环境和 Android 不同(这样做的法律风险要大一些)。总之,你需要有自己的创新,全部抄袭是不行的。
确定了编程语言,接下来的工作其实就比较直接了,从上而下设计就是了。主要有:
- 定义和实现提供给原生应用程序的基础 API 和/或虚拟机。
- 在应用程序基础 API、标准 C/C++ 函数库和相关组件(通常都是开源软件)的基础上构建操作系统的运行环境和框架。主要涉及系统服务、模块之间的通讯机制,包括图形界面、浏览器引擎、OpenGL ES 支持接口等等。
- 同时选择操作系统内核,通常也就是 Linux,要与众不同,用 BSD 也行。
- 搞定集成开发环境和模拟器,让开发者可以在 PC 机上为你的操作系统开发应用程序。
- 让你的操作系统运行在真实硬件上,为开发者提供应用样例和文档。
- 持续迭代,让你的“自主”操作系统不停往前发展。
上面的第一点和第二点,是“自主”操作系统有别于其他操作系统,且支撑你可以和其他人竞争的关键点。往下的东西都不是构成“自主”操作系统真正竞争力的东西。
这么看来,其实也挺简单的。不是吗?貌似有钱、有个把技术上的明白人就能做到。技术上没问题了,市场、法律等方面的事情,请专业人员帮忙,中国这类人才还是蛮多的,缺的,其实还是技术人员以及懂系统工程和软件开发的管理人员。
4.3 快速搭建一个“自主”操作系统
这里给大家介绍笔者早先和美国一家公司合作,尝试搭建的一个操作系统,其实在当年这些东西的基础上,搭建出来一个有别于 Android 的开源“自主”操作系统还是非常快的。
这个系统使用了 Linux 内核和标准的 C/C++ 函数库,以及一些和 Android 体系结构类似的 C/C++ 运行库,使用了笔者公司的开源软件 MiniGUI、WebKit 浏览器核心引擎等等。基础的东西就这些。之上是开源的 Kaffe JVM(后来改成了 Cacao JVM),和符合 J2SE 规范的类库实现,再往上就是运行环境和框架了。见下图:
可惜的是,真正具有核心价值的运行环境和框架,是美国合作方自己开发的,我手里没有源代码。相信读者也能明白,美国合作方掌握的才是精华。
如果要在这套系统基础之上快速开发一个“自主”的操作系统,我们需要:
- 重新定义类库,也就是基础 API,让我们的系统从灵魂上有别于其他系统。必要的话,优化或替代开源的虚拟机(淘宝最近开源了一个 JDK 虚拟机,不过是针对 J2EE 的)。
- 全新设计和实现适合于智能手机的运行环境、框架。
- 全新设计基本的智能手机应用软件。
- 开发模拟器,并集成到 Eclipse 集成开发环境中。
- 还有,这个系统是 2006 年开发的,我们还需要将底层的内核、基础函数库等更新到比较新的版本。
要做的工作还是蛮多的,但这个系统在 2007 年的时候,就已经可以运行在主频在200M Hz 左右的手机上了。
当然,这个系统离本人定义的真正“自主”的操作系统还有很大的距离。但是,起码技术上的方向是基本正确的,要知道,这个系统几乎是和 Android 同时发起的。后来在 2007 年,Google 宣布开源 Android 后,美国合作方敏锐感觉到了 Android 将是未来的趋势,就直接转向了 Android 平台,项目也就终止了。
5 给相关人员的建议
5.1 给政策制定者
这里所说“政策制定者”主要指的是“核高基”等政府资助项目的决策人。其实前面已经说过了,这里重申一下:
政府需要在更长的周期内(至少五年),考核受资助企业的市场份额是否有扩大,是否建立了良好的生态系统,让使用者、开发者欲罢不能,而不是简单的著作权证书和专利数量,或者是否达到了一个给定的出货量(因为出货量是可以作假的)。也就是说,我们应该重新定义“自主”这两个字,从“自有知识产权”向“有效知识产权保护下的自己主导”转移;在知识产权方面,要强调有效专利数量,而不是著作权;甚至应该要求受资助企业按某种许可证条款开放源代码。
政策制定者甚至可以参照本文 3 章给出的“自主”操作系统之定义,将整个“自主”操作系统的研发和推广分为三个部分:
- 科研类,两到三年为周期,以研究新的编程语言及其相关设施(如虚拟机及其优化技术)为主。
- 工程类,两到三年为周期,围绕指定的编程语言发展外围工具链(编译器、调试器)、开发工具、运行环境、框架等。
- 法律类,半年到一年为周期,研究和分析采纳已有编程语言面临的知识产权风险,如何规避等等。
政策制定者切忌急功近利,要按照客观规律办事,将科研类的课题交给研究机构,将工程类以及市场推广等方面的课题交给企业,将法律类的课题交给大专院校。只有这样,才能首先让方法正确,方法上正确,加上合理的考核制度,才能让钱产生真正的效益。
在花钱方面,在一盘大棋下的统一部署下,初期让多一些的企业或机构参与,一年一验收,逐步淘汰那些不合格的,最后剩下来一、两个企业就好。十亿美金,外加企业自筹部分,我看基本够了。
5.2 给大型企业决策者
有意开发“自主”操作系统的大型企业决策者首先要明白,开发“自主”操作系统是一个长期、艰巨的系统工程。甚至,你需要准备一大笔钱来和已有的巨头打官司(微软赔付给 Sun几十亿美金之后,才让自己的 C# 和 .Net 平台成为“干净”的语言和平台)。
另外,如前所述,不管是真心还是假意,都要拿出十足的架势来真做,而且,对内、对外都要强调这点。要知道,你期望得100分,下属大多数情况下只能给你 80 分;你期望得 1000 分,下属也许就可以给你500分。这样才能超出决策者自己的预期,才能收到更好的效果。
5.3 给“自主”操作系统的技术负责人
这事儿如果恰好让你负责,那简直是,怎么说呢,是个“扬名立万”的机会啊!你要知道的是,这事儿和制造“两弹一星”差不多。
首先你要掂量掂量,你有没有这个本事。所谓“没有金刚钻,不揽瓷器活”,说的就是这个道理。有兴趣的也别来找我,我做点小项目可以,真要我负责,我没这个本事。
另外一方面,你要是违背知识分子的良知,帮助一些不良人员骗取国家的资助款项,就更不应该了。这可是要被人戳脊梁骨的;有没有钱拿永远是小事,昧了自己的良心可是大事。
5.4 工程上的建议
在具体的研发实施过程当中,开发负责人必须特别注意工程方面的问题:
- 先做什么、后做什么,或者那些可以并行做。
- 不同的软件模块,应采取不同的软件开发管理模型。API 设计、框架等的开发,适合采用瀑布法模型;应用软件或者小型模块的开发,适合采用敏捷开发模型。但整个系统,应要不停迭代,所以版本控制非常重要。
- 特别要注意代码的质量控制以及文档的全面、完备、简洁和逻辑性。
这方面,如果需要帮助,本人可尽微薄之力。
【全文完】
作者:魏永明(飞漫软件CEO)