最后,也是最重要的,操作系统过程中需要的技术和知识并不是非常复杂。比如操作系统核心模块的开发,几乎不会用到复杂的数学推导和运算,只要有最基本的数据结构知识和硬件知识就可以胜任。而在一些应用软件开发过程中,比如GIS,图形处理软件,需要有非常深入的数学知识,比如复杂的矩阵运算、高阶偏微分方程等,这对程序员的要求非常高。对比起来,操作系统开发难度,比复杂应用软件开发难度低得多。
总之,操作系统开发没有想象得那么难。人们之所以一听到操作系统开发,就认为非常难,甚至望而却步,我认为很大程度上是心理作用。因为我们从未成功开发出一个操作系统,不知道操作系统的开发难度如何,于是会产生一种对无知的畏惧。
打造出一个广泛使用的流行操作系统的难度,在于建立一个完善的操作系统生态环境。这包括操作系统本身,与操作系统配套使用的开发工具,与之配套使用的浏览器、多媒体播放器等软件,为其定制的各种硬件驱动程序,以及支持它的众多硬件平台。这不是一个开发团队或一个公司能够独立做到的,必须借助于整个行业的力量,包括硬件设备提供商、应用软件开发商、系统软件开发商等的通力合作才能完成。而且整个生态环境的成熟,需要很长时间,有时会超过十几年时间的培育。再强调一下,这里说的生态链,是针对一个通用操作系统来说的,比如Linux,Android等。
当然,这并不是说操作系统开发就没有任何机会了,相反,开发的机会还会越来越多。之所以这样说,就是基于先前论述的应用场景细分趋势。在操作系统应用场景细分的情况下,操作系统的生态链范围会大大缩小。一个优秀的公司,以自己之力甚至就可以打造一个完整的生态环境。
怎样的操作系统才能算是独立开发的操作系统
这个问题可能比较敏感,而且见仁见智,这里只是说一下我个人的理解。我认为,一个独立开发的操作系统,下列各模块中,至少要有一个是完全独立开发的(即不重用任何现有模块,完全是重新独立编码):
操作系统内核,这里的内核,包括基本的操作系统服务,比如进程/线程模型、内存管理机制、设备管理机制、核心设备驱动程序等;
图形用户接口(GUI),可以直接借用现有的图形库,但是GUI不仅仅是一个图形库,还包含了用户交互机制、图形资源管理等相对比较复杂的内容。这些内容需要自行编写;
全新的应用编程接口和开发工具。比如,在原有操作系统核心基础上,增加的API调用数量,要超过原有内核体统的API数量,这些API组合起来,提供一种全新的应用解决方案或应用场景。同时要开发一个全新的应用程序开发环境,并能与操作系统和最新的API有机集成,提供面向某个应用场景的整体解决方案。
比如Android,虽然其操作系统核心是借用的Linux内核,但是其GUI却是完全重新编写,且提供了一个基于Java语言的全新开发环境,上述列举的模块中,有至少两个是全新编写的,因此Android属于一个独立开发的操作系统。当前市面上有很多号称是自主开发的操作系统,实际上只是把Android的GUI模块进行了部分修改,添加了一些个性化的东西。同时有针对性的增加了一些应用。我认为,这不应该算是自主开发的操作系统,可以算作是自主定制的操作系统。
这里并不是否定自主定制操作系统的行为,而是从技术上,试图把自主开发和自主定制进行澄清。实际上,自主定制是一种非常明智的行为,可以使得企业能够很快推出其个性化产品,满足市场需求,是企业积极适应市场需求、积极参与竞争的表现。相反,如果企业纯粹去追求自主开发,在没有明确市场需求和市场定位的情况下,不计成本的投入开发一种全新的操作系统,反而是一种愚蠢的行为。现有的东西能够满足需求,为什么不拿来直接用呢?模块重用原则一向是软件行业推崇的基本原则。
对x86平台在操作系统开发中的作用的考虑
我个人认为,x86硬件平台是操作系统开发过程中无法绕过的一个平台,而且对一些相对通用(这里的“相对”通用,可以理解为至少支持两种以上硬件平台的操作系统)的操作系统来说,以x86为最开始的开发目标平台,完成x86平台的开发后,再向其它硬件平台移植,或许是最有效且最省事的策略。主要有以下几点原因: