操作系统老兵:软件生态为什么难度这么大?
很多没做过操作系统的,很容易受到抖音民族情绪渲染调动,就认为只要有人就可以把操作系统干好,真实的软件生态要比你想象的难很多。
为了方便大家理解,我尽量简化其中的逻辑,只说我几十年经验的结论。
操作系统的生态主要有5个方面:
1. 芯片
2. 编译器
3. 基础软件组件
4. 操作系统
5. 关键软件生态
芯片最难的其实不仅仅是大家熟知的制程和工艺,最难的是指令集。一个不开放的指令集,会导致很多开源软件的代码分支没有这种指令集。而现代操作系统早已离不开开源软件,没有对应的指令集,基本上就要对每个开源组件都手动增加指令集分支的代码,而指令集分支的代码是大量的 #ifdef 代码,50个人折腾一年后,一旦上游软件改了代码,手动迁移适配的工作量极大,就像一提花生一样,一环套一环。大家说,为什么不贡献设备到开源社区?因为一个用的很少的芯片,对于上游开发者也是负担,没人用,每天还要维护这个分支的代码,累。
编译器是开源社区很难理解的难,因为编译器和芯片指令集是绑定的。开源社区大家升级GCC版本觉得很简单,但是一个新的芯片的编译器和芯片的指令集相关。因为你芯片做了任何创新,比如多媒体指令,向量加速指令,AI算子加速指令等等。这些都需要通过编译器翻译,才能让软件用得上这些指令集。所以,你要大量改GCC,让软件编译的时候自动能用上这些新的指令集,这里工作量巨大。最难的还不是这里,而是GCC影响的底层软件太多了,不能有bug,如果有bug会导致你以前编译的软件要全部重新编译,不要问我为什么知道,说多都是泪。 操作系统的基础软件重新编译一遍最少需要1个月的时间,比LFS难一万倍。
基础软件组件,比如性能分析工具、浏览器引擎、Python、各种数学库。基础软件最麻烦的就是这些带数学库的软件,现代很多先进编程语言的指令集优化不受GCC影响,比如golang,haskell都自带编译器和数学库,这些语言的移植和上面GCC一样难,需要既懂X86指令集,又要懂新的芯片指令集,还需要熟悉新的编程语言,还要数学功底强。虽然没有GCC影响面大,但是工作量非常大,专业编译器团队也要花一年时间才能稳定一个版本。
操作系统相对于前面三个来说,虽然底层难度不大,但是上层的难度在于应用软件的支持和用户习惯。想要说服成千上万的软件厂商维护你操作系统的版本非常难,你首先要证明你用户量大,否则没人支持。 而你面对的是先有鸡还是先有蛋的问题。而自己造的话,只能造一些通用软件。比如专业点的,Office、CAD、PS等,操作系统厂商本身也不专业,因为你软件工程能力再强,也缺乏这些行业多年的行业认知。
关键基础软件生态,最典型就是类似CUDA这种护城河。即使你跨越了前面几座高山,每座高山都损失30%的性能,到了专业赛道以后,想要弯道超车非常非常的难。因为别人用CUDA搞钱,你想要别人当小白鼠,基本没人会理你。
而操作系统软件生态最难的是,用户和行业的习惯,他们习惯于某一个生态的文档,习惯于出了问题网上可以抄答案。 来到一个新的生态, 99%的厂商都没有底层软件调试能力,一个出错可以保证你全网都没有一篇解决方案,最后生态合作伙伴的老板每天思考的问题是,等你平台跑起来,我都饿死了。
所以,操作系统的软件生态发展只有两条路:
1. 浪潮: 新的赛道,新的浪潮,所有人都是0起步,只要可以赚钱,再烂的操作系统都有人用,比如智能手表,智能门锁,电动汽车等
2. 补贴: 国家巨大的补贴,生态发展起来了给国家省钱和增加贸易谈判筹码,但是结果大家也知道,补贴的市场容易缺乏长远竞争力
懒猫微服的操作系统是我们耗时3年研发,瞄准家庭服务器和AI Agent赛道,三层操作系统架构设计,怎么折腾都不会挂,商店1000多个应用,好玩好用。
很多没做过操作系统的,很容易受到抖音民族情绪渲染调动,就认为只要有人就可以把操作系统干好,真实的软件生态要比你想象的难很多。
为了方便大家理解,我尽量简化其中的逻辑,只说我几十年经验的结论。
操作系统的生态主要有5个方面:
1. 芯片
2. 编译器
3. 基础软件组件
4. 操作系统
5. 关键软件生态
芯片最难的其实不仅仅是大家熟知的制程和工艺,最难的是指令集。一个不开放的指令集,会导致很多开源软件的代码分支没有这种指令集。而现代操作系统早已离不开开源软件,没有对应的指令集,基本上就要对每个开源组件都手动增加指令集分支的代码,而指令集分支的代码是大量的 #ifdef 代码,50个人折腾一年后,一旦上游软件改了代码,手动迁移适配的工作量极大,就像一提花生一样,一环套一环。大家说,为什么不贡献设备到开源社区?因为一个用的很少的芯片,对于上游开发者也是负担,没人用,每天还要维护这个分支的代码,累。
编译器是开源社区很难理解的难,因为编译器和芯片指令集是绑定的。开源社区大家升级GCC版本觉得很简单,但是一个新的芯片的编译器和芯片的指令集相关。因为你芯片做了任何创新,比如多媒体指令,向量加速指令,AI算子加速指令等等。这些都需要通过编译器翻译,才能让软件用得上这些指令集。所以,你要大量改GCC,让软件编译的时候自动能用上这些新的指令集,这里工作量巨大。最难的还不是这里,而是GCC影响的底层软件太多了,不能有bug,如果有bug会导致你以前编译的软件要全部重新编译,不要问我为什么知道,说多都是泪。 操作系统的基础软件重新编译一遍最少需要1个月的时间,比LFS难一万倍。
基础软件组件,比如性能分析工具、浏览器引擎、Python、各种数学库。基础软件最麻烦的就是这些带数学库的软件,现代很多先进编程语言的指令集优化不受GCC影响,比如golang,haskell都自带编译器和数学库,这些语言的移植和上面GCC一样难,需要既懂X86指令集,又要懂新的芯片指令集,还需要熟悉新的编程语言,还要数学功底强。虽然没有GCC影响面大,但是工作量非常大,专业编译器团队也要花一年时间才能稳定一个版本。
操作系统相对于前面三个来说,虽然底层难度不大,但是上层的难度在于应用软件的支持和用户习惯。想要说服成千上万的软件厂商维护你操作系统的版本非常难,你首先要证明你用户量大,否则没人支持。 而你面对的是先有鸡还是先有蛋的问题。而自己造的话,只能造一些通用软件。比如专业点的,Office、CAD、PS等,操作系统厂商本身也不专业,因为你软件工程能力再强,也缺乏这些行业多年的行业认知。
关键基础软件生态,最典型就是类似CUDA这种护城河。即使你跨越了前面几座高山,每座高山都损失30%的性能,到了专业赛道以后,想要弯道超车非常非常的难。因为别人用CUDA搞钱,你想要别人当小白鼠,基本没人会理你。
而操作系统软件生态最难的是,用户和行业的习惯,他们习惯于某一个生态的文档,习惯于出了问题网上可以抄答案。 来到一个新的生态, 99%的厂商都没有底层软件调试能力,一个出错可以保证你全网都没有一篇解决方案,最后生态合作伙伴的老板每天思考的问题是,等你平台跑起来,我都饿死了。
所以,操作系统的软件生态发展只有两条路:
1. 浪潮: 新的赛道,新的浪潮,所有人都是0起步,只要可以赚钱,再烂的操作系统都有人用,比如智能手表,智能门锁,电动汽车等
2. 补贴: 国家巨大的补贴,生态发展起来了给国家省钱和增加贸易谈判筹码,但是结果大家也知道,补贴的市场容易缺乏长远竞争力
懒猫微服的操作系统是我们耗时3年研发,瞄准家庭服务器和AI Agent赛道,三层操作系统架构设计,怎么折腾都不会挂,商店1000多个应用,好玩好用。