toaruos

toaruos

独立开发的完整操作系统 集成桌面功能与教育价值

ToaruOS是一款独立开发的完整操作系统,主要支持x86-64架构PC,并正在试验ARMv8支持。系统集成了内核、引导加载程序、动态链接器、C标准库、自研窗口系统、动态编程语言和代码编辑器等组件。ToaruOS作为教育资源,模拟了主流桌面操作系统的核心功能。该项目不依赖外部运行时,所有源代码均包含在存储库中,为操作系统开发者和学习者提供了全面的参考。

ToaruOS操作系统x86-64开源教育资源Github开源项目

ToaruOS

ToaruOS是一个适用于x86-64 PC的"完整"操作系统,并对ARMv8提供实验性支持。

虽然许多独立、业余和研究性操作系统都旨在尝试新设计,但ToaruOS的目的是作为一种教育资源,提供主要桌面操作系统功能的代表性缩影。

该操作系统包括内核、引导加载程序、动态共享对象链接器、C标准库、自己的合成窗口系统、动态字节码编译编程语言、高级代码编辑器以及数十个其他实用程序和示例应用程序。

没有外部运行时依赖,所有必需的源代码(主要是C语言,共计约10万行)都包含在此存储库中,除了单独存放的Kuroko

截图 ToaruOS的用户界面和一些应用程序演示。

历史

我已经开发ToaruOS超过十年了,这些年来我的目标也发生了变化。

2010年12月我首次启动这个项目时,我的目标是"边学边做"——通过从头开始制作一个类Unix系统来学习它。 几年前我曾是Compiz的贡献者,Compiz是X11上最早广泛使用的合成窗口管理器之一,ToaruOS自然而然地很早就获得了基于类似概念构建的GUI。

在2015年发布1.0版本时,ToaruOS还不是后来成为的"完全从头开始"的操作系统。 Newlib提供了libc,GUI则建立在Cairo、libpng和Freetype之上。 2018年年中,我开始了一个新项目来替换这些第三方组件,最终完成并合并成为ToaruOS 1.6。

在整个项目过程中,ToaruOS也吸引了不少初学者OS开发者尝试将其作为参考。 然而,ToaruOS的内核一直是我个人的尴尬之源,2021年4月,在长时间搁置后,我开始着手开发一个新的内核。 结果就是Misaka:一个新的64位、支持SMP的内核。Misaka于5月合并,开启了通往ToaruOS 2.0的1.99系列beta版本。

特性

  • 动态链接的用户空间,具有共享库和dlopen功能。
  • 合成图形用户界面,采用软件加速,设计灵感来自2000年代后期。
  • 虚拟机集成,在VirtualBox和VMware Workstation中支持绝对鼠标和自动显示大小调整。
  • 类Unix终端界面,包括功能丰富的终端模拟器和多个熟悉的实用工具。
  • 可选的第三方移植,包括GCC 10.3、Binutils、SDL1.2、Quake等。

主要组件

  • Misaka(内核),kernel/,一个混合模块化内核,是操作系统的核心。
  • Yutani(窗口合成器),apps/compositor.c,管理窗口缓冲区、布局和输入路由。
  • Bim(文本编辑器),apps/bim.c,一个受Vim启发的编辑器,带有语法高亮功能。
  • Terminalapps/terminal.c,类xterm终端模拟器,支持24位色。
  • ld.so(动态链接器/加载器),linker/linker.c,加载动态链接的ELF二进制文件。
  • Esh(shell),apps/esh.c,支持管道、重定向、变量等。
  • Kuroko(解释器),kuroko/,一种动态字节码编译编程语言。

当前目标

以下项目目前正在进行中:

  • 重写网络栈,以提高吞吐量、稳定性和服务器支持。
  • 提高SMP性能,通过更好的调度和更智能的用户空间同步函数。
  • 支持更多硬件,为AHCI、USB、virtio设备等开发新的驱动程序。
  • 重新引入移植,从ToaruOS "Legacy"中引入如muPDF和Mesa等。
  • 提高POSIX兼容性,特别是在信号、同步原语方面,同时提供更多常见实用程序。
  • 继续改进C库,与Newlib相比仍然相当不完整,是重新引入旧移植时的主要问题来源。
  • 替换第三方开发工具,使操作系统仅需添加C编译器就能实现自托管。
  • 实现C编译器工具链,在toarucc中。

构建 / 安装

使用Docker构建

希望从源代码构建ToaruOS的普通用户建议在Github上fork仓库并使用Github CI流水线。

对于那些希望在配置适当的Linux主机上使用Docker进行本地构建的人,可以使用构建容器。ToaruOS仓库应该作为绑定挂载点挂载到/root/misaka,然后在这个容器内运行util/build-in-docker.sh来完成编译过程:

git clone https://github.com/klange/toaruos
cd toaruos
git submodule update --init kuroko
docker pull toaruos/build-tools:1.99.x
docker run -v `pwd`:/root/misaka -w /root/misaka -e LANG=C.UTF-8 -t toaruos/build-tools:1.99.x util/build-in-docker.sh

这样构建后,你可以运行各种实用目标(make run等)。尝试make shell以使用QEMU的串口运行ToaruOS shell。

构建过程内部细节

Makefile使用Kuroko工具auto-dep.krk为用户空间应用程序和库生成额外的Makefile,根据#include指令自动解析依赖关系。

以不确定的顺序构建C库、内核、用户空间库和应用程序,将它们组合成一个压缩归档文件用作ramdisk,然后打包成ISO9660文件系统镜像。

项目布局

  • apps - 用户空间应用程序,全部为第一方。
  • base - Ramdisk根文件系统暂存目录。包括base/usr/include中的C头文件,以及合成器和窗口装饰器的图形资源。
  • boot - 带有交互式菜单的BIOS和EFI加载程序。
  • build - 平台移植的辅助构建脚本。
  • kernel - Misaka内核。
  • kuroko - Kuroko解释器的子模块检出。
  • lib - 用户空间库。
  • libc - C标准库实现。
  • linker - 用户空间动态链接器/加载器,实现共享库支持。
  • modules - 内核的可加载驱动程序模块。
  • util - 实用脚本,工具链(binutils/gcc)的暂存目录。
  • .make - 生成的Makefile。

文件系统布局

根文件系统设置如下:

  • bin:第一方应用程序。
  • cdrom:CD的挂载点(如果可用)。
  • dev:由内核生成的虚拟设备目录。
    • net:网络接口设备。
    • pex:数据包交换中心,列出可访问的IPC服务。
    • pts:PTY从设备,TTY的端点。
  • etc:配置文件、启动脚本。
  • home:用户目录。
  • lib:第一方库
    • kuroko:Kuroko模块。
  • mod:可加载内核模块。
  • proc:展示内核状态的虚拟文件。
    • 1等:包含各个进程状态信息的虚拟文件。
  • src:源文件,见上面的"项目布局"部分。
  • tmp:通常挂载为读写tmpfs。
  • usr:用户空间资源
    • bin:第三方应用程序,通常在安装包之前为空。
    • include:头文件,可能包括第三方包的头文件。
    • lib:第三方库。默认应该有libgcc_s.so
    • share:各种资源。
      • bim:文本编辑器的语法高亮和主题。
      • cursor:鼠标光标精灵图。
      • fonts:TrueType字体文件。Live CD附带Deja Vu Sans。
      • games:游戏相关资源文件的集中地,如Doom wads。
      • help:帮助浏览器应用程序的文档文件。
      • icons:PNG图标,按大小分为不同目录。
      • ttk:窗口装饰器和小部件库的精灵表资源。
      • wallpapers:JPEG壁纸。
  • var:运行时文件,包括包管理器清单缓存、PID文件、一些锁文件等。

运行ToaruOS

VirtualBox和VMware Workstation

ToaruOS在这两个虚拟机中能提供最佳的终端用户体验,因为ToaruOS支持它们的自动显示大小调整和绝对鼠标定位功能。

为"其他"64位客户机设置新的虚拟机,至少提供1GiB RAM,附加CD镜像,移除或忽略任何硬盘,并选择Intel千兆网卡。还建议使用两个或更多CPU。

VirtualBox截图 ToaruOS在VirtualBox中运行。

VMware截图 ToaruOS在VMware Workstation Player中运行。

默认情况下,引导加载程序会向VirtualBox设备驱动程序传递一个标志以禁用"无缝"支持,因为该实现会带来性能开销。要启用无缝模式,请在引导前使用引导加载程序菜单勾选"VirtualBox无缝"选项。菜单中还有选项可以禁用自动客户机显示大小调整,以防你在使用此功能时遇到问题。

QEMU

ToaruOS的大部分开发都在QEMU中进行,因为它提供了最灵活的硬件选择和最佳的调试体验。在Ubuntu 20.04主机上推荐使用以下QEMU命令行:

qemu-system-x86_64 -enable-kvm -m 1G -device AC97 -cdrom image.iso -smp 2

在没有KVM的主机平台上,将-enable-kvm替换为-accel hvm-accel haxm,或者删除它以尝试在QEMU的TCG软件模拟下运行。

请注意,QEMU命令行选项并不稳定,这些标志在较新版本中可能会产生警告。

选项-M q35将用较新的模拟替换PIIX芯片组模拟,这会将IDE控制器切换为SATA控制器。这可能会导致更快的启动时间,但代价是ToaruOS在运行时无法读取自己的CD,直到我完成AHCI驱动程序。

其他

ToaruOS已在真实硬件上成功测试。如果原生BIOS或EFI加载程序无法正常工作,请尝试使用Grub引导。ToaruOS符合"Multiboot"和"Multiboot 2"规范,因此可以使用multibootmultiboot2命令加载,如下所示:

multiboot2 /path/to/misaka-kernel root=/dev/ram0 migrate vid=auto start=live-session
module2 /path/to/ramdisk.igz
set gfxpayload=keep

原生照片 ToaruOS 在 ThinkPad T410 上从 USB 存储器原生运行。

许可证

ToaruOS 的所有第一方部分均按照伊利诺伊大学/NCSA 许可证的条款提供,这是一种类 BSD 的宽松许可证。 除非另有说明,这是本存储库中所有文件的原始和唯一许可证 - 仅仅因为某个文件没有版权声明并不意味着它不受此许可证约束。 ToaruOS 旨在作为一个教育参考,我鼓励使用我的代码,但请务必遵守许可证的要求。 您可以根据 NCSA 许可证重新分发代码,也可以修改代码并以其他条款(如 GPL 或专有许可证)进行再许可,但您必须始终包含许可证中指定的版权声明,并向最终用户提供完整的许可证文本(它只有几段)。

虽然 ToaruOS 的大部分内容都是我自己完全编写的,但请务必在相关地方包括其他作者,例如 Mike 的音频子系统Dale 的字符串函数

ToaruOS 的某些组件,如 Kurokobim,有不同但兼容的条款。

社区

镜像

ToaruOS 定期镜像到多个 Git 托管站点。

IRC

Libera (irc.libera.chat) 上的 #toaruos 频道

常见问题

ToaruOS 是自托管的吗?

通过安装存储库中的 build-essential 元包(它将引入 gccbinutils),可以构建单独的应用程序和库。 源代码在 live CD 上的 /src 目录中,布局类似于本存储库,auto-dep.krk 实用脚本也可用。

对于构建 ramdisk、最终内核或 CD 镜像,某些组件目前不可用。 特别是,ramdisk 的构建脚本仍然用 Python 编写,依赖于其 tarfile 模块和 zlib 支持。 以前,使用合适的编译器工具链,ToaruOS 1.x 能够构建自己的内核、用户空间、库和引导加载程序,并通过一个 Python 脚本将这些转换为可工作的 ISO CD 镜像,该脚本执行类似于 Makefile 的功能。

由于缺乏适当的 POSIX shell 和 Make 实现,ToaruOS 目前无法构建其大部分移植软件。这些是项目的最终目标。

ToaruOS 是一个 Linux 发行版吗?

不,完全不是。ToaruOS 中没有任何来自 Linux 的代码,也没有使用 Linux 源代码作为参考材料。

ToaruOS 是一个完全独立的项目,本存储库中的所有代码 - 包括操作系统的整个代码库,包括其内核、引导加载程序、库和应用程序 - 都是原创的,由我自己和少数贡献者在十年的时间里编写的。 完整的源代码历史,可以通过这个 git 存储库追溯到 ToaruOS 还只是一个裸机"hello world"的时候。

当你说"完整"时...

ToaruOS 在涵盖操作系统的全部功能范围方面是完整的:它不仅仅是"一个内核"或"一个用户空间"。

ToaruOS 在"完成"的意义上并不完整。

ToaruOS 是否符合 POSIX 标准?

虽然我的目标是支持 POSIX 接口,以便能够移植软件,但严格实施标准并不是操作系统的主要目标,完全符合可能甚至是不可取的。

是否接受贡献?

ToaruOS 是一个个人项目,而不是一个社区项目。以代码形式的贡献应该事先讨论。然而,存储库之外的移植和其他工作是帮助的好方法。

您也可以通过为 Kuroko 做出贡献来提供帮助 - 这也是为什么它被保存为一个单独的存储库。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多