自研操作系统到底有没有技术难度?

自研操作系统到底有没有技术难度?

最近小米自研操作系统的事情引起了大家热烈讨论。今天我们来从技术的角度来分析一下做自研操作系统到底有没有技术难度。先说结论:

大家放心,做自研操作系统没有中国公司不可跨越的技术难度。但是要把操作系统的性能,用户体验,应用场景,开发工具链,应用商店,开发者生态等做到极致确实需要投入很多的人力与物力。

接下来我们从技术上来分析一下如何做自研操作系统。

对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!

先普及3个开源协议:

1: GNU GPL开源协议

它的核心意涵就是基于该协议的开源的代码或工具,可以免费使用与商用,但对使用和它的衍生品,也必须遵守GNU GPL协议,必须要将代码开源出来。Linux内核就是基于GNU GPL协议免费开源的。对商业公司来说这种协议无法保护核心商业机密。Linux内核就采用GPL协议。

2: BSD开源协议:

BSD开源协议是由Unix衍生而来,它的核心意涵就是基于该协议开源的的代码或工具可以免费使用与商用发布,使用后可以允许修改衍生的代码不开源。鼓励代码重用,同时又保护商业机密。

3: MIT 开源协议:

比BSD更加的宽松,可以自由的使用与发布,只要求保留源码与二进制中的版权与许可声明,使用MIT开源协议的代码库可以自由的修改,使用与分发,同时也能很好的保护商业利益与机密。

还有一些其它的开源协议,最主要的区别在于是否能做商业的发布与商业发布以后是否一定要对衍生产品开源。像GNU GPL协议就不大适合商业公司保护其核心机密。

自研究一个操作系统到底有多简单?

自研一个操作系统真的非常简单,你只需要按照以下的步骤去实施部署,你只要对极少量的代码做一些修改(这里的极少量是相对于OS开发的总代码量而言)。主要步骤如下:

1: 制作好硬件环境下编译c/c++代码的编译工具链

用开源的基于GNU/GPL 协议的gcc的实现。比如我们是一个arm(手机硬件)的硬件,那么我们就要使用gcc的pc版本的重新编译gcc源码,编译出一个gcc for arm的PC程序出来作为我们编译arm的编译工具,来编译源码生成arm指令集(交叉编译)。像Android的NDK就是类似的工具链。

gcc很强大,主流的硬件平台的指令都支持,比如x86(pc), mips, arm等。大部分的厂商的编译器都是基于gcc演变而来的(NDK, xcode等,微软是非gcc的自己的c/c++编译器)。

2: 编译Linux内核

Linux内核是基于GNU/GPL开源的,可以免费使用,对于不同的手机硬件而言,我们要做好BSP(Board Surport Package)的部分,让linux内核在硬件设备上跑起来。

3: 针对硬件设备,基于Linux编写特定设备的驱动程序

4: 编译基础的C/C++库与窗口系统。 

编译C库,c++的库,做好基础依赖,然后再开始编译其它的软件。让OS具有图形界面可视化的窗口系统, 一般我们直接使用基于BSD协议的X11窗口系统,这样编译完运行起来后,你的操作系统就有了可视化窗口了。

5: 编译GUI控件库,方便可视化界面开发

编译安装GDK/GTK/QT等,方便做GUI的可视化图形界面app开发。比如要开发一个记事本,比如要移植一个基于QT的其它的开源app。

6: 编译操作系统的桌面。 

常用的有Gnome/KDE开源桌面系统,也可以使用GDK/QT等自己写一个桌面程序。

7: 编译浏览器可以上网浏览网页。

基于webkit内核 的开源浏览器 or firefox源码直接编译运行。

8: 编译ffmpeg与mplayer,提供多媒体播放器的支持。

9: 定制开发一些核心服务的app

比如手机设置,打电话,短信,拍照, 多媒体播放器,记事本,云存储等。

10: 把工具链制作成NDK/SDK,开放给第三方开发者下载,开发应用。

能让第三方基于开发语言c/c++来编译与开发应用程序,如果想要其它编程语言,如Java/C#等,移植Java虚拟机/.net虚拟机,或者采用il2cpp等技术把字节码转成c++编译。如果你不做任何可视化工具,直接使用GCC的命令行编译,真的非常简单什么工作都不需要操作编写脚本即可。

到此,自研操作系统就基本搞定了。除了定制自己的一些核心业务服务外,做一些BSP相关的移植外,其它的大部分的工作就是让GCC来编译源码,因为都有开源的实现。

每个国内厂商都可以自研操作系统。都可以做Linux发行版的PC操作系统来代替windows操作系统。早期没有Android的时候,做Linux的PDA时,大部分都基于这种方式来实现的。(怎么样,简单吧,一个5~6人的团队小公司就可以做出来,真实体验,绝非吹NB)

自研商用操作系统与生态到底有多复杂?

先说结论: 大公司自研一个商用操作系统,没有任何的技术难度,但是做一个用户体验好,完整的操作系统工作量与资金投入着实巨大。工作量大的原因如下:

  1:不能全用GNU/GPL开源协议的代码,因为用了这些代码以后,自己商业化与修改的代码部分必须要全部开放源码,使用开源代码还需要做很多的补丁与改进,比如Linux内核。

  2: 性能优化与很好的用户操作体验。这个工作是无止境的,极致的性能,极致的用户体验,会消耗我们大量的人力,物力,财力。为了更好的用户体验我们可能很多app与核心固件需要重写,比如OS内核性能优化, 桌面, 浏览器,比如媒体播放器等。

  3: 开放出来的开发工具,针对第三方开发者,为吸引更多的开发者,要把工具链做的简单好用,如可视化编辑工具等,这项工作也需要很大的投入;

4: 核心服务的开发:生态布局, 邮件服务, 用户服务,应用商店,云存储云服务,照相优化等也需要投入大量的研发成本。

5: 对于国内后来做手机操作系统的厂商(如华为)来说,为了能使用Android的第三方应用,还要做基于二进制兼容Android应用,这个工作量与工作难度也是很大的,为了兼容,里面可能要带很多的Android代码与服务(这个也是后来被诟病是Android套壳)

大公司做商用操作系统主要是核心商业业务要绕开开源协议,要自己实现,开源项目的补丁与修会,考虑生态的各种服务与很好用户体验,工作量与资金投入巨大,但是没有不可攻克的技术难度

Google与苹果自研OS是怎么做的?

最后我们一起来看下苹果自研IOS与Google自研Android。

苹果这家公司很早就在做操作系统,第一代苹果电脑的操作系统很早就出来了。苹果很早也自己做硬件(苹果能第一个做出只能手机,还是有基因的)。由于OS上的长期积累,坦白说iOS确实性能很棒。我们来看下苹果在自研OS上的几大核心的选择:

1: 操作系统内核,选择了BSD协议的unix,这样后面苹果是可以不开源它的内核源码的。

2: 开发工具与编译器选择后端采用GNU/GPL协议的gcc/g++, ObjectiveC的开发语言也是从这里来的。可视化开发工具xcode独立出来,提供编译前端开放给第三方开发者,这部分不开源。

3: 开发了自己的浏览器safari, 内核基于webkit, webkit是GPL协议,同时开放源码,苹果的改动可以与全球webkit开放者共享。

4: 自研数字音乐与多媒体服务Itunes,很早就开发了。

5: 与用户体验相关的app,比如像手机桌面,应用商店,设置,打电话,邮键,导航等都重新开发,注重用户体验;

Google 推出了基于MIT的Android OS, Google自研Android的几大核心选择如下:

1: 操作系统内核: 选择基于开源的Linux内核, 所以Android的内核所有的改动都要无条件开放出来,对于商业公司来说内核开源其实也无所谓,每年很多大公司对Linux代码贡献巨大,看一家公司有没有在用心的研发操作系统,只要看每年Linux内核代码贡献量的排名。下图是内核5.10版本的贡献量,可以看出来华为与intel遥遥领先。大家可以自行脑补一下国内哪些公司真正在投入大量研发做OS的补丁与优化。^_^

自研操作系统到底有没有技术难度?_第1张图片

(linux 5.10,全球贡献度)

2: 浏览器,google也是基于webkit内核来开发出来的浏览器。

3: Google开发了google服务,云服务, 邮件,应用商店等, 不开源,需要授权给第三方手机厂商。

自研操作系统到底有没有技术难度?_第2张图片

从工作量来说,Android操作系统的工作量应该小于IOS的, iOS的开发时间与积累确实要比Android长, 苹果公司很早就做操作系统了。

自研操作系统要做好,关键是做好OS与相关的生态建设,确实需要大量的投入与整个行业合作伙伴的努力,为华为点赞。

你可能感兴趣的:(游戏引擎,unity)