Dusk OS:一个极简的 Forth 操作系统
Dusk OS
Dusk OS 是一个 32 位的 Forth 操作系统,是 Collapse OS 的“老大哥”。它的主要目标 是在文明崩溃的初期阶段发挥最大的作用,也就是当我们无法再生产现代计算机,但周围仍然存在大量现代计算机时。
它通过以不寻常的约束为代价,并积极地优先考虑简洁性来实现这一点,同时也旨在让 operators 感到满意。
Dusk OS 通过拥有一个 "almost C" compiler 进行创新,它可以通过适度的 porting effort 依赖于 UNIX C 代码,从而以最小的努力实现其目标并保持其设计约束。
最终的结果是一个具有非常高的“功率密度”的系统,足以对传统的软件文化发起挑战。
你可以继续阅读以获取更多详细信息,但对于那些迫不及待的人,可能更喜欢参加 Dusk Tour。
状态
- 可以在以下平台上运行:
- 以下 CPU 上的裸机:
- i386 (BIOS 或 EFI)
- amd64 (EFI)
- ARM
- RISC-V
- m68k
- 支持的目标列表
- WebAssembly
- 在“常规”操作系统之上以原生速度运行
- 以下 CPU 上的裸机:
- 可以读取、写入、创建和从 FAT12/FAT16 (目前没有 FAT32) 卷启动。
- 拥有一个 "almost C" compiler,尽管有 "almost" 的限定,但它能够编译相当复杂的 "real world" 代码。
- 非常小的 footprint。旨在在 30 年前的机器上流畅运行。实际上,几乎任何具有 32 位 CPU 的机器都可以。
- 简单而简洁。例如,拥有一个完全启动的裸机 i386 PC Dusk 系统,该系统在带有 C 编译器、i386 汇编器和 Grid 文本编辑器的 FAT16 上运行,总代码行数少于 6000 行。
- 它完全在其所有目标上进行自托管。也就是说,运行 Dusk OS 的机器拥有所有必要的工具,既可以改进自身,也可以生成一个媒体来在另一台机器上运行 Dusk OS。
- 为了从自身以外的东西引导自身,它还具有一个用 C 编写的 POSIX-compatible VM,该 VM 能够为其所有目标生成映像。
- 除了 Oberon system (WIP)(在外部记录)之外,文档比代码还多。
- 在 CC0 许可下获得许可,实际上将其置于公共领域。
移植的代码库列表:
- 来自 zlib 的
puff()
算法 - 来自 Plan 9 的 DWC USB 控制器驱动程序
- Michael Schierl 的 RISC5 模拟器,允许 Dusk 运行 Project Oberon。
自研应用程序列表:
- C Compiler
- Oberon Compiler (WIP)
- 某种 Lisp
- Text editor
- Binary editor
- uxn 和 varvara
- i386/amd64 assembler 和 disassembler (i386-only for now)
- ARM assembler 和 disassembler
- RISC-V assembler
- 6502 emulator
到底有多简洁?
$ git checkout v19
$ make dusk
$ ./dusk -f fs/home/codesz.fs
Kilobytes of code in Dusk OS
Everything except /doc /data /tests 728
Documentation 714
Boot payload minus HAL 50
C compiler 49
Oberon compiler 43
Oberon system 98
Lisp 16
Text Editor 13
All USB drivers 62
EFI drivers 14
This script 3
CPU-specific... i386 amd64 arm riscv m68k
Assembler 11 same 5 14 5
Kernel 10 9 13 14 9
HAL 6 6 7 8 7
EFI interface 4 4
作为参考,在 TinyCC 0.9.27 的源代码上运行 wc -c *.c *.h lib/* include/*
会产生 1420 KB 的代码。
获取 Dusk
Dusk OS 的 git 仓库托管在 sourcehut 上。获取它的常用方法是从那里克隆存储库。你可以尝试直接从 master
分支运行它,也可以使用 release tag(例如 v11
)来定位其releases之一。
有关如何构建和运行 Dusk OS 的更多信息,请参阅根目录下的 README 以及其文档。
成为 Dusk operator 是一个复杂的过程。你可能希望在深入学习 Forth 和 Dusk 的精彩冒险之前,先尝尝 Dusk 的力量。你很幸运,有 Dusk Tour,它不需要事先了解 Forth 知识,并且允许你小试牛刀。
对于部署到实际机器,Dusk OS Deployments collection 可能会有所帮助。
还可以选择在其他操作系统之上构建 Dusk Packages。 你可以查看 Dusk Packages examples 以快速入门。
讨论 Dusk
资金
我于 2023 年开始了从现代技术工作的休假,我希望无限期地延长它。为此,我提供了一项服务,我希望它能帮助我实现这一目标。在这方面,我有充分的理由感到乐观,因为sponsors 已经开始行动!
此外,我相信我对 Dusk OS 和 Collapse OS 的工作对某些人来说可能足够重要,以至于它最终可能得到 philanthropically funded。如果你很富有并且受到这项工作的启发,请考虑一下。
为什么要构建这个操作系统?
大多数现代操作系统都可以做我们想让他们做的事情。为什么我们需要另一个操作系统?简单。
很难预测崩溃后的情况,但我们可以假设许多 operators 需要以新颖和创造性的方式使用他们的机器。然后,操作系统的可破解性变得至关重要。所有开源现代操作系统都可以修改以满足用户的需求,但是它们的复杂性限制了用户能够这样做可能性。更简单的操作系统会增加这种可能性。
但是我们不能鱼与熊掌兼得,对吧?要么你有一个简单的玩具操作系统,要么你有一个复杂的操作系统。好吧,也许不是?
它的发起人(我想,还有一些 authors 和 sponsors 也是这么认为的)认为在计算的历史中,Forth 还没有被充分探索。我认为它实现简单性的方法是革命性的。当系统规范变得更加复杂时,它具有很大的缺点(Forth 讨厌复杂性并且不能很好地管理它),但我认为可以将它与更喜欢复杂性的语言优雅地结合起来。
这种混合可以为操作员提供其他方法很少见的计算能力。我们必须尝试一下。
对传统软件文化的挑战
虽然此操作系统的主要目的与文明崩溃有关,但它在很大程度上也是对现代软件堆栈的一种反应。该堆栈令人作呕地复杂。它是滋生复杂性的软件文化的累积效应的产物,并且有机会在数十年中不断发展,未经检查和挑战,在其每个角落都渗出其难以理解的脓液。
我们让这种文化蔓延得越远,就越难摆脱它。硬件忠实地遵循它 - 并以同样虚假的复杂性精神 - 使得从头开始的方法越来越遥不可及……但尚未不可能!
Dusk OS 具有惊人的“功率密度”,也就是说,它以非常小的包容纳了大量功率。这种密度使它能够以复杂性成本的一小部分来完成现代堆栈可以完成的许多事情。
它在一定程度上旨在唤醒软件开发人员:如今开发软件的常规方式是愚蠢和浪费的,并且在过去 30 年中一直是如此。这种愚蠢和浪费会滋养自身,并使我们设计更大,更愚蠢1 的硬件来满足更大,更愚蠢的软件的需求。
我们不需要这个。所有这些汗水、眼泪和鲜血(因为是的,血液参与了一个全球供应链,从而能够生产我们生产的这些疯狂复杂的机器)都是徒劳的,因为传统的计算方法是进化的死胡同。
还有其他方法,我们迫切需要探索它们。Forth 就是这样一种方式。由于它对简单性的亲和力使其不适合虚假的硬件复杂性,因此它很难适应更大的机器。
Dusk OS 旨在弥合这一差距,并成为一个 Forth,是的,它比你普通的 Forth 稍微复杂一些,但会小心保持非常高的“功率密度”,使 Forth 具有革命性,并利用现代硬件赋予我们的虚假功率,从而在功能方面与现代软件堆栈更好地竞争。
使 Dusk OS 与众不同的功能
从源代码构建的完整 OS
Dusk OS 的一个特殊之处在于,它从一个小于 4 KB 的微小内核启动。 从这个微小的核心开始,在启动时,它 从源代码 逐步构建到具有功能齐全的 C 编译器的系统,该编译器然后允许它 从源代码 进一步引导自身。
Dusk OS 的这种特性具有有趣的属性。 在我看来,最nice的一个是,这使我们可以避开二进制兼容性和重定位的 所有 问题,而只处理源代码兼容性。 因此,没有 ELF,没有 binutils,只有旨在从其最初生成的位置运行的代码。 这太简单了!
目标文件? 全局符号? 不用。 C 函数是简单的 Forth 单词。
协调的汇编层
Dusk 具有我们所说的 协调的汇编层(简称 HAL)。这是一个跨 CPU 汇编器,C 编译器依赖于它,该汇编器优先考虑实现和使用简单性,但也被设计为生成高效的本机代码。
"almost C" compiler 自托管的最短路径
Dusk OS 在大约 500 行汇编代码和数百行 Forth 代码中进行自托管(确切的数字取决于目标机器)。 从那里,它引导到 DuskCC,后者大约是 1200 行 Forth 代码。 据我所知,Dusk OS 在这方面是独一无二的。
你可以选择任何需要 POSIX 的 C 编译器,它将自动需要更多数量级的代码行来引导,因为除了 C 编译器之外,你还需要该 POSIX 系统。 因此,即使你选择一个小型 C 编译器(例如 tcc),你仍然需要一个 POSIX 系统来构建它,通常是数百万 LOC。
公平地说,Dusk OS 并不是第一个考虑优化该路径的项目。 使我们现代软件世界可引导的努力 导致了 "almost C"、M2-Planet,其功能集与 DuskCC 相当,代码行数非常少。 M2-Planet 本身大约有 5K 行代码,并且导致它的各个阶段通常每个阶段只有几百行代码。 该项目最初在常规内核之上运行(如“带有大量代码的胖内核”),但创建了一些裸机阶段(1,2),现在这个小链条最终在代码行数方面与 Dusk 相当。 仍然比 Dusk 多,但在同一个范围内。
虽然此路径很短,并且从技术上来说可以让你获得 "almost C" compiler,但你几乎无法使用它,因为它没有“真正的内核”(上面提到的这些裸机阶段足以编译 M2-Planet,但实际上没有其他用途,它们非常有限)并且没有 shell。 如果你想使用你闪亮亮的编译器,你将需要这些。
如果你尝试此路径,最好的选择之一是 Fiwix,这是一个最小的 POSIX i386 内核,代码量少于 50K 行 C+asm。 但是,M2-Planet 还不够。 你需要编译 tcc(M2-Planet 可以在应用一些补丁后编译),其权重为 80K。 用户空间更糟。 Bash+coreutils 为 400K,即使 busybox 为 190K。 我们最终仍然得到了一个非常最小和简单的系统,但它仍然比 Dusk 的代码多得多。
因此,除非有人告诉我一些我不知道的选项,否则 DuskCC 在自托管路径长度方面非常具有创新性。
Dusk OS 速度很快
Dusk OS 生成的代码与具有花哨的优化和数百万行代码的现代编译器保持着很好的兼容性。
在 在 i386 NetBSD 系统上完成的 Byte Sieve 基准测试 中,Sieve 的 DuskCC 版本几乎与 GCC 的未优化版本一样快,HAL 对 Sieve 算法的转换超过了 GCC 的未优化版本,几乎达到了 GCC -O2
的速度!
而且它变得更好了! HAL 的设计允许效率自然地“bubble up”到更高级别的代码,并产生令人印象深刻的结果。 例如,有一个 "charcount" example,它将 Dusk 的 rfind
与 POSIX 的 regex(3)
进行比较。 对于这个特定且简单的用例(计算大文件中字符范围的出现次数),Dusk 比 Debian bookworm amd64 的 regex(3)
实现快 15%。
Dusk 适合谁?
Dusk OS 没有用户,只有 operators。有什么区别?控制权。你 use 手机,你 use 咖啡机,你甚至现在 use 汽车。但是你 operate 推土机,你 operate 起重机,你 operate 飞机。
你 use Linux,你 use Windows。你 operate Dusk OS。
你能 operate Linux 吗?当然,如果你是某种神2,就像如果你是特斯拉顶级工程师,你就可以 operate 特斯拉一样。但是你更有可能能够 operate 割草机而不是特斯拉。
当你 operate 系统时,不会出现任何问题使你无能为力。当然,你可能会遇到硬件故障,使你的系统彻底崩溃,但至少你能够识别出该故障并确信没有软件解决方案或解决方法。这就是控制权。
Dusk operator 是一位 creative、接近硬件、可以阅读数据表的人。当一个人想要不受限制地挖掘硬件时,Dusk 会发光发热。
与其他更完整的操作系统相比,它具有优势,因为没有并发进程来干扰你的挖掘,并且由于其更严格的范围和更精明的目标受众,驱动程序结构更易于访问和破解。 此外,没有“userland”。Dusk 提供的或 operator 构建的每个工具都可以直接在系统内存上使用。没有中间人。
让我们举一个例子。假设你在一台笔记本电脑上运行 Intel ICHn 系列的芯片组。你读取数据表并看到“哦,很好,这里有一个 SPI 接口。也许它没有连接到笔记本电脑上的任何东西,让我们来玩一下。”
现在,该芯片组对计算机来说非常非常重要。在 BSD 或 Linux 系统上,如果你开始挖掘其寄存器,很可能会踩到其他人的脚趾并导致系统崩溃,例如,由于某些其他进程需要同时从磁盘读取数据。
在 Dusk 中,你可以完全破坏 SATA 控制器,只要你不访问大容量存储设备,你仍然是安全的。 由于 Dusk 没有并发,你可以严格控制机器上发生或未发生的事情,因此你需要做的就是避免访问大容量存储设备的单词。 这为你提供了充足的活动空间来进行黑客会话。
需要明确的是:这也可以通过定制的 BSD 或 Linux 来实现,但是你需要在到达那里之前从你的发行版中删除很多部分,并且其中一些部分可能是有用的调试工具,因为它们需要更广泛的系统,因此难以进行改造。 你还需要更大的认知空间,才能将 BSD/Linux 更广泛的抽象概念融入你的脑海。
链接到本网站
如果你想链接到本网站,请使用 http://
链接而不是 https://
链接。虽然 http://
链接可以轻松“升级”到 HTTPS,但反之则不然。
目前,本网站托管在一项服务(sourcehut 页面)上,该服务不提供不使用 SSL 的选项,但最终,本网站可能会由运行 Dusk OS 的机器提供服务。 在这种情况下,它将不会在 SSL 下提供服务,并且所有 https://
链接都将断开。