XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8

独立内核与原项目能力

默认构建把自研裸机平台和桌面应用分成两个编译边界:本项目的 C# 内核通过 bflat Zero 编译为裸机 ELF,对外提供原生值/指针 ABI;原有 Desktop、Browser、 Documents 和 Terminal 运行在官方 Microsoft .NET 10 NativeAOT 上。 这条默认构建依赖图不引用 Cosmos,但也不意味着 CLR、GC、编译器、字体解析器 和浏览器依赖全部由本项目从零实现。

自研与引用边界

模块 本项目维护的实现 外部引用
NativeKernel 页分配/页映射、GDT/TSS/IDT、LAPIC 中断与单 BSP 调度、原生事件/TLS/受保护线程栈、8042 驱动与 PS/2 报告队列、framebuffer/CMOS RTC 接口 Limine 引导与公开协议;bflat Zero 编译器及最小库;x86_64 硬件公开合约
NativeRuntime 官方运行时与内核之间的内存/线程/同步/GC 挂起/时钟/异常接线,bootstrap 改编,freestanding C 支持与 System.Native 适配 Microsoft 10.0.12 的 GC、EH、对象模型、BCL、NativeAOT 编译器及原始静态库;数学函数来自 musl 1.2.5
Platform CPU 像素混合/裁剪、framebuffer 地址/pitch/RGB masks 输出、字体资源/缓存包装,保留现有桌面画布接口 官方固定 LunarFonts 原 Font.cs、Cascadia Mono/Lato/Noto Sans SC/Bootstrap Icons 字形;未复制 Cosmos 的 Canvas/TrueTypeFont
Desktop / Console 窗口与任务栏、文件/设置/编辑状态、ANSI 文本模型、TextWriter、受限 ConsoleIL 解释与绑定 .NET BCL;自家独立 XFEConsole/XFEExtension NuGet 包
Browser / Documents DOM-JS 接线、任务泵、CSS 级联/有限布局/像素绘制、本地资源/文件会话、网站与 Monaco 适配 AngleSharp/AngleSharp.Css、Jint/Acornima、Markdig/HtmlSanitizer、官方 Monaco 0.52.2;自家网站快照及其 Highlight.js/KaTeX/Mermaid/Bootstrap 资源

完整版本、固定提交、版权和派生关系见根目录 THIRD_PARTY.md。 独立路径许可正文和逐文件 SHA256 在 Tools/IndependentKernel/Licenses/Manifest.json;旧 Cosmos 许可和旧发行物继续保留。 旧 Rust 内核同样引用了外部分配器、同步/设备树/网络等库,不能称完全无外部引用。

构建与源码绑定

在仓库根目录使用完整应用入口:

pwsh -File Tools/IndependentKernel/BuildSystem.ps1

兼容的默认入口 Tools/CSharpBoot/BuildKernel.ps1 已转入上述 BuildSystem, Tools/BootstrapCSharp.ps1 -Build 也使用它。默认 XFESystem.slnx 包含独立 Platform/NativeApplication,不包含旧 Cosmos Kernel;旧路径通过 Tools/CSharpBoot/BuildCosmosKernel.ps1 或 XFESystem.Legacy.slnx 显式构建。旧说明见 LegacyCosmosPreview.md。

-RestoreOnly 只做锁定恢复/工具校验;-DiagnosticProbe 构建运行时诊断应用, 不包含完整桌面。-UpdateLock 是显式更新依赖锁的维护选项,普通构建不需要。 底层 Build.ps1 -BootstrapOnly 只构建独立内核诊断阶段,不能冒称完整应用。

完整构建先恢复新应用和官方工具链锁,校验官方 NuGet/工具字节,再构建固定 musl 数学归档、官方 NativeAOT 应用对象、私有派生运行时归档和最终 Kernel ELF。 官方 NuGet 缓存保持不变,替换的平台归档成员与原始/派生哈希由 PortReceipt.json 记录。Zero 内部 runtime 符号及模块段单独隔离,避免把 Zero 最小库错接为官方 GC/EH。跨编译边界只传原生参数,不共享托管对象。

编译入口不再使用 PowerShell 自动变量 $input 保存主程序集路径。 .deps.json 的 19 个实际应用运行时程序集必须进入 ILC 输入;依赖清单、所有 输入 DLL 及编译脚本正文 SHA256 在编译后再次核对。ILC 即使退出码为零, 出现 analysis/code generation error(如 IL1005)也拒绝产物;不能把替换为 TypeLoader 异常的 Main 当作编译成功。Jint 的反射/动态代码仍有 IL2026 等裁剪 及 IL3050 警告,当前验收只覆盖所执行路径,不宣称任意动态 .NET 互操作通过。

每次构建使用新的 build/IndependentKernel/System-*、Probe-*、Port-*、 Math-* 和 Build-* 目录,产物和回执包含真实输入/工具/对象 SHA256。 源码或资产在编译期间变化会拒绝绑定;不能只凭文件名复用旧 Kernel ELF。 Result.json 的构建成功不代表来宾验收通过。

对本轮构建得到的实际 Kernel 路径执行诊断/完整桌面检查:

python Tools/IndependentKernel/TestBoot.py <Kernel.elf的实际路径> --runtime
python Tools/IndependentKernel/TestBoot.py <完整应用Kernel.elf的实际路径> --desktop --browser --documents

验收脚本建立私有 QEMU/UEFI RAM-only 镜像,并保存源码快照、镜像/内核 SHA256、 串口、QMP 实际设备输入和 framebuffer 截图。来宾串口标记必须出现在实际执行 路径之后;首帧要求桌面渲染完成且实际 framebuffer presentation 计数大于零。 完整桌面与浏览器检查应分别读取 DesktopAcceptancePassed、 BrowserAcceptancePassed 与 DocumentAcceptancePassed,不能用 Probe 或宿主构建替代。

当前开发分支的合并与新增文档验收见 IndependentKernelMerge20261015.md。下列 0.3.0-dev.1 记录对应迁移前的独立分支构建,作为历史证据保留,不代替合并后源码验收。

当前验证范围与运行边界

强化 Probe 已在真实 QEMU 来宾通过:硬件空指针/#DE 异常转为官方 .NET EH、 弱引用循环/终结器、两条托管线程的 Monitor/TLS、GC 压缩期间 mutator 根与 线程 join。对应回执为 build/IndependentKernel/Proof-1792018229223382400/Result.json,该回执明确 ManagedRuntimeAcceptancePassed=true、DesktopAcceptancePassed=false、 BrowserAcceptancePassed=false;配置为 8 个虚拟 CPU / 1 个实际执行 BSP。 后两项必须由完整应用自己的验收回执证明; 本页不将 Probe 结果扩展为完整桌面、实体硬件或全 .NET 兼容性通过。

完整应用已单独通过加强后的验收:8 个虚拟 CPU 的 Proof-1792018208431503800/Result.json 和 1 个虚拟 CPU 的 Proof-1792018289668344500/Result.json 使用同一镜像与内核,均验证实际 PS/2 操作、RAM 保存重开、JavaScript DOM 结果 12、实际嵌入 PE 的 ConsoleIL、 ANSI/XFEConsole 终端,以及 Monaco 的真实三行字形/语法颜色。 键盘加入第四行 xfenativeedit 后模型变化与 360 个新墨迹像素、83 列覆盖均 通过;NoRenderFailures、MonacoRasterPaintCompleted、 MonacoKeyboardEditedModel 全部为 true。对应字节为:

产物 SHA256
App Kernel ELF b4473bec00ed2a566ada2c9f924f6a39f8e7501b361bc85fbfe782c8b9e2cd69
App 128 MiB 镜像 04e8188343b75521f3337c3f004cd3afd3ab391d103321a2102e28edd885c196
App 源码快照 8aaed7b7615091020c181cda663aedddc61c4781eaef0900f528968c85d8f418
实际 Monaco 编辑后 PNG 1a928f96f0dcb0ff8a0d8f36452f034520fbbf8e25452de3cde2ba28e008f2ac
强化 Probe Kernel ELF 878640c5208cf821d5d13ad66c84dd77a2652ca2141b8de176c751451819e0ae

旧 Proof-1792017512226062000 虽由当时脚本按 ready/model 判为通过,实际画面 出现空白字形错误,不能作为成功绘制证据;新脚本拒绝任何 rendering failure, 并实际检查字形、颜色和编辑后的新像素。上述新回执替代该旧结论。 Proof-1792017968952400800 的编译输入漏依赖/TypeLoader 失败也保留为失败记录。 完整摘要及所有截图哈希见 IndependentKernel20261015.json。

CPU raster/字体及同一生产 PS/2 decoder 的宿主回归已通过 37 项,新增真实 Monaco DOM/CPU 绘制与正常 13px 字号下 U+00A0 不换行空格的回归:空白保留 原字体 advance,但不调用上游要求非空轮廓的栅格函数。LunarFonts 原文件保持不变。 额外 System.Native ABI 使用同一生产 C++ 与实际 formatter 的宿主检查通过 131 项值/错误/返回约定,另两次独立进程检查 RTC 缺失/溢出的真实终止行为。 这些测试的设备代替实现仅用于宿主测试,不编入镜像,也不证明实体输入兼容。

全量宿主检查回执 build/CSharp/HostTests-1792018759889/Result.json 已通过, 包含 14 个检查组;Platform 为 37 项,NativeContracts 为 133 项(含两项 RTC 终止检查),合计 1,137 项、0 失败。宿主 API/离线协议检查不等于 guest 网络、 GPU 或实体硬件通过。

独立 0.3.0-dev.1 包已通过源码/镜像/许可证绑定、ZIP 完整回读及重新定位校验, ZIP SHA256 为 3571243b386b03117d1917f04ff982cd0ace61116577e744f32b2f3a25b2f772。 PowerShell 5.1 的打包启动器 PlanOnly 通过;未据此宣称已打开交互窗口。 专用 U 盘的实际写入/回读结果另记录,不将介质校验当作实体启动通过。

介质安全检查包括 24 项独立镜像负例、模拟设备身份/系统盘/容量/token/分区 拒绝,以及普通文件上的容量调整后完整 payload/真实盘尾 GPT 校验。 首轮 USB 操作在锁定证据时使用旧 KernelProjectPath 而停止,未打开实体磁盘; 已按独立 profile 改为 KernelConfigurationPath,并在 PowerShell 5.1 下通过 真实普通文件证据锁定阶段,直到模拟 SetDisk 的写前哨点才停止。 后续第一次重试在 Windows RunAs 提权窗口被取消,辅助进程未创建,未访问磁盘。 用户再次授权后,同一专用 USB 设备实际写入与回读完成:完整 134,217,728 字节、 真实盘尾备份 GPT(LastLba 500118191)通过,容量调整后的实际/预期完整镜像 SHA256 均为 7e068728de99cdc8666ee1569bef6a47f01ccec34e7e5b0f0c6258f022adf7da。 句柄关闭、辅助进程 PID 69312 已退出,设备保持离线;完成记录位于 build/usb-media/XFEstudio-Independent-0.3.0-dev.1-retry-1792018512682/Completion.json 与 Postflight.json,历史失败及取消由 resolved-by-write.json 标记成功解决。 仅介质写入/回读通过,实体启动与实体输入仍未验收。

PS/2 输入仅在实际 8042 初始化和设备 ACK 成功后标记为可用,报告经真实 LAPIC tick 读取设备状态并排队;键盘支持 E0/E1/释放、修饰键、Caps/Shift、 Windows 组合和浏览器 physical code。标准三字节鼠标支持相对位移与按钮, 队列/packet 溢出显式报告丢失并取消捕获,避免错误点击。没有 USB HID 或 鼠标滚轮驱动的通过声明。当前只有 BSP 执行线程,发现多个 CPU 不等于启动 SMP。

应用把 System.Console.Out/Error 明确绑定到本项目的串口 TextWriter。 ConsoleDemo 则绑定实际 TerminalTextWriter,并检查真实 XFEConsole/ANSI 终端单元标记;ConsoleIL 用其实际受限解释器及 TerminalManagedConsole 绑定。 这不提供 POSIX tty、signal、任意 .NET 程序装载或默认系统 Console.ReadKey。 SystemNative stdout/stderr 的底层写入实际走 UART,Dup/Close 使用独立描述符别名。

CMOS 按 UTC 合约读取,HAL 返回 Windows FILETIME;DateTime 原生适配正确转换为 1970 起的 100ns ticks。接口没有单独错误通道,因此 RTC 不可用或超范围时明确 halt,不能返回 0 让 .NET 冒认 1970。逻辑工作目录为 /,镜像程序路径为 /System/Kernel.elf;托管 RAM workspace 不等于 POSIX 文件系统。不存在的文件 与描述符、尚未提供的存储/帐号/网络/动态装载/tty 能力返回真实错误,不能伪造成功。

文件保存在 RAM 会话,关机后消失。独立路径没有持久存储、原生网络/TLS、 GPU/CUDA 或背景编辑器后端;现有旧网络/GPU实验源码不构成本路径能力。 LunarFonts 包装目前按 BMP 字形工作,补充平面字符有替代字形;有限浏览器布局 与真实 Monaco 核心执行不能扩展为 Chromium 级兼容或完整语言服务器。 实体启动、实体输入兼容、长期稳定性和 CUDA/GPU 尚须单独验收。