受 WSL 启发,开发者创建了一个 DOS Subsystem for Linux

在大流行导致的封锁期间,一位来自墨尔本的开发者 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:doslinuxdsl 来运行 Linux 命令(也可以将 C:doslinux 放在你的 DOS PATH上,这样会更方便)

目前,DSL 已经在 MS-DOS 6.22 和 FreeDOS 中进行了尝试。

Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.
You need to agree with the terms to proceed

Menu