惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
博客园 - 【当耐特】
量子位
Engineering at Meta
Engineering at Meta
博客园_首页
大猫的无限游戏
大猫的无限游戏
IT之家
IT之家
V
Visual Studio Blog
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
Jina AI
Jina AI
The Cloudflare Blog
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
博客园 - 聂微东

Linux

libcr 项目发布高性能相册应用 crPhotos 1.7.0 , 新增 Android 相册同步功能 - V2EX 开源: Linux NVIDIA 虚拟显示器方案,无需 HDMI 欺骗器 - V2EX 高性能瀑布流相册应用 crPhotos 1.5.0 发布,新增图片中的文本识别和选择 - V2EX 高性能瀑布流相册应用 crPhotos 1.4.0 发布,新增照片和视频的人物自动分类 - V2EX libcr 项目组发布瀑布流模式照片应用 crPhotos 1.0.0 for Linux - V2EX crPhotos - 支持 Linux 的瀑布流模式的照片浏览器 - V2EX 旧的安卓手机变服务器 - V2EX 发现了一个 btrfs 的 bug,有没有 v 友一起来看下? - V2EX 求助:有没有无影响检查 /etc/fstab 的可靠方法? - V2EX 《铜豌豆 Linux 》12.15.1 版本发布 - V2EX Grok-Bot Linux 原生 0.20.0 版本 - V2EX 借助语音大模型,实现 Linux 下的语音输入,邀请 Linux 桌面用户试试 - V2EX RustDesk 现已支持 Wayland 无人值守远程访问 - V2EX 看到 AI 让 Linux 变得真正可用了帖子,想问下现在最推荐的是 Linux 发行版是哪个呢 - V2EX AI 让 Linux 变得真正可用了 - V2EX 给 Noctalia 做了一个 Mihomo / Clash 控制插件 - V2EX 用起来比较舒服的 Linux 桌面 Niri+DankMaterialShell - V2EX Linux 输入法求助 北通手柄 Linux USB 断连排查与修复 请问: Linux 系统下,有没有好用的 [查找重复文件] 的软件? [震惊] 用 Firefox 播放一个抖音视频,我的 Linux 系统立马死机 强烈推荐一款性价比极高的 Linux 本搞 vibe coding Linux 下有没有可能实现 Listary 的快速跳转 AI 能用来全自动化解决 Linux 系统问题吗? V2EX › 登录 大佬们, Linux kernel 漏洞频发需要升级的问题,你们是怎么处理的? 为啥 ubuntu 搞个 wayland 这种不兼容的玩意出来 Linux 上的游戏网络加速 太好了感动哭了 chrome149 修复了 wayland+nvidia 的硬件加速问题 debian+gnome 开机后可以不显示用户列表 只需要输入密码 像 mac 那样么?有什么插件实现么
Linux 漫谈(一)
kuanat · 2025-12-24 · via Linux

Linux 漫谈

虽然标题是 Linux 相关,这篇文章和之后的续篇都会将三个主流的系统一起做对比,特别是设计图形界面和桌面的部分。其实鸿蒙系统也非常值得拿来一起对比,但我考虑到这个系列的切入视角是近三十年的发展史,所以就刻意回避了。

选择发布在 Linux 板块,主要还是为了避免无意义的口水仗。以我这些年的经历来看,Linux 用户的典型画像一方面是沉默的少数派,另一方面又往往是用爱发电的主力。所以互联网上的资料常常处于两种极端,要么很专业但要求读者有足够的认知门槛,要么就是语焉不详,甚至可能充斥着错误或者误导性的信息。

我写这篇文章的目的只是简单的想要回答一些为什么类型的问题,尽可能消除一些常见的技术误解。很早之前我就有写这个系列的构思,当时感觉如果要做完整清晰的论述,篇幅会非常长同时依赖大量的基础内容做铺垫。现在有了 AI 的辅助,我就将文章定位为 AI 的提示词,梳理好大纲脉络即可。

另一个目的算是我的私心,这篇文章也是阐述“为什么开发者应当学习 Linux”这样一个观点。我并不急于回答这个问题,而且我相信读过文章的你一定会有自己的理解。至于我把我的理解分享出来这个行为的动机也很简单,我从 Linux 上学到了很多,这些知识经验很大程度上影响了我的职业经历,某种程度上也影响了我的价值观,所以我愿意将这些精神财富再次分享出来。

0x00 前言

我先拿一个可能是误解最深的话题作为引子:“Wayland 协议加剧了 Linux 桌面的碎片化”。很多人会认为 Wayland 协议应当像 Windows/macOS 那样有个统一的标准,而不是现在松散、混乱的实现状态。

如果我告诉你这恰好就是 Wayland 追求的设计目标呢?你可能觉得我或者 Wayland 至少有一个疯了。如果我告诉你“提供机制而非策略( Mechanism vs Policy )”恰恰是 X 提出的,而 Wayland 继承了相同的精神内核,估计 X 的支持者也坐不住了吧?

详细阐述问题需要比较多的铺垫,之后的篇幅会做相应的解释。

如果你看过我之前发的文章、帖子,你可能会注意到我经常会用一个词“哲学”。所谓哲学就是回答为什么,如果再直白一点就是“小孩子才做选择,成年人当然是我全都要”的反面,技术领域中很多时候谈论好与坏,本质上是在谈论取舍。哲学的意义再具象化一点可以表述成“设计理念”,它往往有着具体的应用场景和时代背景,以借鉴总结为目的对错、好坏讨论是有意义的,为了宣泄情绪争个输赢属实没有必要。

当然也不是说就没有统一且普适的评判标准了,我之所以喜欢谈哲学就是因为,设计理念及其对应的实现手段是能体现出设计者智慧的。可以这样理解,人类历史上出现过的科学技术到今天可能都被新技术替代了,但是类似数学抽象、以及对物理世界的认知,一起构成了如今的科学技术框架。思想智慧的光芒是不会因为历史进步而被掩盖,反而会更加闪耀。

日常中我们也很少拿如此严苛的标准来评判一般事物,毕竟时间才是最强的检验手段,经得起时间考验的才是大智慧。

如果以图形系统作为后现代操作系统的分界线,目前 Linux/Windows/macOS 差不多都经历了二三十年的发展。关于操作系统好坏的争论一直没有停过,且很少有人讨论好在哪里或者坏在哪里。又或者是没人回答这类问题:那么多开发者竟然解决不了某某问题、为什么某某系统就做不到等等。

与其说我要系统性回答各种疑问或者解析各个误解的原因,不如说是我要回答“为什么某某操作系统会是现在这个样子”,或者“它为什么要这样设计”。三个系统演化成今天的形式,简单说和它们最初的设计思路是分不开的,最初的框架定型之后,想要再改就很困难了,谁都离不开一层层打补丁,这个打补丁的过程又重新巩固了原有的设计。

我相信以今天的视角来看,我们是能够给出比较客观的评判的。

0x10 现代操作系统的基础

为什么需要操作系统?

这个问题似乎简单到不需要思考,那我为什么要把它单独拿出来?因为在我看来,这个问题的答案就如同逻辑三段论中的大前提,后续一切讨论都建立在这个大前提之上。

在操作系统出现之前,可以认为计算机是“单任务”的,即单一程序直接在硬件上运行,通过人工外部手段切换应用程序。随着硬件技术的进步,彼时的开发者迫切需要某种能够让多个应用程序以纯软件的方式共享硬件资源的机制。

这个机制并不完全等同于现代意义上的“多任务”,但在逻辑层面上,二者都是基于“时分复用”这个思想的,甚至人工“单任务”也可以理解为时间片尺度非常大的复用系统。

回到计算机硬件上,核心计算单元 CPU 只是机械地按照程序计数器( PC )以及栈指针、寄存器中的数据来执行相应的指令,如果要实现在多个应用程序之间进行切换,实际上只需要实现这个环境保存及恢复机制即可。

这就是对于操作系统最原始的需求。

0x11 内核

如果说图形操作系统的分界线是图形界面,那么现代操作系统的分界线就是内核。所以现在的问题是内核又是怎么来的,要解决什么需求。

现在操作系统的雏形源自 Unix ,估计绝大多数人并不知道它的原始含义。有个戏谑的说法是它代表 uniplexed 也就是单路非复用的意思,与它相对的是 multiplexed 今天一般叫做多路复用,而 Unix 取这个名字就是为了与当时名为 Multics 操作系统的设计做区分。

尽管 Multics 在商业和软硬件技术上都很失败,但它的理念是超越时代的,所有 Unix 之后的现代操作系统都是建立在它的设计思路之上。

内核或者更准确地说保护环( Protection Rings )这个概念是 Fernando Corbato (图灵奖得主)在六十年代提出的,在当时的背景下,它旨在解决原始操作系统面临的安全性问题。Multics 的设想是,将庞大昂贵的计算机安全、方便地共享给多人使用,所以提出了环这个概念。同时 Multics 和通用 GE-645 的合作,增加了硬件环支持也是第一次软件需求影响硬件设计的例子,后面这样软硬件相互影响进化的例子就非常普遍了。

为了避免某个应用影响到其他程序,或者影响到操作系统本身,就让操作系统运行在 Ring0 最高权限,而应用程序运行在 Ring3 权限。同时为了解决内存昂贵且管理复杂的问题,Multics 还提出了虚拟内存的概念,包括动态链接技术在内的很多设计都是源自 Multics 操作系统。(还包括 ACL 访问控制列表概念,以及 / 代表的树状目录结构,这里就不展开了)

虽然 Multics 的理念很先进,但受限于当时的技术水平,实现层面却比较失败。后来 Ken Thompson 和 Dennis Ritchie 离开项目,发展出了 Unix 项目。对于环的模型也简化成了 Kernel/User 空间的划分,操作系统就演变成了内核和用户空间辅助程序的组合。

为了准确表述起见,后面提到操作系统的时候都会以其内核的名字来称呼,Linux 自身就是内核名字,Windows 目前的内核依旧称作 NT ,而 macOS 内核的正式名称为 XNU(X is NOT Unix)。

0x12 设计哲学

是的,我又要谈哲学了。

从 Unix/Multics 的对比可以发现,即便理念相同,在具体实现上也会存在巨大的分歧。而从 XNU 这个名字,以及后续 Linux 这个名字,也能看出操作系统发展的脉络。对于不同的设计者而言,他们追求的理想目标不同,在满足操作系统这个基础需求时的解决思路也不同,这便是哲学上的分歧。在后面我们能看到不同的哲学对于操作系统发展带来的巨大影响。

由于 Unix 不在这个系列主要的讨论范围内,这里就总结一下 Unix 影响后世的几个重要哲学观念:

  • Do one thing and do it well. 和 KISS(keep it simple and stupid) 基本是一个意思,这个理念与 Multics 大而全的理念恰恰相反,影响了 awk/sed/grep 等等一系列软件的发展。

  • Worse is better. 这个理念的影响主要是 C/Lisp 的语言,前者是追求工程简单,后者追求形式正确。我更愿意称之为工程派和学院派,为什么 XNU 要强调自己不是 Unix ?因为它诞生于学院派,和 Lisp 一样都追求形式上的正确和美。

  • Everything is a file. Linux Torvalds 称这是 Ken Thompson 最优雅的设计,伟大无需多言。

我觉得到这里已经很明显了,哲学观点属于润物细无声的存在,影响的是对同样事物的不同看法,进而影响做同样事情的不同选择。还是那句话,好和坏都是相对的,对错不重要,为什么更重要。

0x13 对比

铺垫了这么久,终于可以开始对比了。如果说继承 Unix 衣钵的 Linux 算作工程派,XNU 出身学院派(卡内基梅隆大学 Richard Rashid ),那么 NT 应当算作激进的先锋派。

顺便一提,NT 内核的核心设计是 Dave Cutler ,他主导设计了 VMS(Virtual Memory System),后来成为了 NT 虚拟内存的核心。他最出名的一句话是 Unix is a junk OS designed by a committee of PhDs。鄙视链真是无处不在啊……

在 Unix 诞生之后,操作系统内核的基本框架就确定了。现代内核无论是 Linux 还是 NT/XNU ,最基本的功能模块都包括任务调度和虚拟内存,只是实现层面存在差异。然而不管是哪一派,都不约而同将文件系统、网络栈和硬件驱动放到了内核中。

从技术上讲,Linux 是纯粹的宏内核( Monolithic )设计,而且 Linus Torvalds 对此和 Andrew Tanenbaum (微内核之父)有过一场辩论,Linus 认为在九十年代微型内核的性能开销是不可接受的。这种设计下所有的内核功能模块都运行在同一个地址空间。(一般现在说的纯微内核( MicroKernel )指的是 Minix/L4 这种,因为性能问题基本没有桌面应用,也就不展开了。)

至于 NT 和 XNU ,学术层面一般的说法是混合内核( hybrid ),因为它俩都是设计上的微内核,但也都在实现上采用宏内核的方案。

NT 内核的设计者 Dave Cutler 受微内核思想影响,将 NT 内核设计成了很多的子系统,比如 OS/2 和 POSIX 子系统,甚至后来 WSL(windows subsystem for linux) 和 WSA(windows subsystem for android) 都得益于这个设计,后来连 GDI 和 http 服务器也都塞进了内核。XNU 则基本上是把 BSD 的网络栈、文件系统实现直接链接进了内核。当然本质上,NT/XNU 还是和 Linux 一样只有一个地址空间的,只是它们不推荐像 Linux 一样自由访问。

真正的区别在于以下两个问题:

  • 是否将 IPC 放到内核里。 准确的说法应该是:内核各个部分之间依赖直接函数调用进行交互,还是依赖特定协议的 IPC 消息进行交互。

  • 是否将图形系统放到内核里。

在这两个问题上的不同抉择才是真正影响几个操作系统如今不同形式的根本原因,IPC 和图形系统恰恰也是对桌面体验影响最大的两个部分,如果要谈论桌面系统的话题,归根结底都会回到这两个系统的设计上。

说到底,这几个内核的追求都是一样的,既要保证安全,还要追求性能,但在这两个关键问题上走出了不同的路线。


PS 感谢各位没有让 AI 总结而是人工阅读。这会是一个比较长的系列,分开发布一方面是因为确实太长了,另一方面也是想根据反馈来调整后续内容的结构顺序和内容侧重。