
你是否认为 64 位指针提供的 $2^{64}$ 寻址空间是“无限”的在 2022 年 Linux Plumbers Conference 上内核大牛 Matthew Wilcox 提出了一个大胆的预判2035 年左右64 位地址空间将面临枯竭。为了避免重蹈 32 位转 64 位时的技术债覆辙Linux 社区必须现在就开始规划 “ZettaLinux”——支持 128 位寻址的下一代系统。一、 为什么要搞 128 位不仅仅是内存大小很多人觉得 64 位已经足够大但历史总是惊人的相似。当年 32 位系统在处理超过 2GB 的文件时开发者不得不引入llseek()等蹩脚的补丁。1. 文件系统与寻址的压力根据行业增长曲线预测2035 年寻址空间可能突破 64 位极限。2040 年单个文件大小可能需要 128 位来表示。2. 安全性的刚需安全专家指出128 位指针不仅仅是为了“大”更是为了“稳”ASLR地址空间布局随机化位数越多随机化的熵值越高黑客攻击难度呈几何倍数增加。内存标记技术像 CHERI 架构已经实验性地使用129 位指针利用多出的位来进行内存标签Tagging和边界检查从硬件底层防御溢出攻击。二、 核心挑战内核架构的“推倒重来”将 Linux 移植到 128 位架构绝不是简单的搜索替换64为128。1.long类型的百年难题在 Linux 内核中有一个根深蒂固的假设long的大小 CPU 寄存器大小 指针大小。初衷Wilcox 曾想保留long为 64 位让指针变为 128 位。现实这会破坏无数现有的内核代码。结论在 128 位 Linux 中long必须强制升级为 128 位。2. 类型系统的演进向 Rust 靠拢既然long变了那么 64 位整数该叫什么Wilcox 建议抛弃模糊的long long转而采用类似Rust的显式命名方式i32/u32(32位)i64/u64(64位)i128/u128(128位)3. ABI 与兼容性陷阱未来的 128 位内核需要同时支持32 位和64 位的遗留应用。这要求系统调用接口ABI进行重新设计。Wilcox 甚至提议将用户空间的指针类型__ptr_t直接设为256 位为更遥远的未来预留空间。三、 实施路径从虚拟到现实这种级别的重构工作量巨大社区给出了两条可能的路径分步走策略Arnd Bergmann 建议先实现支持 128 位指针的用户空间但保持内核核心运行在 64 位。这种“大用户、小内核”的模式可以降低初期开发难度。硬核移植将其视为一个全新的 CPU 架构移植工作。目前RISC-V已经在定义 128 位扩展这可能成为 ZettaLinux 的第一个试验场。在硬件普及前开发者将主要通过QEMU模拟器进行测试。四、 总结不要等到火烧眉毛“我非常不希望未来出现一个lllseek()来支持 128 位偏移。” —— Matthew Wilcox32 位转向 64 位时产生的CONFIG_HIGHMEM高端内存机制至今仍是 Linux 内核中的一段“痛苦记忆”。Wilcox 的呼吁核心在于在技术红利耗尽前先完成架构的优雅演进。虽然 2035 年看起来还很遥远但对于一个支撑全球基础设施的操作系统内核来说现在开始规划刚好来得及。