← EasyTool.me

WSL9x:在 Windows 9x 里跑现代 Linux 6.19 内核

Published: 2026-05-17 Reading: 7 min 复古计算 / Linux 内核

Hacker News 上最近出现了一个让人目瞪口呆的项目:WSL9x —— 把现代 Linux 6.19 内核协同运行在 Windows 9x 里面。不是虚拟机,不是容器,是通过 VxD 驱动直接嵌入 Win9x 内核。

README 里还特意写了句:"Proudly written without AI."

WSL9x 是什么

WSL9x 是一个三组件系统,能让 Linux 用户态程序和 Windows 9x 程序并肩运行,不需要重启。你可以把它理解为微软 WSL 的精神逆向版——只不过不是在 Win10/11 上跑 Linux,而是在 Windows 95/98/ME 上跑。

三个组件分别是:

技术细节

整体流程是这样的:

  1. VxD 驱动(vxd/wsl9x.asm)通过 DOS 中断从磁盘加载 vmlinux.elf
  2. Linux 内核编译时固定基地址为 0xd0000000
  3. 在 System VM 中启动新线程,分配 16 KiB 栈用于进入 Linux
  4. 驱动进入事件循环,处理内核入口、IRQ 分发、用户态返回和空闲状态

Syscall 的骚操作

最有创意的部分:Windows 9x 的中断描述符表不够长,没法给 int 0x80(Linux i386 syscall 中断)装正经的处理函数。所以 WSL9x 用了 通用保护故障(GPF)处理器来代替。

当 GPF 发生时,处理器检查触发异常的指令。如果是 int 0x80,就把指令指针往前挪(假装中断成功了),然后把调用分发给 Linux 处理。优雅和恐怖并存。

Win9x 和 Linux 的上下文切换

Linux 侧的代码在 arch/um/os-Win95/ 目录下,负责两个操作系统之间的上下文切换。入口点是 main.c 里的 _startprocess.c 管进程调度,mmu.c 管内存管理。

为什么这个项目很牛

核心成就:WSL9x 让 Windows 9x 获得了分页、内存保护和抢占式调度的能力——这些恰恰是 Win9x 自己一直搞不定的东西——方法是跑一个现代 Linux 内核来补位。

来感受一下这意味着什么:

怎么编译运行

想自己试试的话,需要准备:

源码在 Codeberg,修补过的内核分支在 GitHub

更大的图景

WSL9x 坐落在几个有趣趋势的交汇点上:

这也提醒我们,Windows 9x 虽然以不稳定著称,但它的内核架构其实相当能打——VxD 模型虽然危险,但恰好能实现这种深度系统集成,而现代 Windows 已经基本把这条路堵死了。