操作系统的类型很多,粗粗算起来,从小到大,有针对嵌入式系统的实时操作系统,比如VxWorks、Nucleus等;有现在大家熟知的针对移动终端的Android、iOS、WindowsPhone等;有Windows、UbuntuLinux等针对PC的操作系统;还有针对服务器的操作系统,比如WindowsNT等。
从技术上讲,操作系统的概念可大可小。小的话,一个内核就可以称为一个操作系统,比如Linux内核、BSD内核、Minix内核等;大的话,则通常指的是整个软件平台,比如Android、iOS、WindowsPhone,有时还会将软件商店、开发社区等包含在内,从而外延到整个生态系统。
本文所指“操作系统”,以及大家近期讨论的操作系统,其实基本上被限制在移动终端领域当中,就是指能够和Android、iOS、WindowsPhone等相提并论的操作系统,主要用于智能手机、平板电脑,而不是实时操作系统、操作系统内核或者服务器操作系统——准确讲,应该是指一个针对智能手机和/或平板电脑的软件平台以及对应的生态系统。不过,我们当前还是把它称为“操作系统(OS)”吧。
到底要不要“自主”操作系统
对此问题,不同的人有不同看法,但其实都很偏颇。码农,尤其是喜欢Google的码农,通常会说,Android是完全开源的,没有必要重复造轮子;企业决策者或者政策制定者,则往往会认为必须有自主的操作系统。其实两者都有道理,但两者都没有看到事物的本质。
在谈“自主”操作系统的必要性之前,笔者先谈谈“自主”操作系统的不必要性。
在开源软件大行其道的今天,操作系统不再那么神秘,任何有足够财力的企业,依赖现有的开源软件,都可以比较容易地推出一个能够运行的操作系统。出于此观点,很多人认为有Android这样的开源操作系统,就没有必要再开发一个自己的操作系统了,到底谁拥有开源操作系统的知识产权,是无所谓的事情。
这个说法是有一定道理的。
从法律(指开源软件许可证)和技术上讲,就算Google不打算开源新的Android版本,不允许某些厂商使用Android,我们一样可以在已经开源的Android之上继续发展自己的Android系统——只要遵循已经开源的Android的许可证约束即可,而Android系统主要使用的开源软件许可证有GPL(Linux内核)、LGPL(各种运行时函数库)、Apache(Dalvik虚拟机及Java类库),其实是非常宽松的。
前者非常要害。谷歌在开发Android,尤其是Dalvik虚拟机以及Java类库的过程中,肯定积累了大量专利,而这些专利是凌驾于软件的著作权和许可证之上的。也就是说,如果你基于现有的Android派生了一个分支,要想将运行有这个Android派生版本的软件放到自己的手机里边销售,谷歌马上可以拿出专利大棒来限制你。当前,谷歌尚未拿出专利大棒来限制各种派生于Android的系统。拿阿里云OS和谷歌最近的争论当中来看,谷歌也只是说阿里云OS导致Android不兼容。但一旦有厂商真的使用了阿里云OS,谷歌马上就会拿出专利大棒,这将毫无疑问。
强调需要“自主”操作系统的主要有两类人:政府中的政策制定者以及大型企业的决策者。
对政策制定者来讲,面向未来由中美两国主导的国际环境,作为两极世界中的中国,有没有自主的芯片、有没有自主的操作系统,关系到两个层面的东西,一个是国家安全,一个是面子。在这样的认识下,“核高基”的出现自然而然,其目的是支持国内企业发展核心电子器件、高端通用芯片及基础软件产品。我们暂且不谈核高基项目在实施过程中存在的制度性问题,它表明的国家是在战略上的一种布局,是一种国家意志,涉及到政治领域。
作为企业决策者,没有自主的操作系统,他将在很多方面受制于人。就拿阿里云和谷歌的争议事件来看,宏碁受到了来自谷歌的压力,然后就乖乖投降了。这里边有两个值得思考的地方:
既然Android这么好,为什么宏碁还要和阿里OS合作?后者肯定没有Android成熟啊。
为什么谷歌一施压,宏碁就放弃了和阿里OS的合作呢?显然,宏碁有动机选择另一个OS给自己的智能手机,可能的原因无外乎两种:阿里给钱了或者宏碁不希望被谷歌控制;另外,宏碁又那么容易地被谷歌搞定,说明谷歌能带给宏碁的利益远远大于阿里。
另外联想到微软向Android厂商收取专利许可费的事情,像宏碁这样的厂商,肯定也会被微软勒索,也包括中兴、华为等国际化的Android手机厂商,无一例外。对企业决策者来讲,这很难受——给别人做嫁衣啊,有时候还两头受气!所以,小的厂商需要投靠大树来庇护自己(大多数乖乖就范于谷歌或微软),大的厂商就要考虑是不是开发一个“自主”的操作系统来抗衡了。
这样的思路下,华为、中兴等大的智能手机厂商,开发“自主”操作系统的动机非常强。
像阿里这样的公司,开发OS,其目的是要复制Google的商业模式,加上阿里OS又没有撇清和Android的关系,受到Google的打压就在情理之中了。
根据上面的分析,看来我们还真的需要有“自主”的操作系统。但是,“自主”到底是自主什么呢?
在功能手机和实时嵌入式系统领域,我们不是没有“自主”的操作系统,比如MTK或者展讯的操作系统,以及诸如早期的Hopen、道系统等。在通用操作系统领域,国家也长期支持了诸如麒麟操作系统、红旗Linux、中标Linux、新华Linux等多家本土操作系统厂商。但市场表明,国家支持的这些操作系统都将消亡或者正在消亡。
本人认为,国家支持下进行“自主”操作系统的开发有合理之处,毕竟开发操作系统是一件比较困难的事情。但是,这里边有一个重要的误区和制度设计上的错误,就是只强调了“自有知识产权”,而没有强调“自己主导”。
在强调“自由知识产权”的情况下,政府对受资助企业的“自主”操作系统进行考核时,大部分情况下考核的是企业有没有获得对应的知识产权,就是软件的著作权和/或对应的专利,而并没有考核能否主导一个产业链。就如同Google那样可以控制这个产业链一样,受资助的企业,能不能做到让别人用了你的操作系统,就没法不继续用?在这样的思路下,政府需要在更长的周期内,考核受资助企业的市场份额是否有扩大,是否建立了良好的生态系统,让使用者、开发者欲罢不能,而不是简单的著作权证书和专利数量,或者是否达到了一个给定的出货量(因为出货量是可以作假的)。
也就是说,我们应该重新定义“自主”这两个字,从“自有知识产权”向“有效知识产权保护下的自己主导”转移。
那么,“自主”操作系统应该张什么样?要回答这个问题,我们先看看假的“自主”操作系统张什么样。所谓假的“自主”操作系统,就是那些号称“自主”操作系统,但其实:
只是在已有的开源操作系统之上加了一层皮。比如各种基于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采用了ObjectC语言,为应用程序提供的接口和框架甚至有别于苹果自己的MacOSX;WindowsPhone采用了C#语言,在.Net框架下进行开发。为什么这些操作系统不使用C/C++这类语言呢,C/C++尤其是C可是这些操作系统内核的编程语言啊!?这里有如下几个原因:
操作系统开发者不希望普通的应用程序通过使用比较低级的编程语言来控制系统或设备,毕竟操作系统是给智能手机、平板电脑这种消费类的电子设备使用的。
通过采用更加高级的语言来简化编程和开发人员的学习难度。
通过对看起来非常复杂的框架的持续演进,达到牵着开发者和厂商鼻子走的效果。
便于形成依附于某个操作系统的独有的开发者社区和文化。
法律层面。操作系统必须通过创建自己的有效知识产权体系来保护自己。前面已经说过,越底层的软件组件越没有市场价值(码农们可能不喜欢听这话,但现实就是这样的)。通过建立全新的、包裹在底层操作系统之上的框架、编程接口、编程语言等基础设施,操作系统开发商才有可能建立起有别于他人的有效的知识产权保护体系。也就是说,如果连框架、编程语言、编程接口等都抄袭他人(就算是开源的、许可证允许的),那永远也无法形成一个可以有效保护自己的知识产权体系。
开发者社区。一个好的操作系统之生态系统,要充分照顾开发者的利益,具体有如下几点:
要有好的开发工具,便于开发者学习、开发和调试软件。
最重要的,要能够让开发者赚到钱。
看到这里,相信大家都会意识到:这也太难了吧!的确,这非常难,这也是为什么Moblin、MeeGo、Bada、WebOS等操作系统相继失败,而到目前,只有iOS、Android、WindowsPhone这三种操作系统的原因。
但是,世上无难事只怕有心人。接下来我告诉你如何搭建一个真正的“自主”操作系统。
开发“自主”操作系统的主要目的有两种:一种是想再造一个类似Android、iOS的操作系统,并作为其竞争者;一种仅仅是为了在商务谈判和合作中获得一个比较好的筹码。当然,还有一种目的就是骗取政府的财政支持,对这类不良目的,不属本文讨论范围。我们先猜度一下国内外这几年出现的一些“自主”操作系统,其目的是什么:
中国移动通过博思通讯开发的OMS。本质上OMS是Android的一个派生系统。很明显,中国移动开发OMS的目的属于前一种。中国移动希望利用自己强大的市场地位来左右手机供应商的OS选择,并建立起类似苹果那样的全封闭的平台和生态系统。可惜的是,OMS并没有取得预期效果,在来自联通、电信的强大市场压力下,中国移动不得不允许TD手机使用正统的Android系统;OMS也正在被市场淡忘。这里有个比较有意思的现象,Google从来没有公开质疑过OMS系统,阿里OS的做法和OMS类似,却遭到了打压。这里有两个原因,一个是中国移动的市场地位摆在那里(加上还是巨型国企),Google不敢轻举妄动,另外一个是OMS采用的是Android早期版本,那时候Android的市场地位还没有这么强。
中国联通所谓的UniPlus。可惜的是,UniPlus似乎从来没有面过世,也许中国联通只是放了一个烟雾弹而已。要是真开发,目的自然应该和中国移动的OMS类似。
FirefoxOS。这是Mozilla公司推出的纯粹基于HTML5/CSS3/JavaScript等网页前端开发技术推出的操作系统,和HP收购自Palm的webOS有类似的软件架构。HP收购了webOS之后的半年,即宣告放弃webOS,而Mozilla却希望通过类似技术的FirefoxOS成为Android的竞争者。一会儿我们分析下为什么FirefoxOS要比webOS有更强一些的生命力。
阿里OS。马云同志的野心很大,他做阿里OS,就是要复制Google在移动互联网的商业模式,进而在移动互联网领域推广阿里体系的服务和内容。可惜的是,马云貌似不太懂技术,也没个明白人给他做参谋,结果被人害了,花了钱还被人捏住了七寸。最新的传言,说阿里OS要换将,继续再投个2亿搞。马云同志啊,光有钱是不行的,你身边还得有个把技术大牛帮你把关、出谋划策才行啊。
好,面对这两种开发“自主”操作系统的目的,应该有什么样的策略呢?其实策略很简单,不管你是真心还是假意,都应该按照本文第3章给出的“自主”操作系统之特征进行开发,除此之外,别无他法。任何期望找捷径的方法,都不可能获得成功。这里所说的找捷径的方法具体有:*给Android整容。如OMS、阿里OS。*忽略操作系统之生态系统的重要性,在Linux或其他开源操作系统内核、系统库等基础上包裹一个简单的框架而形成的操作系统。这种操作系统,其复杂度和Linux发行版相当,离本人定义的真正“自主”操作系统还差十万八千里。读者可能会问,这样的系统做备胎不是还行吗?为什么也得按照真做那样开发呢?你要知道的是,对手也不是傻子,人家看你的架势,就知道你不是真做——你起码得拉出真做的架势来,人家才能怕你啊!
顺便谈谈我对基于浏览器技术的web操作系统之看法。
理论上讲,浏览器可以做很多事情,甚至可以替代PC机上的通用操作系统。但是,最新的浏览器技术(HTML5/CSS3等),还存在一些技术上的问题。主要的问题有如下两个:
浏览器主要采用的JavaScript编程语言,本质上是一种难于管理(源代码保护、无法进行有效的软件架构设计、难于调试等等)的编程语言,同时内存消耗巨大,性能不佳。最新的说法是,Facebook创始人直言全面采用HTML5的策略是个失误,正在向操作系统的原生应用转移。也就是说,JavaScript语言难以承载一个良性发展的生态系统。
现在回答刚才提到的问题:“为什么FirefoxOS可以比webOS的生命力更加长久些呢?”主要的原因是,FirefoxOS是开源的,有比较强大的企业在主导其发展,作为一个脱胎于开源基金会的企业(Mozilla公司),也能获得合作伙伴的一些好感;相反,因为webOS是封闭,HP又没有能力像苹果那样打造一个完全封闭的平台和生态系统,所以最终的命运是被人抛弃了。虽然后来webOS也走上了开源的道路,但大势已去,HP不亲自带头搞,光靠开源社区是搞不成的。
假定你是一名“自主”操作系统项目的技术管理者,你第一步要考虑的问题是什么?许多人的回答可能是:先选操作系统内核、基础库什么的。其实错了,第一步要考虑的应该是你打算选择什么编程语言作为原生应用的编程语言。
世界上的编程语言有很多种,有些语言贴近机器,比如汇编语言、C语言,有些语言贴近人,比如Basic、Java,还有些语言用于特定领域,比如网页服务器端使用的PHP,有些适合做不同软件之间的粘合剂,比如Perl、Python。本文第3章已经解释了编程语言以及围绕编程语言形成的运行环境、框架是将操作系统区隔于其他操作系统的主要技术特征。因此,我们必须慎重选择一种编程语言。而且一旦选定了一种编程语言,“自主”操作系统在开发者看来长什么样,其实就基本上定了。
选择编程语言要考虑如下因素:
这种编程语言是否易于学习和掌握?是否有庞大的开发者在使用它?
这种编程语言是否具有高级语言的基本特征,比如,支持面向对象编程?
这种编程语言是否是编译执行的?
这种编程语言是否利于保护开发者的知识产权?
这种编程语言是否有完整的工具链支持?
这种编程语言是否有集成开发环境的支持?
这种编程语言是否易于保护整个操作系统不会被恶意代码轻易破坏?
如此等等。
其实很多读者看到这里,都会想到Java语言。是的,Java语言或其派生语言如C#是构架“自主”操作系统的最佳编程语言。可惜,已经被Android和WindowsPhone给捷足先登了。
如此一来,你可以考虑重新设计一门类似Java的语言,也可以通过其他手段,让你使用Java语言构建的操作系统有别于其他操作系统。比如,构建自己的虚拟机,如Android使用的Dalvik那样(Dalvik和Oracle的JDK标准虚拟机有很大不同,从而让Oracle还挺难告赢Google的);你也可以用Dalvik,但让类库、运行环境和Android不同(这样做的法律风险要大一些)。总之,你需要有自己的创新,全部抄袭是不行的。
确定了编程语言,接下来的工作其实就比较直接了,从上而下设计就是了。主要有:
定义和实现提供给原生应用程序的基础API和/或虚拟机。
同时选择操作系统内核,通常也就是Linux,要与众不同,用BSD也行。
搞定集成开发环境和模拟器,让开发者可以在PC机上为你的操作系统开发应用程序。
让你的操作系统运行在真实硬件上,为开发者提供应用样例和文档。
持续迭代,让你的“自主”操作系统不停往前发展。
上面的第一点和第二点,是“自主”操作系统有别于其他操作系统,且支撑你可以和其他人竞争的关键点。往下的东西都不是构成“自主”操作系统真正竞争力的东西。
这么看来,其实也挺简单的。不是吗?貌似有钱、有个把技术上的明白人就能做到。技术上没问题了,市场、法律等方面的事情,请专业人员帮忙,中国这类人才还是蛮多的,缺的,其实还是技术人员以及懂系统工程和软件开发的管理人员。
这里给大家介绍笔者早先和美国一家公司合作,尝试搭建的一个操作系统,其实在当年这些东西的基础上,搭建出来一个有别于Android的开源“自主”操作系统还是非常快的。
这个系统使用了Linux内核和标准的C/C++函数库,以及一些和Android体系结构类似的C/C++运行库,使用了笔者公司的开源软件MiniGUI、WebKit浏览器核心引擎等等。基础的东西就这些。之上是开源的KaffeJVM(后来改成了CacaoJVM),和符合J2SE规范的类库实现,再往上就是运行环境和框架了。参见附件图。
可惜的是,真正具有核心价值的运行环境和框架,是美国合作方自己开发的,我手里没有源代码。相信读者也能明白,美国合作方掌握的才是精华。
如果要在这套系统基础之上快速开发一个“自主”的操作系统,我们需要:
重新定义类库,也就是基础API,让我们的系统从灵魂上有别于其他系统。必要的话,优化或替代开源的虚拟机(淘宝最近开源了一个JDK虚拟机,不过是针对J2EE的)。
全新设计和实现适合于智能手机的运行环境、框架。
全新设计基本的智能手机应用软件。
开发模拟器,并集成到Eclipse集成开发环境中。
还有,这个系统是2006年开发的,我们还需要将底层的内核、基础函数库等更新到比较新的版本。
要做的工作还是蛮多的,但这个系统在2007年的时候,就已经可以运行在主频在200MHz左右的手机上了。
当然,这个系统离本人定义的真正“自主”的操作系统还有很大的距离。但是,起码技术上的方向是基本正确的,要知道,这个系统几乎是和Android同时发起的。后来在2007年,Google宣布开源Android后,美国合作方敏锐感觉到了Android将是未来的趋势,就直接转向了Android平台,项目也就终止了。
这里所说“政策制定者”主要指的是“核高基”等政府资助项目的决策人。其实前面已经说过了,这里重申一下:
政府需要在更长的周期内(至少五年),考核受资助企业的市场份额是否有扩大,是否建立了良好的生态系统,让使用者、开发者欲罢不能,而不是简单的著作权证书和专利数量,或者是否达到了一个给定的出货量(因为出货量是可以作假的)。也就是说,我们应该重新定义“自主”这两个字,从“自有知识产权”向“有效知识产权保护下的自己主导”转移;在知识产权方面,要强调有效专利数量,而不是著作权;甚至应该要求受资助企业按某种许可证条款开放源代码。
政策制定者甚至可以参照本文3章给出的“自主”操作系统之定义,将整个“自主”操作系统的研发和推广分为三个部分:
工程类,两到三年为周期,围绕指定的编程语言发展外围工具链(编译器、调试器)、开发工具、运行环境、框架等。
法律类,半年到一年为周期,研究和分析采纳已有编程语言面临的知识产权风险,如何规避等等。
政策制定者切忌急功近利,要按照客观规律办事,将科研类的课题交给研究机构,将工程类以及市场推广等方面的课题交给企业,将法律类的课题交给大专院校。只有这样,才能首先让方法正确,方法上正确,加上合理的考核制度,才能让钱产生真正的效益。
在花钱方面,在一盘大棋下的统一部署下,初期让多一些的企业或机构参与,一年一验收,逐步淘汰那些不合格的,最后剩下来一、两个企业就好。十亿美金,外加企业自筹部分,我看基本够了。
有意开发“自主”操作系统的大型企业决策者首先要明白,开发“自主”操作系统是一个长期、艰巨的系统工程。甚至,你需要准备一大笔钱来和已有的巨头打官司(微软赔付给Sun几十亿美金之后,才让自己的C#和.Net平台成为“干净”的语言和平台)。
另外,如前所述,不管是真心还是假意,都要拿出十足的架势来真做,而且,对内、对外都要强调这点。要知道,你期望得100分,下属大多数情况下只能给你80分;你期望得1000分,下属也许就可以给你500分。这样才能超出决策者自己的预期,才能收到更好的效果。
这事儿如果恰好让你负责,那简直是,怎么说呢,是个“扬名立万”的机会啊!你要知道的是,这事儿和制造“两弹一星”差不多。首先你要掂量掂量,你有没有这个本事。所谓“没有金刚钻,不揽瓷器活”,说的就是这个道理。有兴趣的也别来找我,我做点小项目可以,真要我负责,我没这个本事。
另外一方面,你要是违背知识分子的良知,帮助一些不良人员骗取国家的资助款项,就更不应该了。这可是要被人戳脊梁骨的;有没有钱拿永远是小事,昧了自己的良心可是大事。
在具体的研发实施过程当中,开发负责人必须特别注意工程方面的问题:
先做什么、后做什么,或者那些可以并行做。
不同的软件模块,应采取不同的软件开发管理模型。API设计、框架等的开发,适合采用瀑布法模型;应用软件或者小型模块的开发,适合采用敏捷开发模型。但整个系统,应要不停迭代,所以版本控制非常重要。
特别要注意代码的质量控制以及文档的全面、完备、简洁和逻辑性。
第二节有关智能操作系统的讨论
以智能手机为代表的智能设备为移动互联网的发展奠定了坚实基础,但我们未能抓住智能手机发展的大好时机,智能设备上的关键系统软件——操作系统——仍然被老美把持。即使Android是开源的,但我们所做的事情,除了换几个皮肤、加固一下安全之外,仍然未能掌握核心技术,也无法打造完整的围绕操作系统的生态系统。
现在,除了智能手机之外的智能可穿戴式设备、智能机器人以及其他所有可冠以智能两字的设备成为下一个移动互联网、互联网+、物联网或者车联网的发展方向。同时,AndroidWear不再开源,这将带给我们发展自主操作系统的绝佳机会。
在这天时地利人和之际,本人发起此项倡议,征集三到五名国内的顶级系统软件高手,面向全球市场开发智能设备操作系统。
为了吸引国内高手共同参与讨论。博主先抛出了一个下一代智能操作系统的设想。
下一代智能操作系统的思路是这样的。首先,这个操作系统是传统通用操作系统的一个封装,而不是要替代现有的传统、通用操作系统,以下先简称为NGSOS(NextGenerationSmartOperatingSystem)。NGSOS主要有两个特征:一个是统一的开发语言,另外一个是一次开发完成然后可运行在所有的现有操作系统之上。在NGSOS上,不同的设备或节点承担不同的角色,可以划分为客户端、服务器端和中继端。这些节点之间通过类似DDP的协议和IM协议同步和传输数据并进行各自的展现或处理。比如在智能手表上,主要负责收集数据然后发给智能手机,智能手机再发给云端服务器进行处理。这种情况下,智能手表是客户端,云端是服务器,智能手机是中继端。
当然,也可以从头设计一门新的编程语言,最好是支持编译执行,同时支持解释运行,然后使用包/类接口来扩展各种各样的功能。
这样在智能设备端,人们可以使用Linux或者RTOS来开发自己的框架应用,而其他的应用,尤其是可下载的应用,则基于NGSOS来开发。RTOS或者Linux上的原生APP,主要用来开发框架和系统应用,尤其是那些和底层设备直接打交道的应用。
鉴于JavaScript语言的的诸多问题,最终引入一种新语言是必要的。但一种可行的技术路线是JavaScript和新语言并行开发,前者是个保障,后者面向将来。
我所提的下一代智能操作系统,是构建于传统操作系统之上的分布式、“虚拟”操作系统。我们可以将传统操作系统看成是单机操作系统,它们运行在实实在在或者被虚拟化的计算机之上,管理这个计算机的硬件资源。所以,我们在扮演不同计算机角色的系统上使用各种操作系统和不同的编程语言、平台或框架进行开发。比如,在PC上,针对Windows.Net平台,使用C++或者C#编程;在智能手机上,针对Android使用Java语言编程或针对iOS使用Objective-C或者Swift编程;在服务器上,针对Linux使用PHP、Python等语言编程等等。
当前,Meteor针对Web应用的开发提供了两个最为关键的特性:
前后端统一编程语言为JavaScript。也就是说,后端和前端使用同一种编程语言,并且被组织到了一起,可以交叉重复利用。这在当前流行的PHP后端开发技术中是难以做到的。
通过动态数据交换协议(DDP),将前端数据操作和后端数据操作无缝连接了起来,从而抹平了前端和后端的代码差异。
这两个关键特性使Meteor如日中天,成为美国硅谷YC孵化器的明星创业项目。当然,值得一提的是,Meteor技术利用了很多已经趋于成熟的其他开源项目,比如后端的Node.js、MongoDB、前端的jQuery等等,而且目前仅针对Web应用。Meteor所做的工作可以简化为如下要点:针对上述关键特性整合了大量现有的开源软件和技术。
如果我们结合传统操作系统的概念以及Meteor项目所带来的新思路,我们可以做如下思考:
我们能否跳出单机概念,将整个互联网看成是下一代操作系统主要面对的“硬件”资源?
我们能否将互联网上运行的服务、应用、带宽、数据流等像传统操作系统那样做进一步抽象,进而设计出一种新的操作系统?
如此,下一代智能操作系统的概念基本上就清晰了,要点如下:
下一代智能操作系统将面向互联网业务,运行在各种可能的单机操作系统之上。
单机操作系统将作为类似驱动程序那样的作用而存在于下一代智能操作系统中。
下一代智能操作系统通过抽象互联网业务的硬件实体,隐藏单机操作系统所提供给我们的各种细节,从而让开发者可以在更高的层面、更接近业务的层面上设计软件、开发软件。
下一代智能操作系统有可能通过单个编程语言来开发所有单机操作系统上的应用或业务组件。
如果按照这个思路设计下一代智能操作系统,这个系统将不再是一种框架,而的确就是一个实实在在的操作系统。
那么下一代智能操作系统如何做抽象呢?笔者这里先给出一个典型的应用场景。
为了描述方便,我们可以将所有参与此种业务的计算机软件一个明确的分类:服务器、客户端和微客户端,分别对应于服务器端应用、智能手机上运行的应用以及在智能手表上运行的应用。
这样,下一代智能操作系统将跨这三类应用,在各自设备上的传统操作系统支撑下运行。
在这样一个场景下,我们可以将某些东西做如下抽象:
容器。容器对应于传统操作系统上的进程概念。每个容器是一个完成特定应用任务的进程组。
数据流。数据流对应于传统操作系统上的文件或管道概念。容器接收、处理数据并产生数据。
存储。存储对应于传统操作系统上的文件系统概念,将提供直接基于SQL或者NoSQL数据库的存储抽象机制,应用无需处理文件及文件系统。
容器名。容器名对应传统操作系统上的文件名或套接字概念。容器之间通过符合某种规范的名称来找到对方或多方,建立信任关系后可互相发送数据。
数据处理驱动器。数据处理驱动器对应于传统操作系统上的驱动程序概念,本质上就是其他的传统操作系统实例。这些传统操作系统实例通过互联网协议连接到我们的下一代智能操作系统上,获取数据并通过Java、PHP、Python等语言进行数据的分析和处理,然后再反馈给其他容器。
这就是下一代智能操作系统的雏形。要我画个图吗?等我有空的时候补上吧,大家先脑补一下。
为了让大家对我所描述的下一代智能操作系统有个更具体的理解,这里给出一些设计细节供参考。
在设想中,我们提到将下一代智能操作系统建立在改造后的浏览器之上。但关键点并不是浏览器的HTML5/CSS渲染技术,而是建立在WebSocket或者传统IM机制上的消息机制。
熟悉XMPP协议的人肯定知道这个名称是怎么来的。
当然,怎么发现连入同一个业务的其他容器呢?这就需要一个目录服务,提供类似文件系统遍历那样的机制。然后通过添加好友、同意请求等机制建立信任关系(这就是AppleWatch和iOS设备配对的过程)。当然,我们还可以通过OTR(off-the-record,免记录)机制给建立连接的容器的通讯做加密处理。这点很重要,因为智能设备上的数据对使用者来讲,将是非常敏感的。
对运算能力比较弱的智能设备怎么办?其实问题不在我们一定要使用浏览器,而是要提供上面的抽象机制,这些抽象机制最终会演变成API槽,传统的操作系统需要实现这些槽,进而就可以将我们的容器运行在下一代智能操作系统中了。
那要是运行在已有的智能手机操作系统上,我们打算怎么办?其实我们也许不需要自己扩展一个浏览器。我们只需要提供一个服务,这个服务提供本地的WebSocket端口,并接收来自智能手表的数据,然后由浏览器中运行的WebApp连到这个WebSocket上就可以了。
如前所述,为下一代智能操作系统开发一门专门的编程语言是可行的。这门编程语言不是如C那样的低层编程语言,而应该如JavaScript或者其他脚本语言那样,易学易用,同时是面向下一代智能操作系统抽象对象的编程语言。
如此,大事可成也!
我们先看看国内都有哪些操作系统。注意:以下排名不分先后;来自操作系统的官方介绍用词经本人编辑并稍作修改,以求客观中立。
元心操作系统(抱歉没找到官网)。元心操作系统的主要开发者也介绍了元心操作系统的情况。目前,元心操作系统提供Linux+Qt+WebApp的混合模式,用户可以使用Qt开发应用,也可以开发HTML5的WebApp。据主要开发者描述,元心操作系统在某款智能手表中表现良好。元心操作系统可能是这里唯一一个国字头操作系统了。
上面这几个操作系统基本上可以说是国内正在活跃开发的操作系统之典型范例了,代表了不同的产品思路。读者在接下来的描述中会看到非常有意思的争论。
不过在给大家介绍高手们过招的细节之前,我先吐槽一下这些操作系统的官网。当然,大家可以一一点开来看看就知道我要吐槽什么了:
所有的官网都还停留在Web1.0时代,更不要说兼容移动端了!当然,Elastos的官网有点Web2.0的影子,可是很不稳定。据说是把服务器放在了公司里边,所以周末的时候会关机。听到这个,我的这个汗啊,那是止不住的流!
周二(3月24日)傍晚,就有关操作系统的定位讨论到了白热化阶段。说实话,混乱了好一阵子,谁也无法说服谁。其中主要的议题集中在Elastos兼容Android这一特性上。
Elastos开发者认为,通过兼容Android才能充分利用Android生态中已有的应用。比如,Elastos推向市场时,我们就可以说所有的Android应用都可以运行在Elastos上,重新编译都不要。然后,等到有一定地位了,开发者尝到用Elastos的甜头了,告诉他说,其实你的应用跑在Elastos上而不是Android上,怎么样,比谷歌的Android好吧。然后,Elastos最终抢占Android的份额,厂商纷纷找Elastos合作,开发者开始使用Elastos提供的其他API(C++的,性能更好)。最终,Elastos踢掉谷歌,成为智能手机操作系统的新霸主,制定规则并赚取商业利益。
对这一模式,高手的看法明显分成了两派:
必须兼容派:兼容是必须,不兼容没戏唱。
兼容无用派:兼容是死路一条。
当然,还有一派认为应该是看情况确定。这个按下不表,将来再说。
我们先分析Elastos路线中的逻辑问题。注意,我们经常看到一些洗脑的话(俗称“心灵鸡汤”),里边有“所以”或者“然后”两个字,很多人就以为后面的结论是自然得出来的,是符合逻辑的,少有人去仔细分析其实“所以”或者“然后”两个字之前根本就没有靠得住的论据。
在博主看来,Elastos路线中存在如下几个重要的逻辑硬伤:
当你推出Elastos并以兼容Android为卖点时,用户(这里指开发者)可能接受了,也许是因为Elastos的性能要比谷歌的Android好一些,或者谷歌的Android尚不支持用户选择的硬件平台,或者你会给用户钱(如同阿里YunOS干的那样)。反正最后用户用了你的系统。但注意,用户用Elastos的根本原因是Elastos兼容Android。所以,用户会继续用Java的Android接口来开发他的应用。因为兼容是Elastos的卖点,而且Java的Elastos应用还可以跑在谷歌的Android上,那为什么要用Elastos的C++接口?在这种情况下,Elastos号称的其他好处,恐怕没有几个用户会真心实意地尝试,而且Elastos的实现一旦有不兼容的地方,或者Android升级带来了接口变化,用户肯定会首先要求Elastos修改系统,使之100%兼容。其结果就是,在用户眼里,Elastos就是Android,充其量就是个优化或者适合特定硬件平台的Android实现。Elastos里边的CAR技术,对操作系统的实现有意义,但对用户没有意义。
这个路线没有考虑到兼容一个良性发展的生态系统之操作系统(Android)的最大风险:Android自身的升级和优化。毋庸置疑,Android现在正处在一个良性发展的生态系统中,Android自身的更新速度非常快。Elastos选择兼容Android,也要不停兼容Android的升级版本。这其中的难度将是巨大的。说白了,Elastos的路线做了一个非常大胆的假定:Android将停滞不前。这样的一个假定下得出的结论是靠不住的。
也就是说,Elastos路线中的第一步可以跨出去,但接下来发生的事情是不太可能按照自己设想的路线前进的。
经过两派的唇枪舌战,两派谁也未能说服谁。Elastos开发者最后的陈述如下:
手机市场很大,哪怕我们仅占一点点市场份额,也会很大。执着是我们的理念。
兼容之争在周三(3月25日)继续,毕竟我们没有得到一个大部分人都认同的结论。不过,Elastos的总架构师陈榕博士在周三凌晨阐述了一下Elastos的设计理念:
兼容Android应用就没有前途吗?Elastos用C++/CAR重新实现了Android框架,主要是为了实现分布式系统。俗称为“家庭云”。设想同样是跑Skype,用户如果能动态切换摄像头,如果能在移动终端跑云盘程序,家庭云跑程序后把屏幕刷到远程终端上,或者每个应用跑在独立的虚拟沙箱里,输入法之类跑在另外沙箱里。同样跑个安卓应用,是否可以不局限于本地孤立的硬件计算机上?
云盘是否可以代替网站?移动终端上的Elastos是否可以是二进制代码的浏览器?硬件计算机与网络组成的家庭云上面,是否可以跑许多软件或者硬件的虚拟机和物理机?而虚拟机操作系统完全没有网络编程接口,仍然可以实现所有SaaS的能力?
之前说我没看懂,其实是我错了,向大家道歉。我从手机上把陈总的观点逐字输入后,我大致明白了:Elastos终极要实现的目标貌似和我所提的下一代智能操作系统是一样的。只是我们的路线不一样:我是希望建立在现有的传统操作系统之上,充分利用现有的资源;Elastos是要整个重写传统的操作系统。
再回过头来看兼容问题。博主本人是兼容无用派,所以我对Elastos的看法是:
Elastos操作系统的设计理念很先进,未来也看起来很美好,但却陷在了兼容Android的泥潭中无法自拔,动弹不得。Elastos的路线需要反思。
我为什么认为兼容是无用的呢?先给大家打个比方:
某个人把Android的内核从Linux换成了BSD,那Android还是Android吗?几乎所有人针对这个问题的答案是肯定的。那么,如果把Android的虚拟机换成自己的实现(阿里YunOS最初就是这个路线),还是Android吗?大部分人针对这个问题的答案还是肯定的。这个问题继续演进;如果把Android里边所有的东西都换了,但还是提供Android一样的API,一样的框架,一样的系统应用,一样的界面效果,那还是Android吗?笔者的回答仍然是肯定,读者您呢?
有关兼容这个问题,兼容无用派的很多群友还提到如下事实:iOS替代功能机没有选择兼容,Android通过谷歌占得巨大市场份额,没有选择兼容,那么为什么我们做操作系统首先想到的就是兼容呢?
可能Elastos工程师的回答比较引人深思:
我们曾尝试推广自己设计的API,但发现根本没有人用,我们自己也不用。
Elastos工程师甚至怀疑我们自己是否有能力设计一套自己的框架和API。
周三(3月25日)上午,兼容之争终于落下了帷幕。在此之前,博主需要阐明两个概念:
复制或模仿。偏市场的人员通常会使用这个两个词。
兼容。偏技术的人更多使用这个词。
这两个术语在市场人员和技术人员共同参与讨论问题的时候会出现很大的混乱。技术人员认为说复制、模仿就是技术层面的兼容;而市场人员听到技术人员说兼容以为谈的是复制或模仿。这里需要分清楚:复制或者模仿是产品层面的,而兼容是技术层面的。
在接下来的讨论中,博主兼群主使用了问答式方法来主持讨论。
第一个问题是:为什么人们会想到兼容其它系统?这是由于,市场上某个系统已经有大面积的市场份额,大家想兼容他,就是利用人家形成的生态系统。
第二个问题是:复制/模仿和兼容的区别是什么?复制/模仿和兼容不是一个层面上的东西。Android模仿/复制iOS,但搞的不是兼容。这就是区别。
第三个问题是:如果我们要做智能手表操作系统,有没有必要复制/模仿AndroidWear,有没有必要兼容AndroidWear。就兼容这个子问题,其答案可采纳群友的话:
没必要,因为AndroidWear也是不够成熟。
对是否有必要复制/模仿AndroidWear的问题,同样引用群友的话:
当我们对功能和特性感到迷茫和纠结的时候,看看AndroidWear或AppleWatch。
结合博主针对Elastos的分析,我们基本上可以就兼容问题盖棺定论了:
按照必须兼容派的观点讲,是否兼容要看对方是否已经形成了一个良性发展的生态,就是是否已经有众多的开发者为那个系统写应用;然而,当这个系统已经形成了良性发展生态的时候,博主认为已经没有机会了(具体分析见上个小节)——兼容也是白搭。
其实,兼容就是个悖论,嘿嘿嘿...
为了避免不必要的误解,这个小节把我们正在讨论的概念做一些限定,并就博主的观点做一些必要的阐明。
这里所谈的兼容,是特指用新的实现去兼容某个其他已有的操作系统接口。比如重新实现AndroidAPI和框架,重新实现Win32API等。
另外,之前提到,对兼容的看法还有第三个派别,可以称为中间派。中间派的看法是这样的:
除了兼容与不兼容两派外,我觉得还有第三派:从不兼容到兼容,无非区分存量市场还是增量市场。在增量市场,兼容代价这么高,为什么要兼容?在存量市场,只能到别人的池子捞鱼,必须兼容,但这种兼容是手段,不是目的,所以较好的策略是有选择的去兼容,选主流一个版本兼容,如果捞够鱼了就撤,没捞够就再跟几个版本。在智能可穿戴式市场应先弃兼容,后续若拓展到其它领域(如TV),有条件地考虑兼容。
最后,博主还需要说明一下的是,虽然在本文中博主以Elastos为例批评了兼容派的错误路线。但博主从未否定Elastos使用构件技术来构造操作系统的思想,而这一思想是Elastos开发者引以为豪的“精髓”。
就兼容的讨论基本落下帷幕之后,群众的讨论进一步深入下去了,主要议题集中在:
我们是否有能力为新的智能操作系统设计一套API?
智能操作系统应该长成什么模样?
为避免扩大议题范围,我们将这两个议题限定在以智能手表为代表的智能可穿戴式设备上。
博主之前曾提到API(包括用于表达API的编程语言以及API之下的框架结构)是操作系统的DNA。显然,API的设计是非常讲究的,有群友甚至说到:
API的设计是哲学问题,需要大神才能搞定(大意)。
这话虽然有点夸张,但的确说明了API设计的难度。博主认为,设计API的工程师,必定要
有较强的数学功底,从而有非常好的归纳和抽象能力;
深入理解用于描述API之编程语言的优势和劣势;
丰富的开发经验,知道优秀的API是如何设计的;
...
遗憾的是,从高手们交流的情况来看,大家对提供一套好的API没有太大的信心。博主也记得在十多年前,我主持开发的MiniGUI之API也曾遭批评。
那么,这种情况下,我们应该采取哪种方法或者路径(方法论)来设计API?这里博主给出几个建议:
模仿已有的成熟软件之API设计。
分清模块或组件,降低或取消模块及组件之间的耦合关系。
抽象模块或组件的功能,设计API的同时使用API给出典型示例,看其设计的合理性。也可以引入草案、试用、修改、成熟的一个迭代机制。
API的修订,必须充分考虑向前兼容性。
从历史上看,优秀的API设计也不是一开始就是那样,大部分都有一个演进过程。这和操作系统的编程语言、框架都有关系。博主相信,只有真正做起来了,一切才有可能;怕是没有用的,也不必妄自菲薄。
来自市场人员的需求描述:
我们简单做个类比,PC领域,DOS-Windows3.1-Windows95。当Windows95出现以后,PC才拥有一点智能,互联网因此磅礴成长。我所认为的是,当前的嵌入式系统解决方案相对来讲,还是比DOS低,我们在寻找一个穿戴设备的Windows95。我们内心希望有一个智能一些的操作系统出现,只有操作系统有了智能,这个物联网啥的才有机会智能。
要理解这个需求的背景,需要知道国内开发智能手表的两种方法:
君正为代表的芯片厂商直接使用Android系统,进行裁剪后运行在自己的芯片上,并向设备厂商以Turnkey方案进行推广。
这两个方案都遇到了问题。前者的问题是编程困难,互联能力弱,智能化不够,和AppleWatch差距太大;后者的问题是系统臃肿,可用性较低(这也是谷歌为什么单独推出AndroidWear的原因)。
另外,上述需求隐含了一个重要的智能需求:互联网化。也就是说,只有一个设备可以接入互联网,并和其他设备互联互通,才能称为智能设备,运行其上的操作系统才能称为智能操作系统。注意:这里的“智能”一词,来自于英文的smart这个单词,而不是intelligent。
来自智能设备开发商的需求描述:
期望有个新的操作系统。第一:继承,在单个节点核心部分可能改动不大。第二:满足新的需求,智能、互联、分布式、云端服务。第三:透明,隐藏传统操作系统的很多概念,甚至大部分概念。
来自操作系统开发者的需求描述:
去中心化的自组网功能应该是下一代OS的重要组成部分,现在的移动操作系统,离开了云几乎就完蛋了,自身就是个传感器收集器而已,智能还比较远。
操作系统的理论都可以高大上,但是从实用角度上说,工程化实现和成本不得不考虑,现在什么都丢到云上,云瘫痪了不考虑吗?云的数据泄漏不考虑吗?本群题目太大,但是饭要一口一口吃,什么是最重要的,最急迫的,性价比最合适的,这个讨论才有意义。
我觉得下一代智能OS,应该多考虑智能部分,不是仅停留在对智能设备的支持上,而是在应用支持,资源调度,安全管理等方面更加智能化。未来的OS是要支持机器人联网的啊。
所以我觉得下一代的系统应该是内核紧耦合而上层松耦合,并且可以和具体环境动态平衡的系统,包括自组网,云策略等等。不在乎一定要用某种系统,而在于实现和效率。
以后的芯片更加快,带宽更大,能耗更低,很多现在的问题都不是问题了,所以不能完全按照我们这些老家伙的经验来看未来的系统。
来自应用开发者的需求描述:
对于俺们来说,支持多操作系统的应用开发恐怕更实际些。
从来自高手的需求描述来看,我们大致可以勾画出新的智能操作系统之大概模样:
互联能力。新的智能操作系统要能够连入互联网,也能够通过蓝牙、WiFi直连等技术手段和其他智能设备互联。
安装和运行第三方应用的能力。这一点和第一点一起,形成了智能操作系统和嵌入式操作系统的本质区别。
能够和现有其他操作系统(Android和iOS)在应用层面上实现交互,而无需修改这些操作系统的内核或者系统程序,避免重新构造这些操作系统。
在我们新的智能操作系统以及已有的Android、iOS等系统上,可以用一种编程语言,一种模式来编程;甚至云端开发也被统一到一个框架中,这样应用的开发就会非常方便。
有好用的开发环境(包括IDE和虚拟运行环境)。
接下来,为了让讨论更加有目的性,博主将尝试给出一个更加详细的下一代智能操作系统的工程建议。在此之前,我们根据群友提供的资料,看一看AppleWatch中的操作系统如何和iOS设备交互:
AppleWatch的UI框架来自于iOS的UIKit,但做了一些修改以适应AppleWatch的屏幕。这对开发人员来说开发UI的效率会比较高。其他的非UI类库,我目前还没有发现AppleWatch应用不能用的iOS非UI接口。但因为功耗限制和其他原因,目前AppleWatch应用还是需要以iOS扩展的方式运行在iPhone上。
AppleWatch和iPhone的通信可分为两层。底层是物理链路层的通信,包括WiFi、蓝牙等;高层是应用层的通信。高层的通信在iOS上运行的WatchKit和AppleWatch上运行的WatchKit之间进行。(博主注:类似远程过程调用,RPC机制)。
本节将阐述博主所提出的下一代智能操作系统的合理技术路线,也就是从工程角度上讲,如何确保一步步迭代达到我们最初的设想目标。
周四(3月26日),“下一代智能操作系统开发讨论”群迎来了诸多活跃在开源领域的大侠,比如苏哲、陈皓(@左耳朵耗子)、梁昌泰(@挨弹腿踢梁昌泰)等。值得一提的是,苏哲、梁昌泰以及这个群里边的陶品、谢巍、陈昊等都是AKA组织的早期成员。
但不管如何,看起来JavaScript的发展势头不可挡。
要实现下一代智能操作系统,首先要遵循如下几个基本原则:
循序渐进,逐步迭代。博主提出的下一代智能操作系统之设想无法一蹴而就,必须结合市场需求循序渐进,逐步迭代。但有一个远期的宏观目标是必须的,否则容易走错方向。
开源和利用已有开源技术。为发展下一代智能操作系统,必须利用已有的开源技术,这些开源技术使用了不同的开源许可证,为了兼容这些不同的许可证,GPL许可证可能是最佳选择。
工程实践和前瞻性开发结合。为下一代智能操作系统发展一种新的编程语言是有必要和有意义的,因此,整个项目应该划分成为工程项目和科研项目两类。工程项目的参与主体是企业,科研项目的参与主体是开源社区和科研机构。
国际化。该项目必须通过GitHub、StackOverFlow等成为国际化项目。
在以上原则指导下,一种可行的技术路线如下:
第一阶段的目标是要在2015年年底或2016年初,开发完成针对低端和高端两款智能手表的从手表、手机到后端的完整系统,并初步形成下一代智能操作系统的雏形,并可供第三方为智能手表开发应用:
以JavaScript为统一开发语言。
以Linux和国内主持开发的某个RTOS为内核(笔者推荐RT-Thread或SylixOS),分别针对高端智能设备和低端智能设备发展针对智能设备的传统操作系统。注意,除了内核之外,要定义两种配置(profile)下的不同框架及API。后者是前者的子集。
以Meteor为基础原型做进一步的扩展(主要集中在建立于WebSocket之上的数据流及通讯机制),主要目标是实现跨平台应用开发和前后端统一的应用开发,这主要涉及Android和iOS两个平台。
智能设备上的传统操作系统,需同时考虑互联网以及P2P通讯环境(蓝牙、WiFi直连)下的底层通讯机制,并整合到Meteor的扩展中。
智能设备上的传统操作系统,要分别针对低端和高端智能设备发展JS扩展,前者不运行完整浏览器,后者可运行完整浏览器或者React技术支撑下的原生应用开发。
进一步发展生态,开始提供新的编程语言,进一步发展整个生态系统,并将其扩展到其他领域。
对编程语言的要求如下:
新语言应该针对下一代智能操作系统的抽象模型做专门设计。
该语言应该可以被编译或者翻译成JavaScript以便在浏览器中运行。
该语言应可直接编译成机器码运行在比较低端的智能设备上。
鉴于该项目的复杂程度,该项目需多方合作才能达到目标,其中的主要合作方有:
领导该项目的实体企业。
传统操作系统厂商(这里主要指实时操作系统厂商)。
开源社区。高校等科研机构通过开源社区参与。
如何平衡这些参与方的诉求以及商业目标,需要具有极高水平的规划师,这方面还是交给商业运营高手吧。
经过近一周的高手间的讨论和交流,我们基本确定了一个较为清晰的可操作技术路线。本篇博客也将结束(必要的修订还会继续),接下来该是实战了。但高手们的交流并未停止。欢迎其他有兴趣的群友撰写每日的交流总结,以供其他不在群里的人了解我们交流的成果。
第三节三谈智能操作系统
昨天(2018年4月25日)的最新消息,美国司法部开始调查华为……
作为旁观者,我不得不感叹:人们所犯的错误里边的大部分,也许就是这种常识性错误。人们有时候所说的“执着”,大概就是“明知不可为而为之”的胆量吧。
目前大家公认的操作系统定义,应该和百度百科给出的一样:
操作系统(OperatingSystem,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。
但这个定义需要做些调整。
我认为,运行在特定硬件运算平台之上,为上层应用程序提供了完备、自洽的程序接口,方便开发人员利用各种硬件资源开发应用程序的系统软件,就可以称为“操作系统”。
在上面这个定义里边,我强调如下两个概念:
操作系统必须提供完备、自洽的程序接口;
操作系统首要服务于开发人员(软件工程师)。
百度百科给出的操作系统定义,其实应该属于另一个术语“内核(Kernel)”。比如Linux操作系统,本质上是Linux内核外加一些基础的函数库、工具等形成的。基于此原因,自由软件基金会的RichardStallman就一直强调应该把Linux操作系统称为“GNU/Linux”操作系统,因为配合Linux内核工作的基础库和工具,是由自由软件基金会组织开发的,这个项目的名称是GNU。
一个操作系统的内核,会通过特定的手段提供一些接口,但这些接口相对原始,对开发者并不友好,而且不同的操作系统可能会提供不同的接口。后来大家想到一个办法,通过对原始接口做进一步的封装,可以让开发者不管用哪个内核,都可以使用统一的接口来编写应用程序。为满足这个需求,出现了POSIX标准。目前大部分的操作系统都遵循POSIX标准为应用程序提供接口。
但是,基于POSIX标准的操作系统接口仍然比较底层,对程序员的要求较高,一般需要使用较为低级的计算机编程语言(常见的如C语言)来开发应用程序。而后来出现的图形用户界面,由于各个操作系统厂家的实现差异太大,并没有形成统一的标准,这就导致了很多操作系统,就算针对同一种领域,比如同为桌面电脑操作系统的Windows和MacOS,在接口上也存在着巨大的差异。
而操作系统提供给应用程序的编程接口,其实是围绕操作系统形成的生态体系之护城河。
本文不打算谈芯片的生态系统,这里谈谈操作系统的生态系统。
就我来看,操作系统的生态系统实际上就是围绕操作系统对外提供的接口形成的。也就是说,不同的操作系统,本质区别就在于其接口不同。不同的接口,意味着不同的操作系统。或者说,接口就是操作系统的基因。甚至在智能手机时代,不同的操作系统提供了不同的编程语言。比如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系统,对应的交互方式从鼠标变成了触摸屏。
所以我认为,当计算机的形态(比如人机交互方式)发生重要变化时,才会给新的操作系统带来发展机遇。或者反过来讲,新的操作系统要为新的计算机形态,尤其是新的交互方式进行设计才有发展壮大的机会。其中深层次的原因是计算机形态(如交互形态)的变化,会使得操作系统的软件栈发生变化,进而会催生出新的应用编程接口。如前所述,应用编程接口则是操作系统赖以构建自己的生态系统的护城河。
所以国产的操作系统要想在竞争中胜出,就必须先他人一步去为新的计算机形态做准备。那么,新的计算机形态会是什么样的?其实不同于服务器、桌面和智能手机的计算机设备在近几年越来越多,比如智能音箱、智能门锁为代表的智能硬件,工业机器人,物联网,车载系统等等,而且随着各行各业信息化的发展,会有更多不同于传统计算机形态的产品出现(最具革命性特征的应该是量子计算机),而这就是国产操作系统的机会所在。
再次强调,针对服务器、桌面和智能手机的通用操作系统领域,国产操作系统不会有任何机会。如果您还在持续投入,那最好尽早放弃。
LiteOS是华为第一次做操作系统,这个操作系统未来怎么样,不好说。但从旁人看来,LiteOS和华为的体量有那么一点儿不匹配。毕竟RTOS这个东西,全世界前前后后出现过太多了,据说光开源的RTOS就有两千多个,还有完全开源免费的,比如FreeRTOS。LiteOS的独特性到底在哪里?如何迎合开发者?还需要华为仔细思考。
“2017年9月27日,阿里巴巴发布全新的AliOS品牌及口号,面向汽车、IoT终端、IoT芯片和工业领域研发物联网操作系统,并整合原YunOS移动端业务。”这是阿里巴巴对AliOS的官方定义。
从原来的YunOS转向AliOS,是阿里巴巴在操作系统领域的一个重要变化。这说明了一点:原来兼容Android为目标的YunOS彻底失败。从我的判断看,AliOS一下子要支持汽车、IoT终端、IoT芯片、工业等这么多领域,有点勉为其难。从其市场动作看,AliOS最关心的还是车载,也就是车联网。
SylixOS属于传统RTOS范畴,主要市场目标是替代VxWorks这个老牌的嵌入式实时操作系统。SylixOS在这几年取得了比较大的发展。2015年的时候,大概十几个人的团队,目前已经一百人了,而且还在很多二线城市设立了分公司。SylixOS的发展得益于军工、航空、航天等领域的自主可控需求,通过来自军工和行业客户的各种开发和定制项目,养活一个二百人的团队都是可能的。
RT-Thread团队的问题在于,如何围绕这个操作系统构建自己的生态系统和商业模式。
DJYOS(DJY是“都江堰”的拼音首字母缩写)是一款主要应用于单片机的操作系统。以前,单片机的开发非常原始,而DJYOS则为单片机应用提供了一个独特的操作系统,使得单片机上的开发变得容易起来,同时还能兼顾非常好的实时性要求。
OPENTHOS是个很有意思的操作系统。这个操作系统的目的是为传统的电脑(台式机或者笔记本等大屏终端设备)打造一款桌面操作系统。和大家都知道的红旗Linux、中标Linux等不同,OPENTHOS在大家都熟悉的Android系统基础之上进行开发。
一般人不太明白我上面这个简单问题的深层次内涵。这里简单解释一下。Android是谷歌控制下的智能手机操作系统,现在大部分人每天都在用。虽说Android是开源的,但开放的源代码不一定是最新的;另外,Android版本之间的API差异很大。应用开发者为Android开发应用,都会跟着Android最新的版本走,首要目标是支持好智能手机上运行的Android版本。这就为OPENTHOS上面可以跑Android应用埋下了一个重要的隐患。实际上,所有号称可以兼容Android的系统,最后都失败了,YunOS如此,Elastos亦如此,OPENTHOS也不会例外,更何况OPENTHOS还试图同时兼容Linux上的原生应用程序。
这几年,民间也有高手在独立开发操作系统(内核),其中比较活跃的有LMOS和HOT-POT。
LMOS由彭东独立开发,主要支持x86架构,近期开源了支持ARM架构的LMOSEM。
HOT-POT正在由谢宝友独立开发,目标是实现一款工业级的服务器操作系统,尚未正式面世。据谢宝友介绍,HOT-POT还在起步阶段,这是作者“一份20年的情怀,也许还有一份淡淡的无奈,或者还有一点点不切实际的幻想”。
对这类个人发起的内核项目,除了口头上的支持之外,我没有其他任何异议。毕竟Linux最初也只是Linus的个人爱好而已,没想到最后变成了全世界最牛的操作系统内核。不过我本人仍然有一些建议给他们:
不要重复前人走过的道路,要做,就做前人没做过的事情,走前人没走过的道路。比如最近RISCV架构很火,有精力有愿望有情怀的独立开发者,能否针对RISCV架构设计一个全新的操作系统内核?
很明显,中兴被禁运的事件将为国产芯片、操作系统等基础软件的发展带来契机。我本人祝贺还活着的操作系统从业者,尤其是仍然坚持自主操作系统理想的创业者。
然而,契机只是契机,能否借机发展壮大,实现人生理想,进而为国争光,则是另外一回事儿。
第四节四谈操作系统之国产七宗罪
本文所说国产操作系统,特指国产桌面操作系统。
这个问题有点敏感,会动很多人的奶酪。但这个问题不得不谈,因为在错误的方向上,我们不仅仅浪费了大量的资金,还浪费了二十年时光,而参与其中的为数不少的年轻工程师,把青春献给了这个“事业”。他们或彷徨,或失望,然时光如梭,黑发已成白头。
2000年左右,中国突然冒出来一批打着国产操作系统旗帜的公司,其中笔者曾供职过的中科红旗最为出名。后来,陆陆续续又出现了中标、普华、中科方德等公司。简单统计下,大概有二十多个公司先后以开发国产操作系统为业务开展经营活动。这些公司,有些已经折戟沉沙退出历史舞台,比如BluepointLinux、TurboLinux等;有些苟延残喘、艰难存活,如中科红旗,几年前的员工讨薪事件以及该公司和中科方德之间的恩怨,一度成为人们茶余饭后的笑谈;其他公司能坚持到现在还没有关门或者改行的,就已经是很不错的结果了。根据最新的统计,目前这个圈子(我不太愿意把这个圈子称为“行业”)里边仍然有八家公司。比较有意思的是,后来这个市场还出现了几个民营的软件公司,最为出名的是武汉的深度科技以及广西的一铭科技。
这么多公司搞出来的以Linux为基础的国产操作系统,其实就是桌面操作系统,其主要的目标市场是政府以及一些要害部门或者国企的办公使用,用来替换掉微软的Windows。普通消费者和一般的企事业单位,根本就没有需求去使用基于Linux的桌面操作系统。一来,现在买电脑都预装了正版的操作系统;二来,盗版的成本仍然很低;三来,国产操作系统上没有那么多可以用的应用程序或者游戏可以满足普通消费者或者一般企事业单位的需求。
既然如此,为什么还有这么多公司前仆后继投入到这个行业?这其实很容易理解,这些公司主要靠政府的财政补贴或者扶持资金活着。
一开始,一些有强烈操作系统情结的老专家认为中国需要一个自己的操作系统,所以游说政府,说用别人的操作系统不安全,我们要用自己的操作系统,政府信了。然后就通过各种手段给这些公司输血,比如“核高基”项目,比如各种强制性的政府采购。于是,有背景的公司就很容易拿到国家撒的钱。但是,钱来得太容易就会有问题。这些公司没有几个是真心实意做操作系统的,勉强通过验收就行。这样一来,二十年过去了,国家该花的钱花了,该出的政策出了,没有一家公司从竞争中胜出,没有一家公司可以站出来跟Windows拼一拼市场。如此做的结果就是,这些公司基本都成了向政府要奶吃的巨婴公司。
上个月,武汉深度科技的CTO王勇离职,在这个圈子里边引起了一些波澜。深度科技是个纯民营公司,一直在做DeepinLinux发行版,有一定的用户量,但坚持八年,并没有达到他们理想的目标。虽然王勇的离职有各种传说,但我认为八年的付出,并没有带来预期的效果(公司层面也好,个人层面也好,都是),这才是王勇离开的本质原因。
可以这么说,二十年间,我们在桌面操作系统领域并没有多少建树,用“裹足不前”来评价算是客气的了。
那么,国产桌面操作系统的问题到底出在哪里?
最根本的原因是找错了赛道。
国产桌面操作系统这个需求并不存在。因为桌面操作系统的霸主早在20年前就已经有了定论,微软Windows的地位无人撼动。就算在美国,也没有公司或个人说我要创业做个操作系统来替代Windows,因为这是不可能的事情,如果你拿这个故事去找风险投资,没人会愿意出钱支持的。在我们国家,这个需求是因为一些老专家的个人情结,硬生生给创造出来的。如前所述,国产桌面操作系统对应的市场有,但不大,不值得花这么大的人力财力去开发一个所谓“自主可控”的国产桌面操作系统。
再谈谈方法问题。如果真的想要为政府专门做一个“安全”的操作系统,我们有很多种办法,比如:政府可以组织科研机构开发一个自己的加密文件系统,然后和操作系统供应商谈判,要求他们支持这个加密文件系统;类似地,我们可以将政府的涉密电脑,通过专有的私有网络连接在一起,或者使用私有的加密传输协议等等。
现实情况是,政府并没有采取类似的方法。相反,我们国产的操作系统,也并没有在解决安全方面有多少的研究和建树。比如,iOS在设计之初,为了提高系统的整体安全性,就让各种应用运行在自己的沙盒里边;试问国内的桌面操作系统,有哪个做了类似的设计?实际情况是,国产操作系统使用的仍旧是Linux+XWindow这种三十年前的系统架构,而大量的开发力量被安排在了美化界面、硬件兼容性等脏活、累活上。
现在仍然为国产操作系统奔走呼吁的老专家们,大多在上个世纪80、90年代时达到了人生的顶峰。他们经历了微软从小到大,从DOS发展到Windows,然后一骑绝尘,把其他软件公司一一打倒的整个过程。与此同时,中国的软件公司居然没有一个发展起来的。这未免让这些老专家们耿耿于怀,于是,要有国产的操作系统,就成了他们余生的追求。
市场已经变化,他们看不见。Intel的战略,从联合微软转向了支持开源的Linux,从Wintel联盟转向了Lintel联盟。而他们还将Wintel联盟作为他们的假想敌。
国产操作系统厂商的研发水平,他们不愿意深究。大量粗制滥造的国产桌面操作系统,仅仅做了几个设备驱动程序,做了一些本地化工作,抄了几个Windows或者macOS的界面,就觉得“国产桌面操作系统的发展喜人,达到可以用了的水平”。真实的情况是,几乎所有的国产桌面操作系统,都会在交付到用户手上时,要么被扔到一边应付检查,要么被卸载用盗版Windows替代。
类似地,专家们利用自己的话语权奔走呼吁,带来的竞争恶果和人力资源浪费,他们视而不见;技术在发展,操作系统的竞争战场早就变化,他们仍然痴心不改……
这和臆想自己带着千军万马,身披钢盔铁甲,手握坚盾长矛,把风车当成情敌去战斗的堂吉诃德有何区别?
如前所述,当我们还在苦苦发展国产桌面操作系统的时候,操作系统的主战场已经发生变化。2007年,苹果公司和谷歌公司,先后推出了iOS和Android系统,全面布局移动操作系统领域,等我们回过神来,发现我们又一次落后。那个时候,我们的老专家和巨婴企业们还在为了国产桌面操作系统那点“市场”在努力。而他们一直视为对手的微软,其战略也早已经从桌面转向了云计算和人工智能。
我很佩服他们二十年来的痴心不改,但在笔者看来,他们的行为无异于刻舟求剑。
政府非市场的补贴行为,助长了这个圈子的歪风邪气,大量华而不实、粗制滥造的项目存在,其目的就是为了获得政府的补助资金。因为利益分配不均,某些企业之间甚至出现互相撕逼的情形。最终的结果是,钱花出去了,政府也好,整个产业也好,并没有得到想要的东西。
FUD,是Fear、Uncertainty、Doubt的简写,分别是害怕、不确定和怀疑的意思。他们充分利用了“自主可控不一定安全,但不自主可控一定不安全”这句话,大量散播FUD,让没有多少实际价值的国产桌面操作系统以高达千元的单台装机许可费卖给了某些部门,这个价格,甚至超过了Windows10的零售价!
另外,他们为了忽悠政府,还把桌面操作系统称为“通用操作系统”,好像做出来之后在哪儿都能用一样。看看,稍不留意,就会丢进这个圈子设下的圈套里边。其实,压根就没有什么通用操作系统!
他们还放大桌面操作系统的目标市场,希望所有普通消费者和一般的企事业单位都能使用国产的桌面操作系统。现实是,消费者绝对不会因为政府的一句话而改变自己的选择,而这个圈子所能影响的范围,只有政府或者一些要害部门。他们夸大市场的唯一目的,就是忽悠政府加大投入。
2018年,深度CTO王勇的离职事件爆出时,我曾问过深度的工程师:“这八年来,你们发展了什么核心技术?”他们回答:“桌面”。我又问:“桌面是拿什么开发的,内核是Linux,基础设施是XWindow,框架是Gtk或者Qt,这其中哪个是你们发展的?”对方无语。
可悲的是,笔者之前提到的这前前后后二十多家国产操作系统厂商,没有一家以发展生态为目标,扎扎实实积累自己的核心技术的。他们要么使劲模仿Windows,要么通过WINE这样的模拟器兼容Windows,要么兼容Android……
甚至连他们自己提出的安全问题,也没有哪个厂商提出来一个好的解决方案。
2000年之时,Android、iOS还没出现,Linux刚刚传播到中国,如果方向正确、方法得当,十年后,我们还可能在某个方面跟美国一较高下。但国家大量的补助被花在不切实际的“通用”操作系统之上,大量人力、物力被浪费在毫无价值的项目之上。于此同时,我们的专家并未给我们指出一条更加正确的道路。
可以这么说,过去的20年,是国产基础软件“遗失的”二十年,国产桌面操作系统这个圈子起了很大的反作用。想想就知,我们压根就不应该寄希望于“刻舟求剑的堂吉诃德们”!
那些现在还在忽悠政府要不惜血本发展国产通用操作系统,且要求政府“允许大面积”失败的人,应该被“关进笼子”面壁反省。
下面谈谈新操作系统的机会。
新的操作系统,往往在计算机应用到新的市场领域时出现。比如,原来计算机主要用在军队、科研等领域,后来出现了巨大的个人电脑市场,而这个市场让微软通过MS-DOS赚到了第一桶金,之后微软顺理成章地开发了Windows系统并最终成为桌面电脑操作系统的霸主。后来,计算机结合通讯技术应用到了移动通讯领域,出现了面向消费者的智能手机,而这一新的市场催生了iOS和Android操作系统。再比如,互联网的兴盛给Linux以发展机遇,使其成为了互联网时代名副其实的服务器端操作系统之王。
历史的规律总结起来大致如此(当然这里省略掉了市场竞争,提到的基本只是最后胜出的操作系统)。从技术上讲,出现这一规律的深层次的原因是,当计算机技术应用到新的市场领域时,计算机系统的交互形态或者计算环境会发生相应的变化以适应这个市场的需求,这会使得操作系统的软件栈发生变化(一般是往上层堆叠),会催生出新的应用编程接口,而应用编程接口则是操作系统赖以构建生态系统的护城河。
所以,新的操作系统要想在竞争中胜出,就必须先他人一步去为新的计算机应用领域做准备。
其实,对这几年计算机技术的发展稍有了解的人都会明白,计算机正在快速应用到各个领域。看看这两年层出不穷的新名词或者新缩写就知道了:AI、VR、大数据、物联网、工业互联网、智能机器人、边缘计算、区块链……
这些技术的出现,将带来人机交互方式的巨大变化:人们将通过更加复杂的方式感知计算机的输出,如语音、全息、裸眼三维等,而计算机可通过更加综合的方式获得来自人类的输入,比如语音、手势、表情、脑电波等。同时,计算机的计算环境也会发生重大变化:除了使用互联网/移动互联网、无线网络、云计算等基础设施之外,还会催生出自组网、标准化的人工智能服务接口等新的网络形态或计算环境。
新的操作系统要面向这些新的应用领域及计算形态进行设计,如果我们恰好有个好的设计被大家看好,被很多开发者采纳,那新的操作系统就可能在市场竞争中胜出。反过来讲,假如在某个市场领域中,没有玩家做操作系统,那只能说明这个市场太小,不值得花功夫做一个操作系统。
物联网就是一个足够大的市场,或许会成为下一个比肩个人电脑或者智能手机的大市场,巨头们已经进入并布局这个市场领域。2015年间,微软、谷歌、华为等大公司纷纷发布了自己的物联网操作系统,显然是看到了上面所说的趋势并积极布局以抢占先机。
然而,三年过去了,华为的liteOS也好,谷歌的AndroidThings/Brillio也好,微软的homeOS也罢,都未有大的发展。这未免会让大家产生怀疑:物联网市场是否还不成熟?物联网市场是否会真的有那么大?
笔者看来,造成这种情况的原因有一部分原因是因为物联网的碎片化:物联网的产品庞杂,应用范围太广,几乎无法标准化描述。比如,有的物联网设备只有一个蓝牙芯片,而有的配有WiFi、NBIoT甚至4G;有的物联网设备强调低成本,内存有限,只能运行简单的RTOS,而有的带有可触摸显示屏,运行的是复杂的Linux系统。如此等等,这给开发其上的操作系统带来了难度。
除此之外,笔者认为还有一个原因,就是这些巨头的布局仍然没有抓住本质。面对物联网应用,我们不能按照以前针对个人电脑、智能手机那样去设计操作系统,而需要从更高的层面去提炼物联网应用领域中的需求,要面对这些需求重新设计操作系统。
[修改于5年6个月前-2019/06/0804:03:55]
扫描最新重大科技成果聚焦科技事件深度细节
1.公式行内显示(inline):请使用$....$或\(....\)包裹代码
2.公式独占一行显示(display):请使用$$....$$或\[....\]包裹代码