UnoDOS
摘要
UnoDOS是一系列图形操作系统,专为从旧式PC到现代x86-64机器的广泛硬件设计,其特点是提供一个裸机旗舰版,配备完整桌面、应用程序和开发工具。
查看缓存全文
缓存时间: 2026/09/29 22:57
hmofet/unodos
来源: https://github.com/hmofet/unodos
UnoDOS
许可证 发布版本 (https://github.com/hmofet/unodos/releases) 使用手册 (https://unodos.arinbakht.com/manual/)
一套源代码,一种设计,覆盖二十二款机器,从配备 8088 处理器的 IBM PC/XT 到你桌上现代的笔记本电脑。
UnoDOS 是一个图形化操作系统家族。它始于一个完全用 x86 汇编语言编写的、以图形界面为核心的 16 位实模式操作系统,能够将内核、窗口管理器、两个文件系统、协作式多任务处理以及一套完整的应用程序装进一张 1.44 MB 的软盘。此后,它发展成为由契约驱动的、跨越家用电脑、游戏机、手持设备、单板计算机和手机的移植版本家族,其旗舰版本是 pc64:UnoDOS 在任何现代 64 位 PC 上运行于裸机环境,使用自己的驱动程序、网络协议栈、浏览器、办公套件、编译器和虚拟机监控程序。
pc64 桌面环境
尝试一下
每个平台的预构建镜像都在 发布页面 (https://github.com/hmofet/unodos/releases) 上:为现代 PC 准备的混合 ISO 和 USB 磁盘镜像,为游戏机和手持设备准备的卡带 ROM,为家用电脑准备的磁盘镜像,以及为单板计算机准备的 SD 卡载荷。大多数镜像可以在一分钟内于模拟器中运行;用户手册 (https://unodos.arinbakht.com/manual/) 指导如何在真实硬件上启动,包括为 Windows 和 macOS 提供的一键式 USB 烧录工具。
实际经过验证的项目与能够构建的项目是两个问题,PLATFORMS.md 是回答这个问题的清单:针对每个平台,记录了在哪些物理机器上已成功启动(或在真实硬件上启动)、哪些仅通过模拟器验证,以及所有已知的差距。
UnoDOS pc64,现代 PC 旗舰版
pc64 可以在约 2007 年后生产的任何 x86-64 PC 上以裸机方式启动。UEFI 扮演了传统 BIOS 在经典操作系统中的角色:固件移交帧缓冲区、键盘和启动卷,然后,在大多数机器上,UnoDOS 调用 ExitBootServices,固件便退出。从此刻起,操作系统完全运行在自己的驱动程序上。一个混合磁盘镜像也能让操作系统在传统 BIOS 机器上启动。
完整的桌面环境
外壳系统建立在 unoui 之上——这是该家族跨平台的图形组件工具包:一个带有任务栏、虚拟桌面、窗口吸附、动态切换器(Alt-Tab)、桌面图标和程序菜单的窗口化桌面环境。十种主题可实时切换,从 Aurora(现代的扁平风格默认主题,有浅色和深色)到忠实的复古外观(Mac OS 7、1位色深 Mac Plus、Windows 3.1、Amiga Workbench、C64、Apple II、NeXTSTEP)。文本采用字距调整、抗锯齿的 TrueType 字体,并内置开源字体,每个控件都可以通过指针或键盘操作。
| 窗口吸附 | UnoWord |
| 浏览器 | Studio |
应用程序
- UnoWord、UnoCalc、UnoShow:一套 Office 97 级别的办公套件,通过内置的 unodoc 库读写真实的 Microsoft 二进制格式(
.doc、.xls、.ppt)。 - 浏览器:支持 HTML、Markdown 和 CSS 渲染,具备 Cookie、缓存、查找和保存功能,支持 HTTP 和 CA 验证的 TLS 1.2 HTTPS,并提供两个可切换的 JavaScript 引擎:内置的 unojs 字节码虚拟机和外部引入的 quickjs-ng,以及基于 libcss 的布局引擎选项。
- Studio:一个运行在操作系统本身的集成开发环境(IDE),具有语法高亮、构建与运行循环、AI 助手,以及内置的 UnoC——一个可以在 UnoDOS 上编译原生 UnoDOS 应用程序的 C 编译器。
- Python:MicroPython 作为一等运行时(
PYRT.UNO),提供unoAPI 以接入外壳、文件系统和网络。 - 音乐、UnoAmp、Photos:完全从零实现的 WAV、MIDI、MP3 和 AAC-LC 解码器(unomedia);UnoAmp 是一个 Winamp 2 的克隆版本,可以加载经典皮肤;Photos 可查看常见的图像格式。
- SSH:一个原生的 SSH 客户端(支持 ed25519,内置加密库)。
- 另外还有文件管理器、编辑器、绘图、跟踪器、时钟、控制面板、系统、日志查看器、游戏(Dostris、Pac-Man、OutLast)以及 Runner3D——uno3d 3D 库的展示程序。
应用程序是可加载的 .UNO 模块,携带自己的描述符:将其放入 APPS\ 目录,外壳程序即可发现它。无需重新构建,无需重启。
自有的硬件支持
固件层以下的一切都是为该源码树编写的原生代码:
- 存储:在统一的块层下支持 AHCI、NVMe、SDHCI/eMMC 和 USB 大容量存储设备,一个原生的 FAT16/FAT32 驱动程序,以及 GPT/ESP 创建工具。
- USB:一个基于轮询的 xHCI 主机控制器栈,支持集线器、HID 键盘和鼠标、大容量存储设备以及 USB 以太网(ASIX AX88179、Realtek RTL8152)。
- 网络:有线网卡(Intel e1000/e1000e/igb、Realtek r8169)和Wi-Fi(Intel、Realtek、Marvell 驱动程序,支持 WPA2),基于从零实现的 TCP/IP 协议栈:包含 ARP、IPv4、ICMP、UDP、TCP、DHCP、DNS、TLS(BearSSL)、双向套接字和 syslog。
- 输入设备:PS/2、I2C-HID(原生笔记本电脑触控板)和 USB HID。
- 音频:Intel HDA 音频,带 AC’97 后备支持,输出到 48 kHz DMA 环形缓冲区。
- ACPI:内置的 AML 解释器(unoacpi)。
虚拟机监控程序
unovirt 在 Intel 硬件上进入 VMX 操作模式,并在 EPT(扩展页表)后运行带有 virtio 设备的客户机:一个真正的 Ubuntu 内核在 UnoDOS 下启动,进入用户空间,在其外壳中响应命令,并挂载一个 ext4 磁盘,该磁盘以文件形式存放在 UnoDOS 卷上。应用管理器和虚拟机管理器为其提供前端界面;一个针对 AMD/SVM 的后端已经编写完成,正在等待硬件验证。
安装、管理、自动化
- 安装程序:可非破坏性地安装到现有磁盘的 ESP 分区,或进行全盘克隆;一台正在运行的机器也可以通过网络重新安装。
- unosecure:本地账户、基于角色的访问控制(RBAC)和审计跟踪。
- URC:一个远程控制通道(失败关闭的动词门控、一次性的控制台授权),用于无头操作真实机器:部署构建、运行测试、流式传输屏幕内容。这就是在没有人坐在键盘前的情况下验证硬件集群的方式。
- 调试构建:一个行为规范(pc64/SPEC.md)被作为裸机一致性测试执行,此外还有看门狗、故障遥测和压力测试工具。
在真实机器上经过验证
已在联想 ThinkPad X1 Carbon 第8代(原生触控板、Wi-Fi、实时主题和分辨率切换)上验证,也在一台始终在线的 ZimaBlade 测试盒(从 USB 启动、脱离固件运行、完全原生运行)上验证,以及在 QEMU+OVMF 测试环境中(每次变更都在真实镜像上启动)验证。pc64/README.md 中的设计笔记记录了只有真实硬件才会暴露的固件陷阱;它们是移植工作价值的一半。
构建
sudo apt install gcc-mingw-w64-x86-64 qemu-system-x86 ovmf python3 python3-pil
cd pc64
./build.sh # -> build/esp/EFI/BOOT/BOOTX64.EFI
./build.sh run # 在 QEMU+OVMF 中启动它
整个移植使用标准软件包构建,无需 EDK2。有关 Linux 和 Windows 环境设置,请参阅 pc64/DEVELOPMENT.md,有关完整的架构概览,请参阅 pc64/README.md。
家族
一套契约,多个世界
UnoDOS 3.1 是契约驱动的:一份机器可读的契约(unodef/)定义了屏幕几何形状、窗口和事件布局以及共享的枚举,每个世界都由它生成或根据它检查。汇编移植版本和 x86 参考版本逐字节地使用它,并且有十一个移植版本是基于 3.1 架构全新构建的,而非迁移过来,这证明了一个新目标所需的工作量很小。参见 docs/UNODOS-3.1-MIGRATION.md 和 docs/CONTRACT-ARCH.md。
移植版本
每个移植版本都启动一个带有共享应用程序集的 UnoDOS 桌面环境:文件管理器、记事本、音乐、主题、跟踪器、绘图和游戏(Dostris、OutLast、Pac-Man),并根据机器容量进行缩放,甚至在仅有 2 KB 内存的设备上也能运行启动器配置文件。逐项功能比较详见 docs/FEATURE-MATRIX.md。
家用电脑
| 移植版本 | CPU | 亮点 |
|---|---|---|
| IBM PC/XT (x86) | 8088+ | 参考操作系统;见下文。✅ 真实硬件验证,包括一个周期精确的 8088 模拟器 |
| Amiga | 68000 | 自启动 ADF、铜/位平面、Paula 音频、磁盘加载的应用程序、与 PC 通用的 FAT12 |
| Commodore 64 | 6510 | 高分辨率位图桌面,每单元格颜色,SID 音频,CIA TOD 时钟,所有应用从磁盘加载 |
| VIC-20 | 6502 | 在 22×23 字符矩阵上全新构建的 3.1 世界 |
| Apple II | 6502 | 自有 GCR 6-and-2 RWTS,高分辨率渲染器,磁盘加载的应用程序 |
| Apple IIGS | 65C816 | 超高分辨率桌面,Ensoniq DOC 音频,通过 SmartPort 的 FAT12,完整的应用程序功能对等 |
| Mac System 1–7 | 68000+ | 托管的工具箱移植(1位色深和彩色 QuickDraw),无应用程序的核心,可加载模块 |
| MacPlus (独立操作系统) | 68000 | 裸机:自有引导块、驱动程序和渲染器。✅ 真实 Mac SE 验证 |
| PowerPC Mac | PPC G3/G4 | Open Firmware 客户机,第一个大端序 PowerPC 世界 |
游戏机和手持设备
| 移植版本 | CPU | 亮点 |
|---|---|---|
| Sega Genesis | 68000 | VDP 瓦片桌面,SRAM/磁带/Sega-CD 存储。✅ 在真实硬件上启动 |
| Super Nintendo | 65816 | 阴影+DMA 瓦片地图模型,SPC700 音频驱动程序。🟡 在克隆硬件上条件性通过 |
| NES | 6502 | 仅 2 KB 内存。✅ 在真实 AV Famicom 上验证 |
| PC Engine | HuC6280 | ✅ 在 Turbo EverDrive 上验证 |
| Master System / Game Gear | Z80 | 第一个契约驱动的移植版本及其 12位色深的姊妹版 |
| Game Boy / Color | SM83 | 一个 ROM 同时支持 DMG 灰度模式和 GBC 彩色模式 |
| Game Boy Advance | ARM7TDMI | 第一个 ARM 世界,使用 Mode-3 帧缓冲区 |
| WonderSwan | V30MZ | 第一个 x86 手持设备 |
| PlayStation 2 | R5900 | 在图形合成器上运行的可移植 C 核心;记忆卡存储,USB 输入 |
| Dreamcast | SH-4 | 在 PowerVR2 上运行的相同 C 核心;VMU 存储;在 Flycast 中达到 60 fps |
单板计算机和移动设备
| 移植版本 | CPU | 亮点 |
|---|---|---|
| Raspberry Pi | AArch64 | 第一个 64位 世界,使用 VideoCore 邮箱帧缓冲区 |
| PinePhone | AArch64 | 在 Allwinner DE2 上运行的纵向 480×640 分辨率,可自启动的 microSD |
多个移植版本已在真实芯片上验证(NES、PC Engine、Genesis、Mac SE、x86 系列、pc64 的笔记本电脑和单板计算机集群);其余版本通过模拟器或无 ROM 的指令级模拟器(Unicorn、py65、一个从零编写的 65816 核心)进行验证,因此构建或测试任何组件都不需要专有 ROM。
经典操作系统(x86 参考版本)
最初的 UnoDOS 3:一个为 IBM PC XT 兼容机设计的、以图形界面为核心的操作系统,完全用实模式 x86 汇编语言编写。没有 DOS,没有运行时,只有 BIOS 和 Intel 8088 或更新的处理器。
- 从一张 1.44 MB 软盘(或硬盘、CompactFlash、USB)直接启动进入窗口化桌面:可拖动的图标、鼠标支持、16 个窗口的 Z 序窗口管理器,支持轮廓拖动和调整大小。
- 一个约 46 KB 的内核,通过
INT 0x80提供 106 个系统调用:四种视频模式下的图形(从 CGA 320×200 到 VESA 640×480),一个包含文件对话框的 15 部件 GUI 工具包,FAT12 和 FAT16 读写支持,协作式多任务处理(在 640 KB 内存中同时运行 5 个应用程序加上外壳),系统剪贴板,三种位图字体和 PC 扬声器音频。 - 19 个应用程序,从一个完整的文本编辑器和文件管理器到绘图、跟踪器、设置、启动软盘创建工具和三个游戏。
- 在真正的 4.77 MHz 8088 处理器上以完整功能运行,在周期精确的 XT 模拟器上验证(Microsoft 串行鼠标在 COM1,XT-IDE CompactFlash 启动),也在从 386SX 到 Atom 上网本的真实硬件上验证。参见 docs/PORT-8088.md。
构建并运行:
sudo apt install nasm qemu-system-x86 make python3
make floppy144 # build/unodos-144.img,一个可启动的 FAT12 软盘镜像
make run144 # 在 QEMU 中启动它
make hd-image 构建 64 MB FAT16 硬盘镜像;tools/write.ps1 在 Windows 上将镜像写入物理介质(包含系统盘排除和读回验证),在 Linux 上则使用简单的 dd 命令。
应用程序是位于各自 64 KB 段中的扁平 NASM 二进制文件;一个最小的窗口化应用程序大约需要 60 行代码。从 应用开发指南、API 参考文档(所有 106 个调用的寄存器级详细说明)和 docs/ARCHITECTURE.md 开始。
共享子系统
移植版本保持小巧是因为繁重的基础设施是共享的:
| 库 | 是什么 |
|---|---|
| unodef | 契约:一份机器可读的定义,每个世界都由此生成 |
| unoui | 跨平台组件工具包和主题(docs/UNOUI.md) |
| uno3d | 可移植的 3D 管线,具有软件、PS2 GS 和 Dreamcast PVR 后端(docs/UNO3D.md) |
| unomedia | 从零实现的图像和音频解码器(WAV、MIDI、MP3、AAC-LC 以及常见图像格式) |
| unodoc | Microsoft 二进制文档格式:CFB 和 .doc/.xls/.ppt,读写支持 |
| unonet | pc64 驱动程序所接入的网络协议栈 |
| unojs / unoweb | JavaScript 引擎和 DOM/HTML/CSS 布局引擎 |
| unofs、unosound、unosched、unobus、unoacpi | 文件系统、音频序列、调度、总线、ACPI |
代码仓库与分支
master(此仓库,hmofet/unodos (https://github.com/hmofet/unodos)):前沿的、契约驱动的主线,也是 pc64 的所在地。所有当前开发都在这里进行。- hmofet/unodos-3-legacy (https://github.com/hmofet/unodos-3-legacy):最初发布的、经过真实硬件验证的操作系统及其移植版本(标签
legacy-pre-3.1)。已冻结并归档,状态良好。
文档
- 用户手册 (https://unodos.arinbakht.com/manual/):安装、桌面、应用、网络、虚拟机管理器和开发者指南,供只想运行它的人使用。
- docs/:架构、API 参考、移植规范、功能矩阵、存储和启动链内部机制,以及每个子系统背后的规划和交接文档。
- CHANGELOG.md:完整历史记录,425 多个构建版本且仍在增加。当前版本:v3.34.0。
- AGENTS.md 和 CONTRIBUTING.md:工作如何在此代码库中进行。
许可证
版权所有 (c) 2026 Arin Bakht
本项目采用 Mozilla 公共许可证 2.0(MPL 2.0)授权。
- 使用:免费,包括商业用途,无需支付版税
- 审查:完整源代码在此处,并且将一直如此
- 修改:允许,但如果您分发本项目的某个文件的修改版本,则该文件的源代码必须在 MPL 2.0 下发布。您不能将 UnoDOS 私有化。
- 衍生作品:您可以将 UnoDOS 与您自己的专有代码组合,并以您喜欢的任何方式授权组合作品。只有 UnoDOS 文件保持 MPL 许可。
- 署名:需要保留版权声明和许可证文本
第三方组件保留其自己的许可证,不受上述条款影响(MIT、Apache-2.0、BSD-3-Clause、公共领域,以及两种字体的 CC BY)。所有第三方组件均列在 THIRD-PARTY.md 中。
UnoDOS 3,因为有时候,老方法就是最好的方法。
相似文章
GentleOS - 一对面向老旧32位和16位PC的爱好操作系统
GentleOS/32和GentleOS/16是面向老旧32位和16位PC的爱好操作系统,为折腾复古硬件和在裸机上运行图形应用提供了平台。
Os8088:适用于 IBM XT、286、386 的强大的类 Mac 操作系统
os8088 是一个面向 Intel 8086/8088 PC 的业余爱好者级 Macintosh System 1 风格 GUI 操作系统,完全用实模式汇编编写,具有抢占式多任务能力,仅占用 256K RAM。该项目已完成,源代码可供获取。
GentleOS/16:面向经典16位PC的业余操作系统
GentleOS/16是一个面向经典16位PC的业余操作系统,旨在使用最少资源和纯C语言来摆弄旧硬件。
Osmantic/ODS
Osmantic/ODS 是一个开源部署系统,允许用户通过集成 Ollama 和 Open WebUI 等工具,在个人电脑上搭建私有 AI 服务器,用于本地模型推理、聊天界面和隐私优先的操作。
HamsterOS:一个可装在1.44MB软盘上的图形桌面操作系统
HamsterOS是一款新的32位图形多任务操作系统,可装在一张1.44 MB软盘上,专为386/486时代的硬件设计,具有CMOS崩溃计数器和DOS支持等功能。配套的GUI工具HamsterWeazle通过Greaseweazle USB适配器简化了软盘写入操作。