一个大学生如何创立了一个自由开源的操作系统

对 FreeDOS 创始人 Jim Hall 的采访。
79 位读者喜欢这篇文章。
Puzzle pieces coming together to form a computer screen

Opensource.com

Jim Hall 最为人所知的是创立了 FreeDOS 项目的计算机程序员。Jim 在 1994 年还在威斯康星大学河瀑分校读书时,为了替代 MS-DOS 而启动了这个项目。Jim 创建 FreeDOS 是为了回应微软在 1994 年停止对 MS-DOS 的支持。最近,Jim 同意接受电子邮件采访。通讯员 Joshua Allen Holm 与我一起向 Jim 提出了以下问题。

Don Watkins:什么样的技能组合会让你想要编写自己的操作系统?

我认为即使是初学者也可以开始编写像 FreeDOS 这样的操作系统,尽管编写内核需要更高级的程序员。

我是一名自学成才的程序员。我很小的时候就开始通过摆弄家里的 Apple II 电脑学习编程。后来,我学习了 C 语言编程——我的哥哥在我还是物理系学生的时候是计算机科学专业的学生,他向我介绍了 C 语言。剩下的部分我通过读书和编写自己的程序来学习。

我编写了很多小型实用程序,这些程序增强了我在 MS-DOS 上的命令行,甚至取代了某些 DOS 命令。即使只有基本的编程经验,你也可以编写很多这样的程序。只需 C 语言入门,你就可以编写文件实用程序,如 FIND、FC、CHOICE、TYPE、MORE 或 COPY,或者用户命令,如 ECHO 或 CLS。通过一些练习,你可以编写系统级程序,如 ATTRIB 或 COMMAND shell。

DW:当您决定编写自己的 DOS 版本时,Linus Torvalds 是否对您有所启发?这又是如何影响您的许可决定的?

在某种程度上,是的。我真的很喜欢 DOS,并且从 1980 年代初就开始使用它。我在大学的个人电脑上运行 MS-DOS。但在 1993 年,我发现了 Linux。

我非常喜欢我们校园计算机实验室里的 Unix 系统,作为大学本科生,我大部分时间都在那里度过。当我听说 Linux,一个我可以在家里的 386 电脑上运行的免费 Unix 版本时,我立即想尝试一下。我的第一个 Linux 发行版是 Softlanding Linux System (SLS) 1.03,带有 Linux 内核 0.99 alpha 补丁级别 11。那需要惊人的 2MB 内存,如果想编译程序则需要 4MB,运行 X windows 则需要 8MB。

我将 Linux 和 MS-DOS 双启动。我大部分时间都启动到 Linux,但我仍然会启动回 MS-DOS,以便在文字处理器中撰写论文,使用电子表格程序分析我的实验课数据,或者玩我最喜欢的 DOS 游戏。

1994 年,我听说微软计划“取消” MS-DOS。下一个版本的 Windows 将会淘汰 DOS。我不喜欢那样,我仍然想运行 DOS。我决定,如果人们可以在互联网上聚集在一起编写像 Linux 这样的东西,那么我们肯定也可以对 DOS 做同样的事情。毕竟,与 Linux 相比,DOS 相当简单。

1994 年 6 月 29 日,我宣布了“PD-DOS”项目,旨在编写我们自己的 DOS。我称之为“PD”,因为我认为它将属于公有领域。但我很快了解了 Linux 内核使用的 GNU 通用公共许可证,并认为那是一个更好的许可证。没有人可以拿走我们的源代码并创建一个专有版本的 DOS。大约一周后,我们将名称更改为“Free-DOS”。之后,我们去掉了连字符,变成了“FreeDOS”。

Joshua Allen Holm:与运行 DOS 应用程序的其他方式(例如,DOSBox)相比,使用 FreeDOS 有哪些优势?

使用 DOSBox 在 Linux 中运行 DOS 应用程序是运行某些 DOS 应用程序的好方法。但 DOSBox 实际上旨在启动单个 DOS 程序,例如游戏。DOSBox 中的 DOS 命令行功能非常有限。

相比之下,FreeDOS 提供了完整的 DOS 命令行。我们包含了您记忆中经典 DOS 的所有命令,并添加了其他命令和实用程序来完成新的事情。FreeDOS 还包括编译器和汇编器,以便开发人员可以编写新的程序、实用程序和工具,使您的 DOS 体验更有用,互联网程序可以帮助您连接到网络,甚至还有开源游戏。

JAH:回顾您多年来在 FreeDOS 上的工作,有什么事情是您会以不同的方式做的吗?

只有一件事是我希望可以撤回的。我偶尔会联系 1980 年代和 1990 年代销售 DOS 应用程序的公司,询问他们是否愿意在开源软件许可下发布其旧 DOS 程序的源代码。这是为开源社区做出贡献的好方法。

一个流行的 DOS 程序是 MS-DOS COMMAND shell 的替代品。JP Software 的 4DOS 是一个非常强大的 DOS shell,并包含许多现代功能。例如,4DOS 支持内置别名、彩色编码目录列表以及一种“交换”机制,可以释放更多常规内存来运行程序。

我联系了 JP Software,询问他们是否愿意在开源软件许可下发布 4DOS 的源代码。JP Software 已经停止支持 DOS,转而专注于 Windows NT 中 CMD shell 的类似替代品,称为 4NT。他们有兴趣发布 4DOS 的源代码,但担心有人可能会拿走 4DOS 的源代码并发布 Windows 版本。实际上,这将使 JP Software 与其旧产品竞争。

我当时仍然不了解开源软件许可的细微之处,我给了他们错误的建议。我建议他们可以从现有的开源许可证开始,并添加一个条款,规定你只能在 DOS 上运行它。然后,他们以修改后的 MIT 许可证发布了 4DOS 源代码。

不幸的是,限制软件的运行地点违反了开源软件和自由软件的原则之一。用户应该能够在任何地方、出于任何目的运行开源软件。如果开源许可证限制您只能在一个操作系统上运行它,那么它就不是真正的“开源”。

因此,尽管初衷是好的,但我当时给 JP Software 提供了非常糟糕的建议,而 4DOS 实际上并不是开源软件。我们曾经在 FreeDOS 中包含 4DOS——但当我们准备 FreeDOS 1.3 版本发布时,我们希望谨慎行事,只包含开源软件。因此,FreeDOS 1.3 RC4(“候选发布版 4”)不包含 4DOS。

JAH:人们使用 FreeDOS 的一些有趣方式是什么?

多年来,我看到人们使用 FreeDOS 做了很多非常有趣的事情!

最早的酷炫示例之一是有人制作了像您在街机中看到的那种弹球机。他嵌入了一个 FreeDOS 版本来跟踪得分并更新机器背面的视频屏幕。我不太清楚他是如何做到这一点的,但我的猜测是弹球板上的每个目标或保险杠都可能生成一个键盘事件。您可以编写一个 DOS 应用程序来读取“键盘”并据此更新分数。

几年前,一位用户找到了一段俄罗斯火车控制系统的视频 该系统运行在 FreeDOS PC 上。他们重启了计算机,如果您在正确的点冻结视频,您可以短暂地看到 FreeDOS 内核启动。它很快消失了,但您可以在视频的 0:07 处看到它。

最近,我看到有人设法从一张黑胶唱片上使用 5150 鲜少使用的盒式磁带存储端口启动了原始的 IBM PC 5150 上的 FreeDOS。看到 FreeDOS 以这种方式被使用真的很酷。这是一种我从未想过要尝试的方法,但有时你必须做一些事情只是为了好玩。

JAH:为什么要在 2021 年继续开发 DOS?

我们在 2021 年仍然开发 DOS 有几个原因。我想第一个原因是 DOS 仍然很有趣。多年来,我们为 FreeDOS 添加了很多东西。最初的 MS-DOS 命令集有限,而 FreeDOS 包含数十种有用的实用程序和工具,包括编辑器、编译器、汇编器、游戏和其他很棒的程序。

但这不仅仅是一个酷炫的爱好。我发现开发 FreeDOS 是一项非常有趣的编程挑战。在像 Linux 这样的现代系统中,你可以一次利用大量的内存,并且可以将所有内存作为一个大块来寻址。因此,许多程序员会加载大量的库和其他代码来创建他们的项目。这是一种构建复杂项目的非常简单的方法。你可以用这种方式在很短的时间内构建一个非常复杂的系统。对于许多系统来说,上市时间是最重要的因素。

然而,加载大量的库和其他代码块效率非常低下。您可能会在不同的库中以六种不同的方式实现相同基本功能,因为每个库都以自己的方式实现某些功能。因此,您的代码会增长并需要更多内存。

也许这在台式电脑上不是问题。我运行 Linux,我的现代台式电脑有 32GB 内存。将一堆东西加载到内存中没什么大不了的。但是在共享服务器上,如果您可能运行该项目的多个实例,您很快就会遇到内存限制。您可以在服务器上同时运行多少个实例?32GB 的内存开始显得非常有限。

您无法在 DOS 机器上将所有这些都加载到内存中。为了与原始 DOS 保持兼容,FreeDOS 具有 DOS 的所有限制。当 MS-DOS 流行时,一台强大的 PC 可能有 4MB、8MB 甚至 16MB 的扩展内存。但由于 DOS 处理内存的方式,计算机只有 640kb 的“主”内存。那是兆字节和千字节,而不是千兆字节。千字节是一千字节(内存的基本单位)。兆字节是一千千字节。千兆字节是一千兆字节。因此,今天的计算机的内存大约是 DOS 计算机的 1,000,000 倍。

通过在像 FreeDOS 这样的受限系统上编程,您必须不断考虑权衡。我的程序真正需要多少内存才能完成其工作?将文件读入内存进行处理是否更快,还是每次处理文件一位?并且您始终牢记在程序中使用的库和其他代码。DOS 程序只能这么大,因此您需要小心编写 DOS 程序的方式。

当您一直编写 DOS 程序时,您会非常擅长优化程序。您会以不同的方式思考编程,因为您始终在考虑如何更有效地做某事。这是一个挑战,但也是一个有趣的挑战。

DW:FreeDOS 社区有多大?

FreeDOS 在整个 1990 年代和 2000 年代初期是一个非常受欢迎的项目,但如今社区规模已不如以往。但很高兴我们仍然是一个积极参与且活跃的群体。如果您查看我们网站上的新闻项目,您会看到我们相当定期地发布更新。

很难估计社区的规模。我想说我们有几十个非常活跃的成员。我们还有其他几十个偶尔会重新出现以发布其程序新版本的成员。我认为能够维持一个活跃的社区,并且这个社区仍在开发 1994 年的开源 DOS,这是一个很好的迹象。

一些成员从一开始就和我们在一起,我真的很感谢能将他们视为朋友。我们定期进行视频聚会。很高兴终于“见到”那些多年来我只通过电子邮件交流的人。

正是像这样的聚会让我意识到开源不仅仅是编写代码;它关乎一个社区。虽然我一直与我们通过电子邮件交流的虚拟社区相处得很好,但我真的很感激能够与人们交谈,而没有电子邮件的异步延迟或人为过滤——建立这种实时连接对我来说意义重大。

DW:人们如何参与到社区中来?

我认为我们的社区非常欢迎新成员,所以任何人都可以自由加入。我们通过电子邮件列表进行交流,您可以在 FreeDOS 网站上找到该列表。如果您想讨论 FreeDOS 或寻求帮助,请加入 freedos-user 电子邮件列表。开发人员应加入 freedos-devel 电子邮件列表;那是大多数 FreeDOS 开发人员聚集的地方。我们的电子邮件列表量非常低,因此您不太可能通过订阅任何一个电子邮件列表来填满您的收件箱。

一个好的入门方法是编写或更新文档,或者修复错误。我认为这对于几乎所有开源项目都是如此。我们总是需要人们来编写文档和修复错误。但对于像 FreeDOS 这样的项目,我认为如果您是 DOS 新手,阅读文档非常重要。新手的常见错误是将 FreeDOS 视为 Linux 的精简版本,但实际上 DOS 使用不同的内存和执行模型。您可以通过阅读文档来了解这一点,这就是为什么我建议新的贡献者从那里开始。

对于更喜欢冒险的人,我们在我们的网站上维护着一个优先项目列表。如果您想为 FreeDOS 做出贡献,但不确定需要做什么工作,您可以考虑处理其中一个或多个项目

  • 如果您有一些编程经验
    • 将 FreeDOS 实用程序移植到 OpenWatcom C 和 NASM——我们首选的 FreeDOS C 编译器和汇编器。(一些较旧的 FreeDOS 程序可能是为 Borland C 或 Turbo C 或 Microsoft C,或 Microsoft ASM 或 Turbo ASM 编写的)

    • 将 GNU 实用程序移植到 FreeDOS,例如使用 IA-16 GCC(虽然 IA-16 GCC 需要 386 或更好的处理器才能编译,但使用 IA-16 GCC 编译的程序可以在所有 CPU 上运行)

    • 创建一个新的替代 shell,类似于 COMMAND.COM,但具有扩展的 BAT 编程功能

    • 为当前仅支持一种语言的 FreeDOS 程序添加国际语言支持。

  • 如果您是一位高技能的 DOS 开发人员
    • 为 VirtualBox 编写一个像 VMSMOUNT 这样的访客工具

    • 为现代声卡编写驱动程序

    • 添加某种 UEFI 引导 BIOS 模拟器,也许可以作为 CSM 实现

我们希望让新的贡献者更容易开始使用 FreeDOS,我们欢迎所有想要在 FreeDOS 上工作的人。如果您仍然不知道如何贡献,请随时在电子邮件列表中提问。

您可以在 www.freedos.org 找到 FreeDOS

在 Facebook 上加入 FreeDOS:facebook.com/groups/freedos/

在 Twitter 上关注 FreeDOS:twitter.com/freedos_project

接下来阅读

开始使用 FreeDOS

它看起来像复古计算,但它是一个现代操作系统,你可以用它来完成工作。

(通讯员)
2021年6月1日
标签
User profile image.
教育家、企业家、开源倡导者、终身学习者、Python 教师。教育心理学硕士,教育领导学硕士,Linux 系统管理员。

贡献者

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.