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

news2024/10/7 6:42:59

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

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

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

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

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

先普及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的补丁与优化。^_^

图片

(linux 5.10,全球贡献度)

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1124015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++设计模式_11_builder 构建器(小模式,不太常用)

builder 构建器也是属于“对象创建模式”模式的一种,是一个不常用,比较小的模式。 文章目录 1. 动机(Motivation)2. 代码演示builder 构建器2.1 builder 构建器模式的形式1方法2.2 builder 构建器模式的形式2方法2.3 两种形式总结…

推荐一款最近风很大的配音工具~

逐渐发现身边越来越多人开始朝着丰富多彩的副业方向发展,而在这其中,“自媒体”深受大家喜爱,许多人开始看到了商机并纷纷“下海”制作短视频,那么不知道在座的各位“下海”了没有呢哈哈哈哈?短视频需求越来越大&#…

测试左移和右移怎么做,这篇文章写的太详细了

通俗的讲:左移是往开发阶段移,右移是往发布之后移。 正常测试:提测后的测试工作——到——发布验证完成阶段。 测试左移:提测之前的测试。 如:代码单元测试,代码质量检测,代码接口持续测试 等。…

为什么电商使用高匿代理ip更有效果?

前言 随着电商业务的不断发展,越来越多的电商平台开始使用代理IP作为一种有效的反爬虫手段。而高匿代理IP作为代理IP中的一种,其相较于其他类型的代理IP可以更好地保护电商业务的隐私和安全,从而更加有效地为电商平台服务。本文将从代理IP的…

苹果Mac电脑音频处理工具:iZotope RX 10 最新 for mac

iZotope RX 10是一款知名的音频修复和后期处理工具。它因其出色的音频修复功能和强大的音频编辑工具而被广泛应用于音乐制作、电影后期制作、广播电视等领域。 以下是iZotope RX 10的一些主要功能和特点: 音频修复:iZotope RX 10具备强大的音频修复功能…

北邮22级信通院数电:Verilog-FPGA(6)第六周实验:全加器

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 先抄作业!!!&am…

机器人系统 ROS 常用命令行工具

1. 启动ros 主节点 roscore roscore运行成功如图: 1.1 rosrun 启动服务节点 例子:启动一个小乌龟节点 rosrun turtlesim turtlesim_node运行结果如图: 1.2 启动键盘控制 打开新的命令窗口,启动turtle_teleop_key 节点 rosr…

三步搞定查分系统

成绩查询系统,简单来说,就是一个让学生能够自助查询成绩的系统。无论是在学校、培训机构,还是在家庭教育中,成绩查询都是一个重要的环节。那么如何建立一个简单实用的成绩查询系统呢?下面就为你揭秘三步打造查分系统的…

ubuntu1804服务器设置静态IP

修改/etc/netplan/00-install-config.yaml文件中的内容 查看网关命令是route -n

【广州华锐互动】关于物理力学的3D实验实操平台

在科学的广阔领域中,物理力学是一个至关重要的分支,它探索了物体在力作用下的运动规律。然而,传统的物理实验往往需要复杂的设备和大量的操作,这对于学生来说是一项巨大的挑战。为了解决这个问题,广州华锐互动开发了物…

GoLong的学习之路(二)语法之基本数据类型

书接上回:我在GoLong的学习之路(一)中在常量最后说了iota的作用。今天这里我在介绍一下我学习Go语言中基本数据类型。 文章目录 Go中的基本数据类型整型特殊整型数字字面语法 浮点型复数布尔值字符串字符串转义符多行字符字符串的常用操作&am…

小程序 swiper滑动

整个红色区域为可滑动区域&#xff0c;数字1区域为展示区域&#xff0c;数字2为下一个展示模块 <scroll-view class"h_scroll_horizontal" enhanced"ture" bind:touchend"touchEnd" bind:touchstart"touchStart"><view clas…

【iOS】——知乎日报第一周总结

文章目录 一、框架和布局问题二、线程冲突问题三、下拉刷新问题四、添加网络请求的图片五、时间标题设置问题 一、框架和布局问题 仿写知乎日报用到的框架依旧是MVC框架&#xff0c;所以一开始要想好该怎么搭建大体框架&#xff0c;对于各个模块该怎么分配&#xff0c;需要用到…

java--自增自减运算符

1.自增自减运算符 注意&#xff1a;、--只能操作变量&#xff0c;不能操作字面量的。 2.自增自减的使用注意事项 1.、--如果不是单独使用(如果在表达式中、或者同时有其它操作)&#xff0c;放在变量前后会存在明显区别 1.1放在变量前面&#xff0c;先对变量进行1、-1&#xff…

关于unicode视觉、存储长度的事儿

问题&#xff1a;unicode 找不到合适的正则 字符串视觉长度 使用lodash&#xff1b; import toarray from lodash.toarray; toarray(str);unicode视觉长度 在字符串视觉的基础上判断每个元素的length是否大于1来累积&#xff1b; 字节长度 Array.from(str).length 问题举…

Java数据结构之稀疏数组

目录 线性结构与非线性结构线性结构非线性结构 稀疏数组应用场景 代码实现二维数组转稀疏数组稀疏数组转二维数组 线性结构与非线性结构 线性结构 数据结构分两种&#xff0c;线性与非线性&#xff0c;线性结构的数据元素之间存在一对一的关系。 一对一指的是每个数据元素都…

淘宝app商品详情源数据API接口(解决滑块问题)可高并发采集

通过API接口采集淘宝商品列表和app商品详情遇到滑块验证码的解决方法&#xff08;带SKU和商品描述&#xff0c;支持高并发&#xff09;&#xff0c;主要是解决了高频情况下的阿里系滑块和必须要N多小号才能解决的反扒问题&#xff0c;以后都可以使用本方法&#xff1a; 大家都…

Qt+树莓派4B窗口半透明效果实现

文章目录 前言一、窗口半透明&#xff0c;窗口部件不透明1、构造函数中的设置2、paintEvent3、效果4、树莓派4B配置5、最终效果 前言 在树莓派4B下&#xff0c;使用Qt开发窗口半透明而窗口部件不透明效果时,发现窗口没能正常实现半透明效果,而是显示纯黑色背景。同样的代码在wi…

Windows 95 的辉煌诞生历史

1992 年 2 月&#xff0c;Windows 3.1 的研发即将结束&#xff0c;而 Windows 团队正忙得不亦乐乎地计划他们的下一盘大棋。到了 3 月 5 日&#xff0c;他们终于悠哉悠哉地敲定了战略大计&#xff1a;横扫桌面、笔记本、移动设备以及时髦的触控笔设备。至于那些高大上的服务器和…

基于springboot+vue网上书城系统53

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…