# 独立内核与原项目能力 默认构建把自研裸机平台和桌面应用分成两个编译边界:本项目的 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 内核同样引用了外部分配器、同步/设备树/网络等库,不能称完全无外部引用。 ## 构建与源码绑定 在仓库根目录使用完整应用入口: ```powershell 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](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 路径执行诊断/完整桌面检查: ```powershell python Tools/IndependentKernel/TestBoot.py --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](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](validation-results/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 尚须单独验收。