在大流行导致的封锁期间,一位来自墨尔本的开发者 Charlie Somerville 创建了一个 DOS Subsystem for Linux(DSL)。这是一个 DOS 用户迄今为止从未拥有过的工具,类似于 Windows 10 用户通过 Windows Subsystem for Linux(WSL)所享受的集成 Linux 环境。
Somerville 称,他是受到了微软 WSL 的启发,写 DSL 纯粹是为了好玩。一开始,他只是想看看能不能让 Linux 从 DOS 命令行启动。成功之后,他就想更进一步的看看 Linux 运行后能否继续执行 DOS。让他没想到的是,整件事情进展得出乎意料的顺利。
对于喜欢在 MS-DOS 环境下工作的用户来说,DSL 就像一个 WSL 的替代品。DSL 将真实的 Linux 环境集成到 MS-DOS 系统中,使得用户可以在 DOS 命令提示符下运行 DOS 和 Linux 应用程序。
Somerville 在 Hacker News 的一个帖子中进一步揭示了 DSL 的工作原理。他指出,当 DSL 第一次在命令行被调用时,它将启动 Linux 内核,从 DOS 中接管计算机的控制权。
诀窍在于:DSL 使用了一种名为 VM8086 的处理器功能,它允许 32 位操作系统大部分原生运行传统的 16 位代码。这种在 VM8086 下运行 DOS 的方法其实就是早期 Windows、DOS 扩展器等的工作方式。此外,Linux 内核也支持 VM86,只不过并没有广泛使用。Somerville 认为,dosemu 是 Linux 上 VM86 的唯一主要用户。
然后,DSL 返回到 DOS,此时的 DOS 已经在 VM8086 任务中运行。值得庆幸的是,Linux 并没有出现抢占 DOS 内存的现象。Somerville 称,Linux 似乎在其自身的引导过程中保留了第一兆字节的内存(DOS 所在的地方),因此,只需跳回到正确的位置以继续执行 DOS 即可。
DSL 勉强能模拟键盘等硬件来实现工作,从而让 DOS 原始硬件能够访问其他所有内容 。值得注意的是,在同一硬件上同时运行两个操作系统,其实是非常不安全的一种行为。但尽管如此,Somerville 称,“它似乎工作得异常好。”
要运行 DSL,你必须:
目前,DSL 已经在 MS-DOS 6.22 和 FreeDOS 中进行了尝试。
(文/开源中国)