采访:James MacLean
Linux 期刊: 请向我们介绍一下 DOSEMU...
James: Linux 的 DOS 模拟器始于几年前,当时 Matthias Lautner 创建了一个 Linux 应用程序,该程序可以从软盘加载 DOS,然后完成一些基本的 DOS 命令。那时,我记得有时可以运行一个编辑器,而其他 DOS 程序则显示出启动的迹象,但应用程序崩溃了。总而言之,这给我留下了非常深刻的印象。
然后 Robert Sanders 加入进来,在很短的时间内,他协调并投入了足够的精力,使 DOSEMU 开始支持 DOS 程序期望的许多必要的底层模拟。
从那时起,我们大约十几个人接受了进一步提高 DOSEMU 的 DOS 兼容性并提高其性能的挑战。到目前为止,我们可以运行各种各样的 DOS 应用程序,从文字处理器到数据库软件包,从图形软件包(现在包括 Windows 3.0 到一定程度)甚至到一些游戏(虽然速度很慢)。
Linux 期刊: 请向我们介绍一下您自己...
James: 我第一次接触计算机是在大约 9 年级的时候,当时我的父母买了一台 Texas Instruments 99/4a。我很快就被我那杂乱无章的头脑如何编写看起来对最终用户来说相当有条理的 BASIC 代码所折服。所以自然而然地,我开始创作游戏,并且实际上卖掉了一些。我最难忘的一款是“Oil Suckers”。当然,那时我就知道我想要从事什么职业了 :-)。随着时间的推移,我学会了如何从机器代码向上编程那台计算机,并且一直梦想着创建自己的多任务操作系统,因为我看到计算机的时间浪费了多少。(所以很自然地,我羡慕 Linus,我希望他不介意我们中的一些人通过他来过着替代的生活 :-)。)
然后是大学,在那里我实际上失去了继续从事计算机事业的部分雄心壮志。幸运的是,在我毕业的那一年,我开始在省政府的数据中心担任操作员,那是一个 IBM 3090 MVS/JES3 商店。从对大型机的强大功能感到惊讶开始,我再次迅速学习尽可能多的关于我必须使用的系统的知识。正是由于这种兴趣和不断增长的知识库,我很快就得到了 JES 这个绰号。
然后我的工作搬到了教育部,在那里我是一个单人团队,负责我们部门的内部事务。这是我第一次真正使用 PC,我又发现它只能运行一个程序(DOS)的能力有限。后来,我们的 M.I.S. 协调员启动了一个试点项目,看看互联网是否会对部门有任何好处。幸运的是,当时我提到了我对重新接触 Unix 的兴趣,那是我们在大学里使用的系统,他提到《Byte》杂志刊登了一个名为 Linux 的免费类 Unix 操作系统的 ftp 地址。从那时到现在,一直是一段有趣的过山车之旅,运行着强大的操作系统,担任其中一个项目的协调员,并且每天学习足够多的新东西。
Linux 期刊: 是什么让您对 DOSEMU 感兴趣?
James: 一旦我安装了 Linux,我就意识到我们的部门(和我自己)使用了许多基于 DOS 的程序。我一直在 4MB 系统上运行 OS/2 2.0,并且觉得我的一些 DOS 应用程序应该能够在 Linux 下运行。我听说过这个 DOSEMU 应用程序,据说它相当原始,但可以做一些事情。我想在我运行它之后,我意识到我对 Unix 知之甚少,并决定徘徊在周围,倾听 DOSEMU 的任何进展。
然后 Robert 出现了,突然之间,我的许多 DOS 应用程序要么正在运行,要么几乎正在运行。这促使我开始摆弄代码,将我的一些更改传递给 Robert,并最终协调了这个项目。
Linux 期刊: 您的技术背景是什么?
James: 嗯,我拥有计算机科学专业的理学学士学位,但我感觉我真正的背景来自我所拥有的经验;从编程 TI,到为 IBM 3090 自动化程序,再到长期、认真地研究 DOS 和 PC 的内部结构。我用多种语言编程(难道我们不是都这样吗 :-)),并且似乎从内到外很好地掌握了 Unix。我能够在管理员级别讨论 TCP/IP 和 Novell,并且在技术级别上越来越多,但还没有在网络级别进行编程,除非你算上 PERL 中的一些小脚本。
Linux 期刊: 您对使用 DOSEMU 最感兴趣的是什么?
James: 我认为我对 DOSEMU 最感兴趣的是我对 Linux 最感兴趣的东西。我使用它的次数越多,我就越意识到它能做什么。源代码就在那里,唯一的限制似乎是时间和想象力。当 DOSEMU 添加了一些可以工作并帮助他人的东西时,我感到非常欣慰。迄今为止,超越任何其他操作系统,运行 Linux 真的似乎有一种自豪感,对我来说,成为 DOSEMU 团队的一员也是如此。
Linux 期刊: 请告诉我们 DOSEMU 提出的一些技术挑战,以及您如何解决这些挑战。
James: 我们遇到了许多技术挑战,但我可以为此邀功的解决方案却很少。一个很好的例子是我们现在能够在 DOSEMU 将支持的硬件上从 DOS 中运行图形程序。我们首先着手创建我们自己的例程来处理保存和恢复所有必要的信息,以更改视频模式。然后 Robert Sanders 意识到只需调用已经为每张卡安装的实际视频 bios 并使用它。这个小小的改变使 DOSEMU 变得更加实用,而且没有人必须为每张卡编写模式更改代码。
我们还一直在尝试创建可靠的串行支持,为此我有一个程序甚至无法在 OS/2 的 DOS 下正确运行。但是,在 Mark Rejhon 勤奋地扫描了数千字节的调试输出后,他能够使这个程序以及许多其他程序运行起来。
重定向器中也缺乏对 FCB 处理的支持。当然,这在任何地方都没有记录,但当我决定获取一份《Undocumented DOS 2》的副本时,我侥幸发现了它。它有足够的信息来帮助我粗略地添加额外的代码,从而允许使用 FCB 的程序运行。
对我来说,最令人愉快的修复是许多将其堆栈从 0x0000 开始的程序出现的堆栈环绕问题,当然也向后环绕 (0xfffe)。我们总是有许多程序无法运行,而且我在调试列表中看不到任何可以解释原因的东西。然后,我从一个人那里得到了一小段代码,这个人想知道为什么某些东西只有在以特定方式编译时才能运行。有了这段代码,我开始通过调试来查看它,并注意到该程序似乎在反向运行。非常奇怪,所以我四处询问并得到了一些好主意,但都没有奏效。然后,当我的头发只有以前一半多的时候,我注意到堆栈中没有包含本应压入堆栈的内容。突然我明白了,当从 seg:off 对创建一个线性地址时,0 - 2 <> 0xfffe。它不是在偏移量处环绕,而只是从线性地址中减去 2。这个小的额外代码增强功能启动了许多程序的运行,其中对我来说最重要的程序之一是 Netware 的 lsl。Linus 已经为处理这种情况创建了一组更好的函数,并将它们添加到内核的 vm86 函数中供我们使用。
最近发生的最引人注目的变化之一是由于 Lutz Molgedey。在出现关于在较低(内核)级别捕获 DOSEMU 使用的信号的一些讨论之后,Lutz 询问这是否是一项值得的任务。我非常诚实地知道我说过一些类似于我不相信速度提升会那么大的话,但如果他想尝试,那就继续看看他能想出什么。不久之后,非常令我惊讶的是,他已经完成了必要的第一层内核更改,而 DOSEMU 开始像脱缰的野马一样运行。速度的提高是巨大的,我们都觉得值得给我们一个我们将使用的 DOSEMU。
Linux 期刊: 您最喜欢 DOSEMU 的哪些部分?
James: 我发现重定向器很有趣,因为我可以动态重定向 Linux 拥有的任何目录。连接到我们的 Novell 服务器并使用 Netware Lite 的能力也使它对我来说更加实用。我想说的是,从负责这个项目的角度来看,我总是对来自世界各地的输入印象深刻,从想法到补丁,以及真正享受每个隔周六坐在 #Ldosemu IRC 频道上与来自世界各地与我分享共同兴趣的人们交谈的乐趣。
Linux 期刊: 您想更改哪些部分?
James: 我认为我们都会同意代码仍然需要一些清理。新用户的安装仍然太原始,应该有更多的文档,或者一个前端来询问逐步安装问题。我希望看到更好的网络支持,例如从 DOS 中使用 Linux 已知的网卡进行 TCP/IP。
Linux 期刊: 您还有什么想说的吗?
James: 我真的想感谢所有组成我们 DOSEMU 团队的黑客,以及所有发送补丁或只是沿途提出建议的人。
可以通过电子邮件 jmaclean@fox.nstn.ns.ca 联系 James B. MacLean。