开源DOS操作系统-FreeDOS
2014-07-05 19:12:30 阿炯

微软在开发出Win95后停止了DOS的独立发展,但在Win95出现之前,微软已经明显地加强了Windows的开发而减慢了DOS的发展,并在Windows中采取一些不光彩的手段去排斥打击其他的DOS系统如DR-DOS等,以确保MS-DOS的统治地位,维护自己的商业利益。比如当在DR-DOS中运行Win3.x时,肯定不时会出现所谓的“错误”信息,采用GPL协议授权。


FreeDOS is a free DOS-compatible operating system that can be used to play games, run legacy software, or support embedded systems. FreeDOS is basically like the old MS-DOS, but better! For example, FreeDOS lets you access FAT32 file systems and use large disk support (LBA) — a feature not available in MS-DOS, and only included in Windows 95 and newer.

FreeDOS最初是设计作为MS-DOS的自由软件替代,但20年后的今天FreeDOS已经超越了MS-DOS,加入了新的功能,简化了使用,至今人们仍然在嵌入式设备上使用FreeDOS,在上面运行商业软件,或者在虚拟机里玩DOS游戏。

微软的专横做法当然引起了许多人的不满,许多团体甚至个人,包括大名鼎鼎的IBM公司都纷纷投入到开发兼容DOS的行列这中,意图打破微软对DOS的垄断局面。同时由于DOS的开放性和大家对DOS强大实用的功能的认识,DOS的种类不断增加,目前至少有20种,如PC-DOS、ROM-DOS、PTS- DOS、FreeDOS等,而新的功能,新的理念更是层出不穷。这里我们就为大家介绍一下最具代表性的FreeDOS。


FreeDOS工程(The FreeDOS Project)建立于1994年,由著名程序员Jim发起,并很快得到了众多使用者和程序开发者的响应。FreeDOS工程的目标是建立一个完整的、自 由开放的并且与MS-DOS完全兼容的新型DOS操作系统,这个DOS系统属于全人类。由于它是建立著名的GNU GPL(GNU通用公共许可证)协议下的自由软件,得到来自世界各地众多优秀程序员的支持,现在一直在不断的发展着,而且参加的人越来越多,通过互联网联 合起来朝着他们的目标去努力,充分体现了自由开放和团结的精神。现在FreeDOS的版本号已经发展到7.0,目前最新版本是Beta 8 H1,于今年9月推出。目前为它设计的DOS软件正在源源不断的推出和发展,不仅有各种外部命令,还有许多其它的增强程序和附件,而且质量既高也很实用, 往往超过MS-DOS中的同类命令。例如在它上面开发的Cute Mouse,就是目前DOS下最好(体积最小,功能最强)的鼠标驱动程序。而ATTRIB、XCOPY等众多外部命令,不仅比MS-DOS的同类命令效率 要高,而且体积不到后者的二分之一甚至几分之一。尤其重要的是,作为自由软件,它的源代码是完全公开的,显然对于需要学习和借鉴的国人,这是最好不过的事了。

FreeDOS与MS-DOS是完全兼容的,因此为它开发的软件基本上都可以直接移植过来在MS-DOS等DOS下使用。而我们国内外已经开发的绝大多数DOS软件也可以在它上面正常的运行。它的功能也十分强大,比如同样支持FAT32分区和大硬盘,部分功能已经远远超过MS-DOS。还有许多其它非常实 用的功能,如内置DOSKEY支持、支持极大的内存(最大高达4G)等。至于更多的功能,如长文件名功能等等,现在正在大家不断的努力下开发着,相信不久后就会成为现实。不仅如此,它的系统启动文件也比MS-DOS等小巧得多。它的核心文件只有一个,再加上一个SYS文件和一个命令处理器 COMMAND.COM文件,总共才130K,放在启动盘中是十分合适的。

不过与MS-DOS等DOS一样,上面介绍的FreeDOS是16位的。由于现在32位的操作系统逐渐成了大势所趋,因此为了跟上时代的发展,人们又开发了32位的FreeDOS操作系统,即内核为32位的FreeDOS版本FreeDOS 32,并再次得到了众多的支持。虽然目前它还不是很成熟,但它一直在发展着,而且毫无疑问,32位的FreeDOS有着划时代的意义,标志着DOS逐渐向 32位的内核的方向发展了。

尤其是在国外,不少人认为,FreeDOS将为DOS带来新的生机和气象,因此对此感兴趣和参加的人越来越多。无数的优秀程序员投入其中不断为 FreeDOS的发展添砖加瓦。目前,自由的FreeDOS越来越受到人们的关注,比如著名的Dell电脑公司就即将为它生产的部分电脑直接提供 FreeDOS操作系统。

DOS操作系统的历史简述

1973年:博士毕业的加里·基尔代尔Gary Kildall为英特尔刚推出的八位元处理器8008写出第一个微处理器的高阶语言PL/M(Programming Language for Microcomputers),接着为升级版的8080写出CP/M(Control Program for Microcomputers),可以控制IBM刚发明的软盘机,成为史上第一个磁盘操作系统(Disk Operating System),为今天广为使用的A盘、B盘和C盘(CD-ROM)编写了驱动程序。

1974年:加里·基尔代尔Gary Kildall帮助创建了硅谷最富盛名的“家酿俱乐部”(Home Brew Club),成为计算机业余爱好者交流的天堂,是硅谷点燃PC革命的中心。

1975年初:MITS电脑公司推出基于8080芯片的Altair 8800微机,这是人类历史上第一台PC(个人电脑)。

1976年:加里·基尔代尔Gary Kildall辞职创办Digital Research公司,正式开卖操作系统CP/M。它很快成为Intel 8080芯片的标准操作系统。为满足不同品牌机,加里·基尔代尔开发出不同版本的CP/M,此时他想到如果让CP/M架在一个专门控制输入/输出的程序BIOS(BASIC Input/Output System)上面,就不用修改CP/M,只须修改BIOS。BIOS让CP/M席卷使用英特尔处理器的电脑市场。加里·基尔代尔Gary Kildall发明第一个微处理器的高阶语言、发明第一个磁盘操作系统DOS、发明第一个BIOS。1994年7月,年仅52岁的加里·基尔代尔在加州蒙特利的寓所里,头部撞地,三日后不治身亡。一代大师凄凉离世,彻底告别了他爱恨交加的电脑业。“DOS之父”加里·基尔代尔Gary Kildall很快被历史遗忘了。


1980年8月:Seattle Computer Products(SCP)公司的24岁程序员Tim Paterson完成原始的操作系统,取名QDOS(简易的操作系统、Quick and Dirty Operating System)。充分借鉴CP/M,用户界面和编程接口几乎完全一样,这使得CP/M上的应用程序,可以直接在QDOS上运行。他做出的最大改变,就是为QDOS引入了微软公司BASIC解释器的FAT文件系统。

1980年10月:IBM决定推出基于Intel 8086芯片的PC,找到Digital Research公司,要求获得授权使用CP/M系统,协议没有谈成。IBM又去找微软,微软没有操作系统产品,但是Bill Gates知道SCP公司正在开发QDOS。微软支付2.5万美元,获得SCP的QDOS使用许可。IBM和微软签署合同:IBM一次性以约8万美元的价格为即将生产的PC购买微软MS-DOS操作系统的永久使用权。同时IBM还有权使用微软的BASIC编程语言、该公司的所有其它编程语言以及它开发的一些新的应用程序。作为对其放弃MS-DOS(现在应该称为IBM PC-DOS)永久使用权的交换,盖茨坚持保留将MS-DOS出售给其他公司的权利。

1981年7月:微软Bill Gates意识到未来PC市场的巨大规模,决定不再使用许可证模式,直接花费5-7万美元买下QDOS。

1981年7月27日:协议达成,QDOS成了微软的财产,正式改为MS-DOS。微软定义DOS“磁盘操作系统Disk Operating System”。1981年7月27日就是微软公司DOS操作系统的诞生纪念日。

1981年7月:为IBM PC配套的操作系统MS DOS 1.0诞生

1981年8月12日:IBM正式推出个人电脑产品IBM PC,使用MS-DOS 1.14版


1982年5月:微软为IBM的IBM PC发布MS-DOS 1.1,支持320KB双面软驱。
1982年6月:MS-DOS 1.25发布,只有7个文件,包括最初的MS-DOS命令行外壳,支持双面软盘,可运行在IBM兼容计算机上。

1983年3月:MS-DOS 2.0版发布,一次重大改版,正式采用文件配置表格式,大量使用具有UNIX特性的Handle式文件操作方式。支持10 MB硬盘, 一个树状子目录, 和360 KB 软盘。

1983年8月:中国国产微机操作系统CCDOS诞生,电子部六所的严援朝牵头开发,支持汉字存储和显示。






1984年:IBM推出下一代个人电脑IBM PC/AT,操作系统是MS-DOS 3.0版。

1984年11月:微软发表 MS-DOS 3.1,增加对网络的支持。

1988年:MS-DOS 4.0版发布,开始支持鼠标和图形界面。微软已经准备终结DOS这个产品了,微软公开表态,用户可以考虑放弃DOS,转而使用由IBM和微软共同开发的OS/2操作系统。

1988年:中国希望公司发布超级组合式中文平台UCDOS。此后,该软件一度成为我国DOS平台市场份额最大的中文操作系统。

1991年:MS-DOS 5.0版发布,内置QBasic编程环境。这是MS-DOS最后一次作为单独产品出现。

1993年:MS-DOS 6.0版发布,具备磁盘压缩技术。

1995年:MS-DOS 7.0版支持FAT32文件系统,它随同Windows 95一起发布。


2000年9月14日:MS-DOS最后一个版本8.0版发布,只用于Windows XP系统的启动盘。至此,微软的DOS开发正式宣告全部结束。

2014年3月:微软通过计算机历史博物馆放出了MS-DOS 1.25、2.0两个早期版本的源代码。

2018年:微软宣布在GitHub上重新开源MS-DOS 1.25、2.0,相比原来的可下载压缩文件更容易查找、阅读和引用。不过微软强调,本次开源只为历史参考目的,让那些对早年PC操作系统感兴趣的用户去重新探索和试验,代码不会再做任何改动,大家也不要提出修改请求。微软同时透露,MS-DOS 1.25、2.0的所有源代码都是用8086汇编码写的,其中86-DOS的代码最初完成于1980年12月29日。

微软开源 MS-DOS 4.0 版系统源代码

微软于2024年4月下旬宣布与 IBM 合作,在 MIT 许可下发布 MS-DOS 4.00 的源代码。

2014 年 3 月,微软曾向计算机历史博物馆发布了 MS-DOS 1.25 和 2.0 版的源代码。其中 MS-DOS 1.25 代码可追溯到 1983 年 5 月 9 日左右,由 7 个源文件组成,其中包括最初的 MS-DOS Command-Line shell – COMMAND.ASM!

MS-DOS 2.0 大约可追溯到 1983 年 8 月 3 日,在复杂性(和团队规模)方面有了长足的发展,由 100 个 .ASM 文件组成。而 MS-DOS 4.0 则发布于 1988 年,由微软与 IBM 合作开发了部分代码。

公告称,一位名叫 Connor “Starfrost” Hyde 的年轻英国研究员最近与微软前首席技术官 Ray Ozzie 就他收藏的一些软件进行了通信。在这些软盘中,Ray 发现了他在 Lotus 时发送的未公布版 DOS 4.0 测试版二进制文件。

因此 Starfrost 联系了微软开源项目办公室(OSPO),探索发布 DOS 4 源代码的可能性。微软开发者社区副总裁 Scott Hanselman 在互联网档案管理员兼爱好者 Jeff Sponaugle 的帮助下,对这些原始磁盘进行了成像,并仔细扫描了 “Ozzie Drop” 中的原始印刷文档。

“微软和 IBM 的朋友们都认为这是一段值得分享的操作系统历史。”

Jeff Wilcox 和 OSPO 访问了 Microsoft Archives,虽然没有找到 MT-DOS 的完整源代码,但确实找到了 MS DOS 4.00 源代码,以及一些额外的 beta 二进制文件、文档的 PDF 和磁盘镜像。

微软方面表示将继续探索这些档案,如果有更多新发现,后续或将继续进行更新。 更多详情可查看此处


在 FreeDOS 上使用 C 语言编程

C 语言是一种简单易懂的编程语言,在编写有用的程序时,这给予开发者很大的灵活性。实际上,很多 FreeDOS 的核心实用程序都是使用 C 语言和汇编语言编写的。因此 FreeDOS 的 v1.3 RC4 包含一个 C 语言可能并不出人意料,此外还有其它编程语言的编译器。FreeDOS 的 1.3 RC4 LiveCD 包含两个 C 编译器:Bruce's C 编译器(一个简单的 C 编译器)和 OpenWatcom C 编译器 。在 Bonus CD 上也可以找到 DJGPP(一款基于 GNU 的 GCC 的 32 位 C 编译器)和 GCC 的 IA-16 移植(需要 386 或更好的 CPU 来编译,但是,生成的程序可以在低端系统上运行)。

在 FreeDOS 上使用 C 语言编程与在 Linux 上使用 C 语言编程非常类似,但是有两个例外:
1.需要知道你使用了多少内存。Linux 允许程序使用很多内存,但是 FreeDOS 有很多限制。DOS 程序只使用四种(大、中、紧凑和小)中的其中一种,具体取决于它们需要多少内存。

2.可以直接访问控制台终端。在 Linux 上可以创建文本模式的程序,使用一个诸如 ncurses 之类的库来绘制终端屏幕。但 DOS 允许程序访问控制台终端和视频硬件。这为编写更有趣的程序提供了极大的灵活性。

在 GCC 的 IA-16 移植或 OpenWatcom 中编写 C 程序,具体取决于正在编写的是哪种程序。OpenWatcom C 编译器更容易安装,因为它只是个单一的软件包。这就是为什么在 FreeDOS 的 LiveCD 中提供 OpenWatcom 的原因,在安装 FreeDOS v1.3 RC4 时,如果选择 “完全的安装(包括安装应用程序和游戏)(Full installation including applications and games)”,那么也自动地安装 OpenWatcom。如果选择安装 “纯 DOS 系统(Plain DOS system)”,那么将需要使用 FDIMPLES 软件包管理器来安装 OpenWatcom C 编译器。


在 FreeDOS 1.3 RC4 上安装 OpenWatcom

在 DOS 上使用 C 语言编程

可以在 openwatcom 网站上找到文档和库指南,以学习 OpenWatcom C 编译器所提供的独特的关于 DOS 的 C 语言编程库。简单描述几个最有用的函数:

来自conio.h头文件:
int getch(void):从键盘上获取一个按下的单个按键
int getche(void):从键盘上获取一个按下的单个按键,并回显该按键

来自graph.h头文件:
_settextcolor(short color):设置打印文本时的颜色
_setbkcolor(short color):设置打印文本时的背景颜色
_settextposition(short y, short x):移动光标到行y和 列x
_outtext(char _FAR *string):从当前光标位置开始,直接将一串字符打印到屏幕

DOS 只支持 8 种背景颜色。可以使用值 0(黑色)到 15(亮白色)来具体指定文本颜色,以及使用值 0(黑色)到 7(白色)来具体指定背景颜色:
0:黑色、1:蓝色、2:绿色、3:品蓝色、4:红色、5:品红色、6:棕色、7:白色、8:亮黑色、9:亮蓝色、10:亮绿色、11:亮品蓝色、12:亮红色、13:亮品红色、14:黄色、15:亮白色

一个花哨的 “Hello world” 程序

很多新开发者学习编写的第一个程序是为用户打印 “Hello world” 。可以使用 DOS 的conio和graphics库来制作一个更有趣的程序,并使用彩虹般的颜色打印 “Hello world” 。在这个实例中将遍历每种文本颜色,从 0(黑色)到15(亮白色)。随着打印每一行,都将为下一行缩进一个空格。在完成后将等待用户按下任意按键,然后将重置屏幕并退出。可以使用任何文本编辑器来编写你的 C 源文件代码。让人很容易在程序源文件代码中看到关键字、字符串(C 语言中没有直接的字符串)、变量。


使用 C 语言编写一个简单的测试程序

在使用 OpenWatcom 编译前,将需要设置 DOS 的编译环境,以便该编译器可以找到它的支持文件。OpenWatcom C 编译器软件包中包含了一个做这件事的设置:\DEVEL\OW\OWSETENV.BAT。运行这个批处理文件可以自动为 OpenWatcom 设置环境变量。在开发环境准备好后,可以使用 OpenWatcom 编译器来编译这个 “Hello world” 程序。已经将该 C 源文件文件保存为TEST.C,因此可以输入WCL TEST.C来编译和连接该程序为一个名称为TEST.EXE的 DOS 可执行文件。在其输出信息中将看到WCL实际上调用 OpenWatcom C 编译器(WCC)来编译,并调用 OpenWatcom 链接器(WLINK)来执行对象/目标(object) 链接阶段:


使用 OpenWatcom 编译测试文件

OpenWatcom 会打印一些无关的输出信息,这可能会使发现错误和警告变得困难。为了告诉编译器来抑制这些大量的额外信息,请在编译时使用/Q(“Quiet”)选项:


使用 OpenWatcom 编译

在编译 C 源文件文件时,如果没有看到任何错误信息,那么就可以运行你的 DOS 程序了。这个 “Hello World” 示例的程序名称是TEST.EXE。在 DOS 命令行中输入TEST来运行新的程序,应该会看到这个非常漂亮的输出:


运行测试程序

C 语言是一种非常高效的编程语言,在像 DOS 之类的资源有限的系统上进行编程也可以很好的工作。在 DOS 上可以使用 C 语言来做更多的事。如果是 C 语言的初学者,那么可以在 FreeDOS 网站的自学电子书来自主学习 C 语言。


最新版本:1.3
2022年2月下旬,FreeDOS 的作者 Jim Hall 正式发布了其 1.3 版本。该版本包含了自 1.2 版本(2016 年发布)以来的新功能和改进,其中包括:
新的 FreeCOM 0.85a
新的 Kernel 2043 和支持 FAT32 的 8086 版本
软盘版本(Floppy Edition)使用了压缩,仅需以往一半的空间
网络支持已恢复
新增一些程序和游戏
现有软件包更新
NLS 更新与改进
改进启动媒体和安装系统的 CD 初始化
改进安装流程等
系统要求:
DOS 兼容系统(Intel + BIOS 或支持 Legacy 的 UEFI)
至少 20MB 可用磁盘空间
更多详情可查看主页。

最新版本:1.4
距离 v1.3 版本发布 3 年后,v1.4 现已于2025年4月上旬发布。新版本包含了大量的更新内容,一些更改包括:
FreeCOM 是 FreeDOS command.com shell。0.86 版包含大量新修复、兼容性改进和翻译。
Xcopy 是一个标准的 DOS 命令,用于复制目录树。版本 1.8b 重新设计了递归复制,以减少使用过多的堆栈空间,并且在基于 Open Watcom 构建时使用更大的堆栈大小。
Move 将文件或目录从一个位置移动到另一个位置。3.4 版更新了堆栈使用限制,减少了递归移动时堆栈溢出的可能性。
Fdisk 是管理固定磁盘(硬盘)的程序。版本 1.4.3 收集了自 FreeDOS 1.3 以来的几项重要更改,包括修复在处理多个分区时可能导致数据问题的严重错误。
mTCP 是一套适用于运行 DOS 的个人计算机的 TCP/IP 应用程序。FreeDOS 1.4 中的版本进行了许多改进,以提高可靠性。
FDHelp 是主要帮助系统的内容。版本 1.1.0 从头开始​​重写,并在多位译者的帮助下翻译成了其他语言。
此外,还有一些更新内容未包含在 FreeDOS 1.4 发行版中。例如,一些程序在最终 FreeDOS 1.4 发行版发布前几天发布了更新,如 Blocek 文本编辑器(版本 1.76),但由于时间太晚,未能将其包含在内。这些程序将包含在即将发布的每月测试版本中。

FreeDOS 内核仍与 FreeDOS 1.3 相同,因为新内核尚未准备就绪。当新内核可用时,开发团队计划将其纳入每月测试版本。目前,FreeDOS 1.4 无法在增强模式下运行 Windows for Workgroups,但可以在标准模式下运行 Windows 3.1。

Streamlined packages
在此过程中进行了一些软件包清理。鉴于 Seal 和 oZone 存在很多错误,项目团队决定从新发行版中删除它们。但用户仍然可以找到基于 DOS 时代经典 GEM 桌面的 OpenGEM。OpenGEM 假定它从 “root” 目录运行。在有人自愿修复此问题之前,项目团队在用户运行 OpenGEM 时添加了一个 “helper”,提供了可以模拟 “root” 驱动器的 SWSUBST 命令。还用另一个程序 DOSVIEW 替换了 BMP2PNG 程序。DOSVIEW 是一个图像查看器,支持多种图像格式;还可以在图像格式之间进行转换,包括 BMP 和 PNG。(DOSVIEW 还支持 PCX、TGA、JPG、TIF、GIF、PNM、PBM、PGM、PPM、PSD 和 PIC 格式等。)更多详情可查看官方发行公告


官方主页:http://www.freedos.org/