中国能不能写出操作系统?

论坛 期权论坛 study     
匿名的用户   2019-5-26 11:22   3938   5
中兴的下场,引发一大波的讨论,有人说中国现在缺芯少魂,芯片需要工业基础,但操作系统呢?国外大学生写出了Linux操作系统,中国能不能写出中国版的Linux呢?
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
热心的回应  16级独孤 | 2019-5-26 11:22:04 发帖IP地址来自
谢邀,我确实想在这个事情上说几句。
针对题主的问题:“中国能不能写出操作系统?”,这个问题本身很宽泛。以飞机作类比,从纸飞机、玩具飞机、消费级无人级,再到飞豹,J10,J11,J20,再到B2、F22、F35等等。如果你问“中国能不能造出飞机?”,答案肯定是可以造的,但造出来的飞机可能跟别人有20~50年的差距。同样的,“中国能不能写出操作系统?”,答案也肯定是能。因为一个几百几千行代码的micro tiny os kernel你也可以说它是“操作系统”,一个像Windows这样光代码就有5000万行,全球用户数十亿,拥有巨无霸生态的也可以称为操作系统,中国肯定产生过很多micro os kernel,tiny os kernel。
所以借这个题目,我们不妨更进一步,考虑另一个问题:“中国能不能写出一款比肩windows/mac os/linux/android,获得商业上巨大成功、广泛应用的操作系统?
不能给出肯定回答,也不敢否定。但我倾向于回答“现阶段不能”。
了解一下操作系统史,或者上过大学操作系统课程,你会发现,很多操作系统原型,或者设计思想,都来源于学校或研究院,比如minix/linux/bsd等等。实现一个操作系统是一项纷繁复杂的工程,涉及cpu架构指令、数据结构、算法、编译原理、内存管理、进程管理等等内容,而且在此基础之上,还需要各种各样的应用软件:数据库、工程、设计,有了这些软件操作系统才会有人用,有人用了才能集广大人民的智慧开发更多的软件,反过来促进更多的人用,形成良性循环。
当今,windows/mac os/linux/android已大行天下,形成了一个比四大洋还深的护城河,从头开发一个能比肩这些操作系统的竞品,真比登天还难。
所以,要做这些事情,需要花费巨大的人力、物力、财力。这不是几个人的意志力就能搞定的事情,而是需要整个社会达到一定阶段。
中国的哪些群体、部门、企业可以有资源开发操作系统呢?首先说企业,企业家都是逐利的,我不认为企业愿意投入五年的时候,花费巨大的代价去搞这么一个看不到前途,看不到效益的事情。再说研究院,中国的众多研究院,除了医学,都在往高大上不接地气不着调的路子走,所以我不认为他们会去做这个事情。
然后就是高校,我想重点说一说高校。
[h1]【我的写os内核经历】[/h1]我高中开始写代码,从2008年读本科,当时受到倪光南关于“中国人要有自己的操作系统”的感召,想写一个小型的os内核,然后在学校里搭一个svn服务,把os内核代码放上去,采用校内开源的方式,逐渐去完善这个os内核。相信每届学校都会有牛人,把牛B的思想加进来,最终走出一条自主操作系统的路。
大学学生是最有精力、资源做这个事情的人。他们有大把的时间、精力,而且学校会教授操作系统、数据结构、算法、编译原理、数据库等基础课程。如果学校有一个自己的os内核,在上课的时候结合这个os内核给学生讲课,效果一定非常好,让学生们能亲身实践这些比较“虚”的课程,一定会吸引不少人参与这个项目。最后通过长期的工程管理,会让这个操作系统逐渐成熟丰满,并且在某一时刻走向工业化。
但是,我想说但是,等我开始做这件事,才发现,在中国的大学,懂编程的人非常少,既使计算机学院,也找不到几个能写代码的,更不容说能写os内核的。但我找了8个技术稍微好点的同学,我们每人分一块领域,比如io管理,内存管理,进程管理,研究linux内核,各人学习一块,然后每周做报告。
但是,经过两个月我就发现,太难了,大家对os内核一点都不理解,而且还不愿意学。只能作罢,于是我决定,我自已来。
整整大半年的时间,我白天上课,做项目,晚上熬到2点多,读IBM BIOS中断手册,赵炯的深入理解linux操作系统,intel的cpu指令手册,minix/orange/linux v0.12源代码,各种设备的指令手册,最后花了3个月时间,写出了一个能在模拟器上跑的os tiny内核(这段历史距今有7-8年历史,记不太清了)。
然后,我想了很多办法把这个os内核推广出去,让同学们都知道,然后参与进来,但其中的泪不知有多少,比如:
1、参加学校创业大赛,评委只有一个计算机老师,并且是计院副院长,其他人不发问不说话,看样子是完全不懂。这位计算机副院长评委问我:你调了什么api?我回答,我写的是os内核,如果说调了api,bios中断算一个吧。然后我感觉他没听懂,他又问了一遍,你要回答你到底调了什么api?我彻底蒙了,又说了一遍答案。然后他又问,你这个有什么用?我说有几个用处。。。,我感觉他还是没听懂。最后给了我一个三等奖,而我另外一个只做了一个月的项目,拿了个一等奖。
2、想搭建svn服务,跑计院申请机器,苦苦请求之下给了一台,但不给固定ip,跑宣传部申请域名,说不给申请,因为他们听上去感觉我的这个事情没什么用。让计院领导帮忙搞定,计院领导也说你这个没什么用,让我自己搞。。。最后只能用一个只有动态ip的服务器搭建了一个svn服务,把os内核源码放上去。
3、找一些听说比较牛的学弟学妹们,给他们讲os内核源码,他们一脸懵B。
不知不觉,到了我大四,虽然在我拿到毕业证之后还在为此事奔波,但我最终要离开,于是找了个人交代了下帮我维护svn服务器,拜拜。
然后是读研三年,发现新的985/211大学也一个尿性,想做这件事,没人会care,大家为了发paper,都在扯各种高大上的东西,都在为生计奔波,我都不好意思提os内核了。后来我想读博,去大学当老师,继续我的想法,但一想大学里都是这个鸟样,我一个也改变不了,随他去吧。
说了这么多,我把os内核源码贴一下,后来我放到github上了:ahhuiyang/LycheeOS
[h1]【总结】[/h1]我倾向于说“现阶段不能”,是因为,纵观计算机发展史,许多计算机基础技术往往产生于高校,比如操作系统,数据库,搜索引擎,比如国外的卡内基梅降,哥伦比亚,stanford,berkerly等,无数的技术在这里萌芽,成熟,然后被学生带到工业界。比如Google,开始是stanford两个学生在学校里做实验捣鼓出Google的核心算法PageRank,然后退学用这个算法去创建了Google。但在中国,起码在我所见的两个高校,计算机学院领导、老师完全忽视代码,不注重保存、维护学生的代码成果,没有一个项目能在学校里扎根并得到很好的发展,这简直是计算机学院最大的耻辱。在这种环境下,不可能产生操作系统、数据库、编译器,永远都不可能。
另外,像其它行业一样,中国的学生们,在初中高中,老师、家长一直给学生灌输“计算机就是洪水猛兽”这个观念,什么碰了电脑全毁了之类,许多计算机学院大一新生甚至连计算机基本操作都不会,几乎都是到了大学才开始学习计算机专业知识。试问,这种环境出来的计算机学生,如何能学好计算机。电脑是一项伟大的工具,如同任何一项工具一样,我们应该从小教育孩子合理使用,如果要学编程,初中、高中就开始学起,任何一项能力,必须经过长期的训练和坚持,才能达到牛B的程度,大学课堂上的知识量估计只能占10%。我很庆幸我高中就开始学编程,写代码了,一路走来,我发现我的路越走越对。
最后,就像我上面说的,windows/mac os/linux/android已经把护城河挖的很深了,在相同的领域竞争,按照传统操作系统的模式做国产操作系统,我个人认为几乎没有机会。我们不但没机会,在核心技术的能力上还比较欠缺。我觉得可以从中小学生开始启蒙编程教育,尽早培养更多的人才。等这些人进入大学就有知识有意识去钻研计算机核心计术,加上大学良好的环境和充足的时间,还是很有可能发展出下一代操作系统(比如AI操作系统)的原型。再利用高校优势,不断吸收牛B的研究成果和思想,同时带动cpu、硬件的发展,带动产业链上下游核心技术,走出一条独特的路,说不定还有希望能搞出一个有竞争力的东西出来。
3#
热心的回应  16级独孤 | 2019-5-26 11:22:05 发帖IP地址来自
真是的,什么问题都有,不知道有一本书叫 30天教你写出操作系统吗?我还有我很多同学都用过,确实做出来了,虽然比较简单,但至少也是操作系统,大学生1个多月能做出的东西,全中国工程师做不出?回答不能的是不是石乐志了?另外你们学金融学土建的来回答这种问题说不能,太难了,exc?(ps:此处讨论的是有无问题,请不要那去和Windows,Linux比较)
还有华为,阿里的OS早就上线推广了好不好,只是人家给大厂用,我们这些屁民用不到而已。。。
————————
18.06.05修改
自己做的这个的不是完整意义上的操作系统,只是一个学习过程中用来实践的一个项目,但本质上可以说得上是一个OS,硬要说的话就是螺旋桨飞机和5代机的区别,我只是想说明OS不是那么高不可攀,但是做出来以后需要一个庞大社区来使用它,维护它,才能逐渐成熟,完善,稳定,这是需要时间,环境和国家层面的支持的,以上
4#
热心的回应  16级独孤 | 2019-5-26 11:22:06 发帖IP地址来自
看了这么多不能的回答,我想说点能的回答。
社区流传,程序员的三大浪漫:编译器,图形学和操作系统。其中最容易的就是操作系统,但也是进化得最慢的。为什么?操作系统归根结底解决的是对资源的管理和调度问题,对于资源管理的设计是整个操作系统实现的核心。
如果单说照着教程实现一个类似unix的kernel,在这个教程随处可找的时代,一个合格的高年级本科生就是可以完成。但是仅此而已真的算是写出了操作系统了么?不,还需要上层的库函数和相关的应用才能算真正可以用的操作系统。如果你说,我只要实现一个posix兼容的api就可以跑大部分的应用了,那么我问你,你的实现和linux有什么本质区别,优化的又怎么样,跨平台能力又怎么样,都是用unix-like,为什么我要用你的而不用一个广泛使用的系统?
所以实现一个全新的操作系统的本质在于,是否能有一个全新的设计来解决现在甚至将来的问题。这不仅是中国能不能写出一个操作系统的问题,而是全世界有没有一个新的设计的问题。linux并不是万能的,linux对于现在面临的很多问题都是用一种dirty hack的方式解决的,比如多核CPU的支持,NUMA支持,比如如何实现高速的IPC,如何保证内核的稳定,还有分布式计算,异构计算等等。这些问题在平头老百姓的笔记本、手机里根本不是什么大问题,因为一般用户根本遇不到这些极端case。但是对于data center、超算、iot等等领域,这些就是很大的问题了。
通用操作系统是千军万马过独木桥,但domain specific的系统却广阔天地大有作为。谁最先解决了这些问题,谁就能写出下一个流行的操作系统。芬兰人可以,美国人可以,中国人自然也可以。最关键的就是放下傲慢闭上嘴,好好研究真正的问题。
5#
热心的回应  16级独孤 | 2019-5-26 11:22:07 发帖IP地址来自
问一个做基金的哥们,为什么其他垃圾上市公司发公告说自己要搞芯片,你们都是买买买!股票都是涨涨涨!董小姐说格力要搞芯片,你们卖到跌停?
哥们说,因为她是真要搞芯片啊
6#
热心的回应  16级独孤 | 2019-5-26 11:22:08 发帖IP地址来自
唉,类似这样的问题怎么这么多?我们以Unix,BSD,Windows和Linux为例来简要看看一个操作系统是怎么形成的。
Unix形成之初很少有能与之匹敌的系统,加上那时候说的操作系统还不像现在这样有这么复杂的软件包生态,所以Unix形成之初便在最厉害的一帮黑客和各大有名的计算机厂商的支持下,凭借操作系统的基本功能就占领了“市场”,并不断壮大。所以Unix是占着先机的,在操作系统还不是很明了的时候出世,引领了很多标准定义,发展起来也是必然。
BSD是Unix的校园分支,且没有收到Unix后来商业化的影响,被各大高校和非盈利的开发者支持,可以说与Unix按照不同的风格比驾齐驱了很多年,甚至很多技术反过来影响Unix,所以其发展成功也是毋庸置疑的。
Windows(此处删除一句话,具体参见评论,谢谢“北极”等朋友的观点)为什么能发展这么好,因为Unix一直专注大型机市场,个人桌面电脑市场还没有人定义规则,微软就是在这时候出现,大肆宣扬软件版权概念(要知道那时候即使卖系统的都是和设备一起卖的,很少有单卖软件的),开始定义闭源按份收钱禁止分发的软件概念,甚至一度捆包销售。虽然一度骂声一片,但也丝毫没有影响其销售。最大的原因就是其抱上了IBM的大腿,IBM出的硬件装的都是微软的系统一起销售,你想用个人电脑吗?那请购买IBM的硬件和微软的软件。就这样近乎垄断的状态下windows在第一时间抢占了桌面电脑的市场,并一度用各种商业手段达到无微软不桌面的地步,以致后来IBM都控制不住了。
最后我们来看看异军突起的Linux,说到Linux不得不说的一个组织就是GNU(这里说组织应该说自由软件基金组织,不应该说GNU,因为GNU的定义是一个操作系统,不是组织本身,感谢评论区指正。但是我这里以及后面就先不改了,大家知道组织是FSF就行:),而Linux系统实际上应该叫GNU/Linux。有一个叫Richard Stallman的大胡子黑客,他认为软件就应该开放源代码让其他开发者可以自己修改功能(他的故事自己去Google吧),于是他和一帮立志于此的人搞出来GPL协议和GNU组织。GNU做的事情就是重写所有Unix和BSD的软件(当然也有新写的软件),然后以GPL协议重新发布出去。他们先做的是开发除内核以外的软件。为什么?不是因为他们认为内核难所以最后做,比内核难的多的软件也是他们做的,请不要怀疑他们的实力。原因是他们想开发出兼容Unix标准的系统,所有软件都以Unix标准为基准做,做出来可以跑在unix内核上就是成功。他们想等把建筑都搭好了再开发内核(换个管家)把Unix内核一换就行了。
在他们做了大量的工作后他们认为到了可以着手写内核的时候了,不过他们最开始将内核设计的很复杂,以致调试起来很麻烦。加上这不是他们目前的主要任务,所以一直进展缓慢。后来就是大家熟知的Linus将一个初版的Linux内核按照GPL协议发布了,起初很多大神们都不看好这个内核,甚至有人说如果写出这个代码的人是他的学生,那他一定不能及格。不过在天时地利人和的帮助下,各大厂商急需一个完整的开源系统(这个推动很重要),所以Linux被拉来和GNU凑到一起发布了,Linux也在得到各种操作系统大师级别的人的帮助下迅速从“不及格”变成了可以应付企业级应用。我们应该肯定Linus的实力和贡献,但是我们更应该记住是GNU的那帮“老家伙”们让开源软件和GNU/Linux系统成为现实。开源软件其实就是当年Unix文化在当今互联网时代的传承,以前的Unix已经死于商业化了,以前Unix的那些人和传承者实际上是跑到了开源软件这条路上继续做着和以前一样的事情。
纵观上述几个很有代表性的系统的初始和发展,我们再想象一下中国能不能写出操作系统?首先从实力上我还是肯定中国有能写出一个操作系统雏形的人的,这些人可能出于国家拨款立项的推动(像造原子弹一样),呕心沥血做出一个像GNU/Linux刚发布时一样的系统,但是然后呢?
我们可以看到上述系统的产生和发展都是有历史时机在推动的,走到历史发展的长流里那就可以一路走下去。而“过了这个村就没这个店了”,想赶上下一波“咸带鱼”就得提前做技术积累,赶在历史潮流来之前引领下一波技术浪潮。用同一技术和理念后来居上这种事还是别想了。
看到windows发展好了我们问自己能不能做出windows,看到Linux发展好了我们问自己能不能写出一样的,看到安卓抢占手机市场我们又问自己是不是能做相同功能替代它…… 你总是在浪潮到来之后才问这些问题有什么用吗?当然我们不能否定自主研发的意义,从独立自主的角度看我们确实需要有自己的东西,不能受制于人。但是“尽力模仿”和“引领时代”是两个完全不同的概念。
中国能不能写出操作系统,答案是可以,但最多仅限于自己维持。不能引领,就只能跟着走(跟不上更惨)。
———— 题外话 ————
GNU实际上是写了内核的,后来出于各种原因没在继续完善下去,有兴趣的可以Google GNU Hurd项目。我个人觉得可能也是Stallman有些懒得做了,他想要的“世界”已经达到了,以后怎么样交给年轻人吧。
我曾见过Stallman先生几次,他很不喜欢别人把Linux系统叫做Linux系统。他说他们(指GNU)做了大量的工作,Linux只提供了一个内核结果就被以它的名字命名了,这是对GNU成员的不尊重。至少应该叫GNU/Linux系统(把/换成+也行)。可能我们只是因为简短顺口所以就一直在叫Linux系统,但是正如Stallman先生所说,我们不能忘记GNU组织的贡献,他们才是开源软件最大的功臣。
———— 补充1————
关于windows的来源,从年代来说它受到一些BSD的影响。实际上从技术细节来说windows和苹果的系统(甚至包括Linux)实际上是受到很多系统的影响,发展过程也很复杂,所以大家就别太纠结这个了,如果感兴趣可以检索大量计算机历史资料来系统了解。我只能说最初微软发布过一个叫Xenix的基于Unix的系统。后又买下Dos系统做修改发行。后又和IBM合伙开发OS/2系统。后又和IBM决裂自己开发NT系统直到现在。
按照最近原则,windows受Dos和OS/2的影响最大,这中间错综复杂的系统关系很难缕清,windows本身是闭源的,其使用过很多系统的技术,现在很难说从技术层面它到底来自哪个系统,因为它是个受多系统影响的产物。况且人家都是讲“版权”的,我们这篇回答不涉及微软“版权”的法律问题。那是其他大公司或社区的事情。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:32080
帖子:6440
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP