@
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,那运行的性能未必比静态语言差。设计之初的目的就在于此。写出高效的不容易,写个能用的还是不难的。各种编译器优化,真正和操作系统绑定的很少。要么是预处理阶段的逻辑优化,要么是和硬件特性(指令集)绑定。操作系统作为一个中间人,任务是管家,对用户态程序运行的干扰越小越好。这也正是操作系统开发的难点所在。很多任务需要在几百个指令内完成。