独立自主开发一个 OS 最大的难点根本不是技术问题

2019-08-13 12:09:21 +08:00
 Buges

外界总有一个误解,好像开发一个 OS 是一项非常了不得的事,国内技术不行,先进的技术都被外国垄断卡了脖子。做出自己的操作系统就像造出原子弹送火箭上天一样艰苦卓绝,意义重大。

“独立自主”有什么含义暂且不表,但作为业内技术人士,总不能也抱有这样的认知吧?

随便google 一下,铺天盖地的教程和文档起码一个不算太差的计算机专业的本科生花上 30 天做个玩具 demo 还是没太大难度。

即使不看这些,稍微动脑子想一想,linus 做得,你就做不得?

所以开发一个 OS 最大的难点根本不是技术问题,甚至技术问题都占不得九牛一毛。

技术角度无非就是内核,基本系统软件(图形,架构,运行时等),稍微有点规模的公司都能做得。

并且作为一个更的系统,只要开发人员不是太水,没有历史包袱在,做到比古老的 Windows,*nix 更优异不在话下。(这些系统由于历史遗留问题从而令人诟病的地方有多多不用我多说)

一个系统最根本最关键的是生态,如何让用户使用?如何让软件厂商为你的系统开发软件?如何让硬件厂商为你的系统适配驱动,推出使用你的系统的产品?

以上这些都不是技术的范畴。可以说是商业问题,经济问题,甚至是政治问题。

现有的操作系统最不可动摇的就是生态,也许 30 年前你开发一个足够优异的系统可以占领市场,但放到现在,哪怕写的再好,也几乎没可能动摇市场霸主的地位。就像铁轨的宽度决定于两匹马屁股的宽度一样,习惯的力量不可动摇。

要推广生态,要么是海量资金硬砸,要么是物联网这样的底层硬件变革新领域的机遇,要么就是行政手段强制进行。

所以吹牛造势似乎并没有什么问题,只要大势造成,攻克生态的最大难题,即使一行代码还没写也没关系。代码,根本就是小事。

如果有一天,行政力量要求封杀某些系统强推某些系统,那么提前宣传造势 ppt 的重要性也就不言而喻了。

11140 次点击
所在节点    操作系统
102 条回复
nguoidiqua
2019-08-13 14:56:59 +08:00
做系统是没有技术壁垒的,做好系统是有技术壁垒的。

如果你不要求做好,那干啥都没壁垒。旧石器和新石器相比也复杂度也没多大区别啊,工作量的问题,不过这之间据说花了上百万年。青铜器和铁器相比复杂度也没有多大区别啊,温度高低的问题,这之间有几千年。
GPLer
2019-08-13 14:58:20 +08:00
理论固然重要,但还要结合国情啊!国内这局域网普通人常用的软件就那么几个,办公 WPS 也能解决,如果系统真做出来了,花钱请适配就完事了,何谈生态问题?
ryd994
2019-08-13 15:11:19 +08:00
@Buges “论复杂度 Linux 内核较之于阿里这样的大厂上亿并发的整套系统恐怕也是不如的”
?????
Linux 写了几年?阿里写了几年? Linux 多少人写?阿里这么牛逼怎么没搞出阿里 OS ?那个 yunos 不过是基于 Linux 适配了一个发行版,还没适配好。你说这种话之前,先去 Linux 提个 patch 如何?说话这么大口气,想必比“不算太差的计算机专业的本科生”要强得多吧?
内核里几种中断级别?几种锁?什么时候可以 block 什么时候不允许 block ?设备驱动为什么分 top half 和 bottom half ?
这是“茴字几种写法”的问题,但是你既然说要写自己的系统,至少这些基础知识还是要了解的。和系统无关,你自己写一套系统还是跑不出这些概念。Linux 和 Windows 内核态驱动我都写过。这些基础概念,尽管不同的系统里名称不同,接口定义不同,甚至框架不同,但最终实现结果还是非常相似的。

别说 Windows 代码你看不见,Linux 代码全公开你也一样看不懂。光是基本的网络栈就够大学课程学一年的。操作系统,计算机组成,课上学到的不过是皮毛。Linux 内核驱动开发,市面上的书大多停留在 2.6 时代。Linux 最新 release 已经过 5 了。没有人带你连代码都看不懂。Linux 进程调度器,敢碰的人一位数最多,因为实在是没人看得懂。但是这是为了性能不得已的不得已。CPU 调度对一个操作系统的性能影响之大,自身开销的限制之低。即使 Linux 编码规范里禁止乱飞 goto,只有调度器里还有少量乱飞的 goto。难道是这么多 Linux 开发者没人会修么?

"不是重写就更好,而是舍弃历史包袱后会更好。"
所谓历史包袱就是个伪命题。操作系统永远是针对当前的前沿优化。老旧设备加个编译时可选的后向支持就够了。开发者可能改接口改到吐血。但是对终端用户来讲,想大幅超越 Windows/Linux 断没有可能。Windows 和 Linux 在不同的场景下性能各有胜负,但长期大幅吊打的情况从来没有过。就算偶尔有不支持的新硬件性能跟不上,下一版立刻就修掉了。你是有多牛逼敢说吊打优化到指令级的性能?

"基于别人的系统套皮是因为省事而不是不能重写"
能啊,写个十几年才写出来也叫写出来了。在这十几年间没人会用,因为实在和现有的差太远。龙芯就是个好例子。我们终于自主研发追上了 intel 的。。。。。。奔四。绕过专利不难?真不难 intel 还能吊打 AMD 十几年? AMD 如今是翻身了不假。中国有几间公司能有这样庞大的资源,和十几年一直开发的坚持。况且如今的局面,不排除只是 intel 走了弯路,新技术难产太久。将来新技术出来,到时候能不能翻身还两说。服务器市场上,你大爷还是你大爷。

“ Windows 下一代不再兼容 exe ”
exe 不过是一个文件名后缀。linux 下你想叫什么名字叫什么名字。就算你抛弃全套系统 API/ABI,又能如何呢? API/ABI 一路扩充至今,如果是 API 限制了性能,那再加一套新的平行的框架就行。你以为 Linux/Windows 现在还在用最初那套 API ?

硬件厂商为了支持自家硬件往 Linux 里提交代码不假。但是这些代码就只是驱动么? Intel 提那么多代码,难道 Intel 硬件特别多驱动特别多? Intel 为了保证 Linux 在 Intel 硬件上的性能而提交的优化,在其他平台上就用不到了? Mellanox 就不能给 Linux 的网络栈写代码了? Intel 的研究院是吃素的?

“我想表达的是一个 OS 从技术上不存在什么鸿沟,壁垒。是工作量和投入的问题。”
当工作量大到一定程度,那就是事实上的壁垒。否则只要我国撕破脸皮不承认任何外国公司的专利,问题不就解决了?
科技巨头这么多年的技术积淀,你大爷还是你大爷。

“难的是相应平台上的系统,编译器等生态”
这恰恰是不难的部分。API/ABI 自己定义了,往 LLVM 里适配就好。Facebook 还不是搞出来个 HHVM ?用户态系统库,比如 libc 都有清晰的定义,还有全开源的实现。用的是 LGPL,也就是允许再发行二进制。也有 BSD 协议的实现。抄一份,自己适配下,号称自主研发谁敢不从?
反正有什么 bug 也崩不了系统。有什么 bug,挂上 debugger 慢慢看就是了。
为什么要有各种高级语言,为什么要有各种运行时?就是为了彻底与操作系统去耦。Java 程序只要有 runtime 适配,可以在任何硬件上跑。只要 runtime 支持 JIT,那运行的性能未必比静态语言差。设计之初的目的就在于此。写出高效的不容易,写个能用的还是不难的。各种编译器优化,真正和操作系统绑定的很少。要么是预处理阶段的逻辑优化,要么是和硬件特性(指令集)绑定。操作系统作为一个中间人,任务是管家,对用户态程序运行的干扰越小越好。这也正是操作系统开发的难点所在。很多任务需要在几百个指令内完成。
ryd994
2019-08-13 15:19:50 +08:00
你说代码不值钱,未必错,毕竟代码只要抄抄就有了。就算 Windows 代码,ZF 采购时是有协议可以审查代码的。撕破脸皮不要了强行偷一份偷不到?
但是给你代码你就会用了?真正值钱的是这批人才。外面人学的再精,能有原作者了解?文档再好,能比原作者亲自讲解好?这些科技巨头的 Principal 级别往上,随便去那个公司都好找工作。能不能留住这批人,才是决定一间科技公司能不能长久的根本。SDE1/2 嘛外面随便招几个应届培训一下就够了。

比比某些 30 以上直接辞退的公司,高下立判。
Buges
2019-08-13 16:13:44 +08:00
@ryd994 #43 你说的很对,难得这么认真回复,但你们搞内核的和用户,应用层面关注点还却是不一样。

1. OS 处理的问题更底层,更细化,更局部,为的是解决更复杂问题封装复用,这也是各种库的意义所在。论复杂度,实现一个库和调用 10 个库做应用未必哪个更复杂。我论证的是不说做的好不好,起码做这种复杂度的项目工程的能力大厂还算有的。
至于时间...你不能以工时来统计程序员的工作量
然后优化什么的不算重点,何况有那么多可以借( chao )鉴( xi ),“独立自主”了还管你跑得快不快。

2. 历史包袱是生态的包袱。新版不兼容老组件就得重写老组件,兼容下去又碎片化严重。不是简单向后支持编译选项的问题,整个生态都臃肿混乱不堪。

3. 省事确实省了很多事,不止内核,还有 native 的基本组件。关键是重写没有多少收益,不值而已。至于架构,说的是“为了不同而不同”不难,没说要做多好,做出来就够。就算垃圾,禁止进口强制你用又怎样

4. exe 指目前的直接发行的二进制可执行文件。api 鉴权,管理,包管理等各个方面都混乱无比,linux 的碎片化更不用多说。这些没法做,做了就没法兼容。你说加一套?软件继续用旧的。不兼容旧版?生态不允许。这样的碎片化就是指的历史包袱。

5. “很多公司提交的代码是为了驱动自家硬件” 断章取义了...

6. 壁垒在于生态。只要行政力量强制用户迁移平台,问题却是解决了。至于好不好用,那不重要,重要的是“独立自主”了~

7. 这个不太了解。这里说的是架构,你自己搞个为了不同而不同的平台,让 gcc 等编译器适配,还得让各大软件为你的平台编译发布版本,应该也不太容易吧

8. 代码到没必要偷,我强调的是写代码仅仅是其中很小的一部分。至于人才,现代软件技术越来越让菜鸟也能做大项目,当然好不好是另一回事了...

“做一个 OS 并取代国外产品推广不代表技术上的进步,而是其他(行政力量)方面的优越” 这是核心论点
Mulancer
2019-08-13 16:18:56 +08:00
@BlackSas #26 技术是门槛,过了门槛才有资格谈生态,微软 WP 这种属于过了槛的,所以你才能知道,还有无数槛都过不了的。而且门槛其实并不低
Raymon111111
2019-08-13 16:19:06 +08:00
>linus 做得,你就做不得?

??? 人和人的差距可比你想的大
zhang77555
2019-08-13 16:23:34 +08:00
生态也要靠"对用户友好"和"对开发者友好"来支撑,如何做好这两点难道不是技术难题?
2kCS5c0b0ITXE5k2
2019-08-13 16:25:29 +08:00
爱因斯坦做得到, 你就做不到?
tcpdump
2019-08-13 16:27:18 +08:00
jewer3330
2019-08-13 16:28:08 +08:00
爱因斯坦做得到, 你就做不到?
loginbygoogle
2019-08-13 16:31:38 +08:00
中国当今义务教育之质量确实让人堪忧,还有很长一段路要走
looseChen
2019-08-13 16:35:04 +08:00
@echo314 如果 os 没打算跨出国门,你可以当我没说。
reus
2019-08-13 16:36:07 +08:00
@anguiao QT 很差吗? gtk 不能用?游戏开发不了?技术上毫无问题,市场不行而已。
admirez
2019-08-13 16:47:58 +08:00
会写代码和会写好代码不是一回事

会写好代码和会抽象代码更是差了一个太平洋
seraphv3
2019-08-13 16:53:37 +08:00
我看过一本日本人的书《 30 天自制操作系统》,的确是 30 天做一个图形化操作系统的 demo 出来
swsh007
2019-08-13 16:55:21 +08:00
说简单的去看看 linux 的内核历史
其实并不是一帆风顺的
只看协议栈的变化就知道了
不太相信谁能完全独立自主造轮子
GenkunAbe
2019-08-13 16:57:38 +08:00
@Buges 按照你的说法,写一个能用的操作系统(不是操作系统内核)不难呀,所以难点不在技术上;利用行政力量的优越性去推广生态不难呀,所以难点不在生态上。那么,难点在哪?
adminex
2019-08-13 16:59:36 +08:00
确实 就像安卓平板也不差,就没软件适配
liprais
2019-08-13 17:01:46 +08:00
@Buges 所以你还觉得技术不是问题?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/591451

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX