前有WSL,现在又有DSL
一位来自墨尔本的开发者 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,你必须:
在 PATH 上有一个针对 i386-linux-musl 的交叉工具链。
通过运行 J=xxx script/build-prereq 来构建依赖环境(Linux 和 Busybox),将 xxx 替换为所需的 build parallelism。
获取硬盘镜像 hdd.base.img,并在第一个分区上安装 MS-DOS 的副本。
运行 make(这将创建一个新的硬盘镜像 hdd.img,并安装 DOS Subsystem for Linux)
调用 C:\doslinux\dsl <command> 来运行 Linux 命令(也可以将 C:\doslinux 放在你的 DOS PATH上,这样会更方便)
目前,DSL 已经在 MS-DOS 6.22 和 FreeDOS 中进行了尝试。