谢邀,我确实想在这个事情上说几句。
针对题主的问题:“中国能不能写出操作系统?”,这个问题本身很宽泛。以飞机作类比,从纸飞机、玩具飞机、消费级无人级,再到飞豹,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已大行天下,形成了一个比四大洋还深的护城河,从头开发一个能比肩这些操作系统的竞品,真比登天还难。
所以,要做这些事情,需要花费巨大的人力、物力、财力。这不是几个人的意志力就能搞定的事情,而是需要整个社会达到一定阶段。
中国的哪些群体、部门、企业可以有资源开发操作系统呢?首先说企业,企业家都是逐利的,我不认为企业愿意投入五年的时候,花费巨大的代价去搞这么一个看不到前途,看不到效益的事情。再说研究院,中国的众多研究院,除了医学,都在往高大上不接地气不着调的路子走,所以我不认为他们会去做这个事情。
然后就是高校,我想重点说一说高校。
【我的写os内核经历】
我高中开始写代码,从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
【总结】
我倾向于说“现阶段不能”,是因为,纵观计算机发展史,许多计算机基础技术往往产生于高校,比如操作系统,数据库,搜索引擎,比如国外的卡内基梅降,哥伦比亚,stanford,berkerly等,无数的技术在这里萌芽,成熟,然后被学生带到工业界。比如Google,开始是stanford两个学生在学校里做实验捣鼓出Google的核心算法PageRank,然后退学用这个算法去创建了Google。但在中国,起码在我所见的两个高校,计算机学院领导、老师完全忽视代码,不注重保存、维护学生的代码成果,没有一个项目能在学校里扎根并得到很好的发展,这简直是计算机学院最大的耻辱。在这种环境下,不可能产生操作系统、数据库、编译器,永远都不可能。
另外,像其它行业一样,中国的学生们,在初中高中,老师、家长一直给学生灌输“计算机就是洪水猛兽”这个观念,什么碰了电脑全毁了之类,许多计算机学院大一新生甚至连计算机基本操作都不会,几乎都是到了大学才开始学习计算机专业知识。试问,这种环境出来的计算机学生,如何能学好计算机。电脑是一项伟大的工具,如同任何一项工具一样,我们应该从小教育孩子合理使用,如果要学编程,初中、高中就开始学起,任何一项能力,必须经过长期的训练和坚持,才能达到牛B的程度,大学课堂上的知识量估计只能占10%。我很庆幸我高中就开始学编程,写代码了,一路走来,我发现我的路越走越对。
最后,就像我上面说的,windows/mac os/linux/android已经把护城河挖的很深了,在相同的领域竞争,按照传统操作系统的模式做国产操作系统,我个人认为几乎没有机会。我们不但没机会,在核心技术的能力上还比较欠缺。我觉得可以从中小学生开始启蒙编程教育,尽早培养更多的人才。等这些人进入大学就有知识有意识去钻研计算机核心计术,加上大学良好的环境和充足的时间,还是很有可能发展出下一代操作系统(比如AI操作系统)的原型。再利用高校优势,不断吸收牛B的研究成果和思想,同时带动cpu、硬件的发展,带动产业链上下游核心技术,走出一条独特的路,说不定还有希望能搞出一个有竞争力的东西出来。