FreeDOS 的 Linux 根源
在 2019 年 6 月 29 日,FreeDOS 项目将迎来 25 周年。这对于任何开源软件项目来说都是一个重要的里程碑!为了纪念这个周年纪念日,Jim Hall 分享了 FreeDOS 是如何起步的,并描述了它的 Linux 根源。
FreeDOS 的起源我从小就接触电脑。在 1970 年代后期,我的家人买了一台 Apple II 电脑。正是在这里,我自学了如何用 AppleSoft BASIC 编写程序。这些程序并不总是简单的程序。我很快就从编写简单的“数学测验”程序,发展到更复杂的“龙与地下城”风格的冒险游戏,并配有图形。
在 1980 年代初期,我的父母用一台运行 MS-DOS 的 IBM 个人电脑取代了 Apple。与 Apple 相比,PC 有一个更强大的命令行。您可以连接简单的实用程序和命令来执行更复杂的功能。我爱上了 DOS。
在整个 1980 年代和 1990 年代初期,我将自己视为 DOS“高级用户”。我自学了如何用 C 语言编写程序,并创建了新的 DOS 命令行实用程序,以增强我的 MS-DOS 体验。我的一些自定义实用程序只是复制了 MS-DOS 命令行,并添加了一些额外的功能。其他程序则为我的命令行体验添加了新功能。
我在 1993 年发现了 Linux,并立即意识到这是一个大事件。Linux 有一个比 MS-DOS 更强大的命令行,您可以查看源代码来研究 Linux 命令、修复错误和添加新功能。我在我的电脑上安装了 Linux,与 MS-DOS 双启动配置。由于 Linux 没有我作为一名在校大学生所需的应用程序(一个用于撰写课堂论文的文字处理器或一个用于进行物理实验室分析的电子表格程序),我启动到 MS-DOS 中来完成我的大部分课堂作业,并启动到 Linux 中来做其他事情。我正在转向 Linux,但我仍然依赖 MS-DOS。
在 1994 年,我阅读了科技杂志上的文章,说微软计划很快放弃 MS-DOS。下一个版本的 Windows 将不会使用 DOS。MS-DOS 正在走向没落。我已经试用过 Windows 3,但它并没有给我留下深刻的印象。Windows 不太好。而且,运行 Windows 将意味着替换我每天使用的 DOS 应用程序。我想继续使用 DOS。我决定保持 DOS 的唯一方法是自己编写一个。在 1994 年 6 月 29 日,我在 Usenet 讨论组 comp.os.msdos.apps 上宣布了我的计划,事情就从那里开始了
PD-DOS 项目公告
几个月前,我发布了关于启动公共领域版本的 DOS 的文章。当时对此的普遍支持很强烈,许多人同意“开始编写!”的说法。所以,我已经...
宣布首次努力制作 PD-DOS。我已经写了一份“宣言”,描述了这样一个项目的目标和工作大纲,以及一个“任务列表”,其中准确地显示了需要编写的内容。我将在这里发布这些,并进行讨论。
“PD-DOS”项目之所以这样命名,是因为它意味着存在于“公共领域”。当时,我并没有完全理解“公共领域”的含义(放弃我们程序的所有权利),但我很快了解了我们可以使用的其他许可证,包括 GNU 通用公共许可证。在采用 GNU GPL 之后,我将“PD-DOS”重命名为“Free-DOS”,以代表自由软件方面。后来,我们去掉了连字符,变成了“FreeDOS”。
FreeDOS 的 Linux 根源为了启动 FreeDOS 项目,我分享了我自己编写的类似 DOS 的实用程序和命令。从那时起,其他 DOS 开发人员看到了我所做的事情,他们贡献了自己的程序和实用程序。其他人自愿编写新程序,例如我们的 COMMAND.COM shell(“FreeCOM”)。Pat Villani 联系我,贡献了他的类似 DOS 的内核。
但是,您知道许多最初的 FreeDOS 实用程序都源于 Linux 吗?
在发现 Linux 和 GNU 核心实用程序的强大功能后,我希望在 FreeDOS 上也有类似的功能。我们有 GNUish 项目,这是一个并行项目,旨在将 UNIX 和 GNU 命令行实用程序(如 gawk
和 grep
)移植到 DOS 命令行。这立即为想要从 DOS 命令行获得 UNIX 实用程序灵活性的 DOS 用户提供了资源。但我仍然需要编写自己的 MS-DOS 命令的替代品,我决定使用 Linux 作为影响。
如果您查看早期版本的 FreeDOS 实用程序,您会看到来自 Linux 的影响。我的第一个 CLS
命令(类似于 Linux 上的 clear
)借鉴了 Linux setterm
的颜色功能。运行 CLS WHITE ON BLUE
将清除屏幕并将控制台颜色重置为在纯蓝色背景上使用灰色文本(“白色”)。
旁注: FreeDOS 具有与使用 ncurses 的 Linux 控制台相同的颜色:16 种文本颜色和 8 种背景颜色。这并不奇怪,因为如果您在 PC 上运行 Linux,则颜色范围的起源在于 PC 硬件。它与 DOS 相同!Jim 在他 2018 年 12 月的 LJ 文章 “关于 ncurses 颜色” 中解释了 ncurses 中的颜色。
您可以在我最初的 FreeDOS TYPE
命令(类似于 Linux 上的 cat
)中最清楚地看到 Linux 的根源。当我编写第一个 TYPE
实现时,我参考了 Linux cat
中的广泛选项,包括 /N
用于对输出行进行编号,/S
用于压缩非空白行,/C
用于显示控制字符,以及 /E
用于使用“$”显示行尾。这些选项都直接借用自 Linux cat
命令,其中 -n
用于对输出行进行编号,-s
用于抑制重复的空行,-v
用于显示非打印字符,而 -E
用于打印“$”以标记每行的结尾。
我尝试在 FreeDOS 的其他部分复制 Linux 的一些基本功能,使用类似的命令,例如 TEE
(基本上与 Linux tee
命令相同)和 TRCH
(Linux tr
的简单实现)。FreeDOS HELP
旨在模仿 Linux man
命令,只是以与 man
生成格式化的“手册”页相同的方式显示纯文本“帮助”文件。HELP
甚至借用了 man
环境变量约定 HELPPATH
和 PAGER
(man
使用 MANPATH
和 PAGER
)。
我特别喜欢的一个早期 FreeDOS 命令是 SPOOL
打印后台程序,它类似于 UNIX 的 lpr
。如果您不使用 DOS,您可能不会意识到打印突出了 DOS 的单任务性质。当您打印文件时,您必须等待整个文档打印完成。在点阵打印机上,只有几页的短文档可能需要几分钟才能打印完成。
SPOOL
打印后台程序在后台运行,当您的计算机工作不繁忙时,它会将数据发送到打印机。这使您可以启动打印作业并立即恢复工作!这对于一直拥有像 lpr 或 CUPS 这样的打印系统的 Linux 用户来说是一件小事,但这种功能在 DOS 中是闻所未闻的。
我认为 FreeDOS 继承了 Linux 的某些功能是很棒的。我们希望 FreeDOS 让 Linux 用户感到熟悉。在即将推出的 FreeDOS 1.3 发行版中,我们计划将所有类似 UNIX 的实用程序分离到它们自己的软件包组中,以便更容易找到和安装它们。但是 FreeDOS 不是 Linux。尝试将 FreeDOS 重新发明为“迷你 Linux”将是对 FreeDOS 的不尊重。
在底层,FreeDOS 仍然是 DOS。而且,这带来了一定的假设和限制。像任何 DOS 一样,FreeDOS 将保持 16 位,并且它将继续专注于单用户命令行环境。我们将为 FreeDOS 命令行借用某些 Linux 实用程序,但我们不想将 FreeDOS 变成 Linux 的淡化变体。在诞生 25 年后,FreeDOS 仍然只是 DOS。
加入我们,庆祝 FreeDOS 四分之一世纪!25 年对于任何开源软件项目来说都是一个重要的里程碑,尤其是对于像 FreeDOS 这样的小型操作系统项目而言。下载并安装 FreeDOS 1.2 发行版。玩您最喜欢的 DOS 游戏或 DOS 应用程序。任何在 MS-DOS 上运行的程序也应该在 FreeDOS 上运行。而且,您可以查看和编辑我们的源代码,因为所有 FreeDOS 程序都根据 GNU 通用公共许可证或类似的开源软件许可证分发。
视频:观看 Marcel Gagné 在 Linux 上安装 FreeDOS!在视频中跳到大约 13:30 处,观看 Marcel 在虚拟机中安装和启动 FreeDOS。请参阅 “无需网络的 Linux 烹饪:真正微小的 Linux 发行版、旧 DOS 游戏等等”。