【中云网 消息】5月29日,以大力发展并推动北京科技原创能力为宗旨的“2013中国·北京(国际)开源大会”在北京新世纪日航酒店隆重开幕。本次大会由北京市经信委指导,中国软件行业协会主办,中云网承办,并得到了中国云产业联盟、中关村云计算产业联盟、天云趋势等单位的大力支持。大会以“开源中国 原创北京”为主题,通过丰富前瞻性的思想盛宴,力争让北京在世界科技发展新趋势下占据主动地位。
上海科泰华捷科技有限公司董事长陈榕 【中云网 配图】
上海科泰华捷科技有限公司董事长陈榕参与此次会议,并做主题演讲。他分享了他们公司做操作系统的历程,重点分析了在开发过程中遇到的困难及解决方案。
以下是陈榕的演讲全稿:
我2000年回到北京做了一个公司,这个公司只有一个目标,就是做一个操作系统。在座的很多人在讲openstack,我讲讲我对这幅图的理解。我2000年回来创业,走过一些弯路。姜处长给过我们一些支持。我们做过两支完整的手机,做过一一款电子书。从内心、操作系统,全部是我们在中国一行一行代码写出来的。07年底、08年初很快碰到了安卓和IOS。所以我们当时的销售并不理想。这一款产品是我们最新的一个操作系统的界面。这个代码去年11月开源,我们公司投入了50个人全职做这个事。做完的代码全部放到了公开的网站上。社区上有五六十个人,因为他们看我的微博,他们去那儿看,你们真有源代码吗?可是那些人还没有真的投入到开发过程中。我也希望通过今天的推广,大家看到这个界面,前半年真的没有什么界面。让外人来参加也很难。但是现在我们还是希望对一些老师和同学起一些启迪的作用。
这个操作系统,宏观一点讲,刚才那个界面我们基本能做到把安卓的系统跑起来。我原来曾经写过我自己设置的内核。有机会对内核有希望讨论的人,我希望分享一些教训。既然安卓的可以跑起来,下面还是UINX,那你做的这个有什么用?你跟安卓怎么比?如果大家想,我这个手里拿着一个安卓手机。安卓也好,IOS也好,现在都只做一支机器。这支机器一旦定,它的屏幕大小、CPU型号、内存跟着设计这支硬件、这支机器已经全部都定好了。如果我给大家出几个题目,同样希望大家跑安卓,我在旁边加一个分离的硬件。现在微软、IOS都有一些蓝牙键盘。或者WIFI摄象头。分离软件,也有一些人会说我们现在有物联网。在一个SERVRE边上布了很多传感器。电影院在这儿,家里还有两个电脑,想形成这样一个系统。如果我们用安卓的JAVR系统来做。你为了写这个摄象头,这儿JAVA就要继承,你那儿写一个ME。问题是如果我是一个分离软件,我是一个分离的蓝牙键盘,或者是一个分离的WIFI摄象头。这个分离元件里面会跑一个TCG。它连MMU都没有。
这个时候我怎么样从JAVA继承呢?如果我要想做一个我们认为,作为学术来讲我不希望有这个词,它就是一个双耦合的分离系统。这么多的CPU看成是一个系统。我们把它叫做云,我们认为这是一个家庭云,云这个概念其实不好。但是在大忽悠的社会环境下,我们还是把这个东西叫家庭云。现在很多人讲的云是在服务器端。这个时候我们把一些云的技术拉入到创意端。这个家庭是多CPU,而且是双耦合的。这个CPU可能跟那个CPU不一样。这是一个双耦合异构系统。第二维中间,如果说我有一个云作为一台计算机的话,上面有没有可能跑多个虚拟机呢?曾经十年前,大家一个PC就跑一个操作系统。互相排他。所以很快形成了一个正反对。让微软达到了95%的市场占有率。当时苹果的市场占有率是2%、3%。LINUX市场占有率也是非常小的。
这个时候有人说,我们能不能做一个手机核?我们能不能打进PC市场?这个时候的匹夫之勇现在想来是没有什么用的。这是一个新的变化。我们能在一架物理电脑上跑出N个虚拟机。如果是为了项目兼容,我可以在虚拟机里面再跑windows。但是我为了创新,我能不能做一个比较创新型的OS?这就会给OS的创新带来一个新的机会。我们操作系统的研发,我85年开始做UINX的内核,可是到今天为止,我认为OS最后的创新力。今天大家很少有人在讨论操作系统如何创新了。
操作系统我讲的是两个方面,一个是对硬件的图象,讲的是内核。比如说抽线程内核。当时有一个点A文件,ESC,后来又出来了SO。操作系统的第一方向是抽象硬件。第二个更重要的目标是怎么运行软件。比如说现在我们看到MIGO,看到安卓,看见火狐软件,所有这些我们大家公认的,有人说这些OS各有各的不同。不管你是在这两个阵营里持哪个态度。上面的这个演化现在是层出不穷。底下的内核基本稳定。这个结论还是公平公正的。如果上面要做一些新的创新。我拿一支很强的手机,比如两核、四核。我上面拿一个手机拨号就可以拨给倪老师,他打电话就可以打给我。这两个手机通过一个虚拟的网络空间,这个手机很快可以找到他的手机,很快形成分布式处理,或者是协同的外部服务。我们两支手机是没有办法攻击中移动、中电信网络的。这两支手机不知道它底下或者周边有多少DNS地址,如果上面的虚拟机都知道DNS地址,大家现在的网络安全是岌岌可危的。如果任何机器,任何一个360装过的肉机都可以向一个网站瞬间发起一个DDS的攻击,这个网络绝对是不堪一击。可是如果帐户的虚拟机根本就没有DNS地址,只要通过一个手机号就可以找到另外一个计算机。这样的做法是没有办法攻击网络的。
在这台虚拟机的基础上,我们是有创新的余地的。第三维空间,就是大家认为现在的S3、云盘,或者个人云、公共云,不管怎么样,存储被拉到了另一维空间上去了。本地的硬盘变成一个缓存。程序能跑起来。曾经我们上学的时候,我上大学的时候还没有DOC。后来我去美国才有DOC。我们现在有一个cloud,比如说叫微软的SKYDRIVE,或者苹果的icloud,现在这个icloud我们都放的DATA。这个云盘里能放程序吗?这个云盘里如果放程序能跑吗?我们能不能做出一个cloud。这一维空间,多个CPU、多个虚拟的空间,这三个空间都是安卓现在还起码比较弱的地方。在这三个空间上如果补足,上面还跑安卓。不限定一个FREMOR,还可以访问其他的FREMOR。
这是云盘的空间。这是讲的一个家庭云上多PCU,或者物联网上多PCU的空间。这是讲的云盘里的空间。没有划出来是多虚拟机的空间。这张图是我从微软的网站抄的,这就是win8的架构图。大家今天如果看到win8。就会知道它有两个桌面,一个是传统的Desktop,一个是Motro style。现在它把一个内核又可以做手机,又可以做服务,曾经是好多个内核,所以微软虽然是游戏机内核。它统一完了以后再上面跑了一个双簧蛋,在上面跑了两个操作系统。如果上面跑了两个所谓的中间件或者什么东西呢?它实际上是两个。这一部分就是传达微软器C++,他对兼容做的相对完美。这一唯绿的,他现在叫windows win3 2。所以winRT现在只做两件事,它的平板、它的变成的CRT叫winRT。对软件支持是这儿,或者是这儿负责的。
这个风格是windows变成还是新的RT编程,这两个编程是截然不同。我们今天很多人讲OS都是讲的在这个层面的技术的改良。在这个地方API从这儿到这儿,基本上就是把那个全废了。这个RT有什么用?就是为了在那个三维空间上进行拓展。然后能让三类语言互通互联。在这个时候如果我们用技术语言说,这儿就应该叫java,java有一个东西叫CNI,通过人写,压站调到C代码。在这个时候,已经没有JNI了,它可以直接从.net调到C代码,是不通过CNI的,这句话是非常重要的。JAVA从发明到今天,第一句口号就是,run one,run averywere。这个挑战今天反过来制衡了英特尔。英特尔希望做手机,英特尔希望这个手机跑安卓。可是我们有多少的安卓程序是类似于游戏引擎用了JNI呢?搬不到X86上。如果我们做一个系统没有JNI。能不能run one,run averywere呢?当时java发明的时候是装在头端的,往机顶盒装是要PUSH。所以脑子一想我应该放中间代码,我放一个JAVA加thintime,这样讲大家觉得对吗?对。反过来讲。如果我现在有一个苹果机。我现在要买软件,当年是出来一个光盘,或者一个机顶盒往前PUSH。你总想说我出一张光盘,我这一张光盘里面搁的程序或者是M,或者是X86,所以微软所有的机器出来都是 X86,最后导致了其他的CPU都灭亡。92、93年的时候,NT放在各种CPU上,那些CPU全都死了。因为这张光盘是X86还是M?但是今天我们反过来想,我如果是一支手机,我是上程序买软件,我不是做一张光盘买软件。
我如果是买软件,我手机发出的请求。手机说我去安卓商城买软件,安卓商城第一件事是知道我这是什么手机。他的商城做的第一件实是把C代码已经编译了N份。我在这支手机上发起请求购买的时候,下面的正好是我CPU下面的单子。这个结论导致了微软回归RT。RT就是C编程。在这个位置上放弃了.net编程。如果一个公司是一个五万人的公司,如果一个团队是一个三千人的团队,不写应用,只说操作系统。把三千人的团队废了,再起三千人。谈何容易?
结论是,如果这儿全是java,我们用C写有没有基础?所以我希望我们代码就设在网站上。希望大家参与。这张图是抄的,故意抄成跟那个像。这是JAVA这是C编程。就是故意画的类似就对了。我们做的就是安卓的runtime,我们希望在这儿别老说中国没有原创技术。
做到火狐的APP,可以跑一些。安卓的APP,可以跑一些。我们希望经过半年的努力,希望能百分之百达到这个。
曾经我们做windows有A盘、D盘,这个东西我们没有完全实现,但是这是我给我们团队提的一个目标。如果我用一个DNS名字。我在这儿可以写。假如说1921.6.8.0.1。我是不是可以在这儿写一个手机号?是不是可以写DNS唯一的地址呢?他在这个位置是不是全球唯一的?他全球唯一的两个杠,就是存盘。这两个杠是86年,画一个杠是本地硬盘,画两个杠是Root。后来有人在这儿加了一个HTTP。我的E盘,是USB吗?是IDE吗?是PCIT吗?都有可能,又都没有可能。我只想说明一个问题,我们在设计操作系统的时候,不管设计windows还是unix,一定要懂得程序。懂什么叫线程、什么叫锁、什么叫驱动。上面那个东西如何编程,就是研究生课,你可以发散的。你可以设计成一个安卓的OS,可以设计成一个windows os。计算和网络是正交的问题。他在设计计算的时候,绝不跑这个网络。在设计网络的时候绝不跑计算。这是基本原则。这儿写一个HTTP,实际上是一个历史的错误。
这张图是我2000年回国创业,人家老说我给我公司提一个目标,2001年左右画的。所以也有人说陈榕是敢拿一个PPT讲十年的人。这就是我们公司的目标。这张图,浏览器,现在我们在一个计算机上给一个UIR,一点机,这个数据可以从全球各地到我的电脑上。这件事给大家带来了多大的影响。整个浏览器给人类带来的影响。程序也是数据,程序能不能放在全球的任何服务器上、任何品牌上?通过一个点击能够下到每个电脑,马上执行。这件事能不能做到?这个目标我95年带微软IE做十号运用,当时我们目标是把操作系统和浏览器融合。95年有多少人说NECKEEP要打败微软。这个梦想到今天仍然没有实现。但是有许多人还在为此孜孜不倦的努力。
如果程序能从网上下载,如果程序能在云盘上一点。这个程序一定是打包的。不可能是一个world,500兆,一张光盘就拿下了。这个时候定义了一个原则,软件即服务。软件即服务是99年我在微软设计当代的时候我们组提出来的。后来考证,说是德克萨斯教授提出来的。但是我们在讨论的时候不知道德克萨斯有教授。
DLL的概念是91年出来的,DSO的概念是97年出来的。在SO这件事上比windows晚了六到七年。对操作系统来讲,它的DLL跟着在no。反正是要打包。它不可能像一个world,因为world下面有输入法,有排版,有中文、有藏文。如果从云上来呢?它得按需过。按需过来,他每一件事过来了。或者把这个软件包拉过来到本地跑,或者停留在那个机器上跑,都可以。但是这个东西看起来不是一个完整的应用,他就是一个输入法,就是一个排版,就是一个广告。这个东西就叫服务了。所以服务的假设是从DLL来的,从这个软件打包来的。如果这个东西拉不过来,只能在那个服务器上跑,我们管它叫WEB服务。但是它来过来呢?因为电脑可以跑很多信息。如果我拉过来一个DLL,它的数据产品不对。这个时候它会不会有病毒?拉过来以后,它敢跑,这是一个试金石。如果这个时候从云盘拉到这儿,就像我们创造一个进程一样,连硬盘带通讯,带进程,全部拉在一个虚拟机里。他跑的病毒就染不到别人了。他提供一个输入法,正经的短信应用要应用到这个输入法。短信跑在这个虚拟机,软件跑在另外一个虚拟机。如果跨语言的时候,我们没有JNI,可以自动生成这个适配。同理,我们可以自动生成跨语言的UPC。这个网络是远在天边近在眼前。这个网络的协议全部是动态生成,根据你的远近动态生成。
现在讲打包技术,这个技术类似于当年的DIL描述语言。这个描述语言当年在九几年曾经全盛过,后来败了。败了有几个原因,它的计算,如果我打一个软件包,正向同步调异,正向异步掉异,当年的反向异步掉异都处理的不好。有了这个,红的部分是人写的,黑的部分是计算机生成的。是标准的C++。生成一个DLL,这个DLL是在全球范围内可以检索、可以链接的。
刚才生成一个软件模块了,就可以写一个C代码去调译那个软件模块。我在89年的时候,我们做过一些DTL的开源软件,爱动手的人一般爱去显摆显摆自己,去开发。是骡子是马把程序拿来遛。我们现在讲的是面向服务的程序设计。这样的操作系统来配合这样的编程。这个是JAVA程序代码,这个JAST是没有JNI的。Using Components,没有JAVA到C的生成,哪怕再简单,一行也没有。
讲讲基本的道理,一个二进制构建就是一个黑盒子,就是一个编译好代码。我们为了要做家庭物联网。那边的程序跟这个硬件本身打包,如果一一对应,硬件里面的bers烧死了这个代码。硬件即服务、软件即服务,从用的人的角度讲,看不出来那是硬件还是软件。那支摄象头是直接挂在我的电脑上还是又连到了另外一家电脑上挂了摄象头。我这边说你谁提供摄象头的服务,我看不出来你有多远,多近的。我们致力于的目标就是,将来在物联网上有这么多的硬件,我们对应的软件打包的解决方案是什么呢?软件打包完了,烧死在那个硬件里。那个硬件一插到我电脑上就能用了。在windows技术下,一插上一个终端,你不知道怎么用这个,解决方案就是这样。大概齐。
所有原来的打包方案最大的就是事件的回忆,你调了这部分,一定要想起它才调,但是构建的服务一定不像上面,上面写一个死循环就把它捏死了。事件往回仍,一定扔给runtime。这个时候一定产生一个新的平台的概念。
我做一个摄象头,如果跨终端怎么做集成?一个公司给我写一个鸡肋,另外一个公司不看,我继承完了。这就是那些理论的事。操作系统要配合这些东西。他那个远程调译代码、配合代码都是动态生的。都是在这个程序运行时动态插入的。这些代码都是二进制的,这些代码都是跑的。
你要动态的切换协议代码,我们要用有了这么一套C++的,这一套就是C++,用了这些基本的元素,我们现在,安卓有一个类,我有一个类,他有一个函数,我有一个函数。他有三个参数,我决不有四个。用这一套技术,整个把安卓的系统山寨一遍,山寨完了百分之百考他的JAVA应用。这就是runtime的力量。如果今天说我们在中国发明出了安卓runtime,那是世界第一个。