第29期 | 一万行代码里,凭什么是这八个目录?
(第3章。切口:0.01版:一万行代码的骨架里有什么)
一、七个目录,三十年没挪窝
1991 年 9 月 17 日放出的 0.01,解开压缩包,里面躺着 8 个目录:boot/、fs/、include/、init/、kernel/、lib/、mm/、tools/,外加一个 Makefile 和一份 README。10,239 行代码(去掉注释空行剩 8,670 行),66 个系统调用——一个人一晚上能翻完的体量。
8 个目录的分工,一句话能说完:boot/ 负责把机器叫醒;kernel/ 管调度、中断和系统调用;mm/ 管内存——只有两个文件,memory.c 加 page.s,当年的内存管理简单到两文件装得下;fs/ 是最大的一块,19 个文件,单文件最长的 namei.c(路径解析)678 行;lib/ 是用户态用的字符串小函数库;include/ 躺着 12 个头文件;init/ 里只有 main.c,147 行,操作系统的总入口;tools/ 里 build.c 负责把引导扇区、setup 和内核拼成一张可启动软盘镜像。
Linux 0.01 的 8 个目录与分工;其中 7 个在今天的 Linux 6.x 源码树里还在原地
反常识的在后头:这 8 个目录里,boot/ 后来搬进了 arch/x86/boot/,剩下的 7 个——kernel/、mm/、fs/、include/、lib/、init/、tools/——在今天 Linux 6.x 的源码树里,还在原地,名字一个没改。一万行长成三千六百万行,目录名没动过。这就是"骨架"的意思:肉会长,骨架不换。
骨架里"没有的东西",和"有的"一样诚实:66 个系统调用里没有 socket 相关的——网络压根没进 0.01,TCP/IP 要等到 1.0(1994)才来;没有可加载模块(那是 1.2、1995 年的事);只认 8MB 内存;mount/umount 干脆返回 ENOSYS——不会就是不会,写在发布说明的缺憾清单里。一个操作系统敢发布,先诚实交代自己不会什么。
孙过庭《书谱》里有一句:"初学分布,但求平正。"(化用)0.01 的目录,就是初学分布:先把几块摆平正,险绝是往后三十年的事。目录划分看似工程习惯,其实是世界观——Linus 1991 年对"操作系统由什么组成"的全部理解,就凝固在这 8 个名字里。
二、AI 的 0.01,不叫 kernel
如果 AI 先做操作系统,它的 0.01 不会有 kernel/ 这个目录。
Linux 的目录是按"硬件资源"划分的:内存归 mm,文件归 fs,进程归 kernel。这是一个"管理者"的眼光——管的是机器里的东西,是冯诺依曼时代留下的划分法:机器是房东,OS 是管家,目录是账本上的科目。
AI 先做 OS,划分不会按资源,而会按"心智功能":感知、记忆、行动、世界模型……或者更进一步,按"关系"划分——之前那期量子追问里埋过一条线:量子计算的天然语言是"关系"不是"对象",未来的 OS 可能从"管理对象"(进程/文件)转向"管理关系"(谁依赖谁、谁影响谁、谁欠谁一个回答)。
《金刚经》有言:"是法平等,无有高下。"(化用)范式无高下:按资源分,不比按心智分高贵;按心智分,也不比按关系分先进。各从其用。AI OS 的第一课不是抄 Linux 的目录,而是敢给自己的世界重新起名字——名相皆是假名安立,起名的勇气,就是破相的勇气。
范式之眼再看一层:目录划分本身就是旧抽象的化石。kernel/mm/fs 这套科目,是为线性指令流、为"CPU 是算力主体"的时代设的;今天算力的主体是向量阵列,调度该按算力阵列的占用排,内存该是向量/张量空间——科目不变,账就记不平。AI OS 的目录,得是新硬件的形状。
三、一条命令,数一遍一万行
今晚就能动手,下载地址上期验证过,是通的:
cd /tmp && wget -q https://www.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz && tar xzf linux-0.01.tar.gz
ls linux/ # 8 个目录,对着上面的图看
find linux -type f | wc -l # 数文件,看是不是 88 上下
cat linux/README | head -30 # Linus 自己写的发布说明,口气值得细品
三个可观察的现象:第一,fs/ 是最大的一块——1991 年的文件系统比调度器还重,因为"把字节存下来别丢"是当时最硬的需求;第二,mm/ 只有两个文件——内存管理当年简单到两文件,今天 mm/ 下是几十万行,膨胀倍数全内核第一;第三,include/ 里 12 个头文件,目录即契约——头文件定义了各块之间"许诺"给对方的东西,契约先行,三十年后还是这个规矩。
映射到今天的实践:手边任何一台能跑本地模型的机器上,可以让模型数一遍现代内核的目录,对照 0.01 的 8 个,看"骨架"是怎么被肉撑大的;一块边缘计算盒子,解压 0.01 读一遍,再小的板子也装得下一万行;视频 AI 平台和企业私有智能中心的代码库,也可以拿"目录即世界观"照一照——你的目录,是在按资源分,还是按心智分?
觉 然 小 注
目录会老,划分不会老。划分的从来不是代码,是看世界的方式。
引 用 与 出 处
- Linux 0.01 源码(kernel.org Historic 存档),https://www.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz
- "Exploring the internals of Linux v0.01",seiya.me,https://seiya.me/blog/reading-linux-v0.01
- "Linux kernel version history",Wikipedia,https://en.wikipedia.org/wiki/Linux_kernel_version_history
- "Linux Kernel Architecture",linuxcollective,https://linuxcollective.github.io/docs/linux-kernel/
- 孙过庭《书谱》(垂拱三年,687)墨迹本引文,"初学分布,但求平正"(化用已注明)
- 《金刚般若波罗蜜经》鸠摩罗什译本,"是法平等,无有高下"(化用已注明)
· · ·