# 独立内核的 .NET 10 运行时移植 本目录把官方 Microsoft NativeAOT 10.0.12 运行时接到 XFESystem 自己的裸机内核。GC、对象模型、托管异常处理、反射和运行时汇编来自微软的 MIT 许可代码;不能将这些称为本项目自研实现。 `NativePal.cpp`、`KernelPalBridge.cpp`、`Native/ThreadLocal.c`、`Native/RuntimeLocks.cpp` 和 `Native/SystemNativeShim.cpp` 是本项目的平台实现。它们调用自研内核的真实页表、页分配、定时器、线程调度、串口及事件等待。`RuntimeStart.cpp` 的初始化顺序依据官方 NativeAOT bootstrap,并明确标注来源。两个 C# 模块只通过 C ABI 的指针和整数连接,Zero 引导模块的对象、辅助函数和元数据与完整 .NET 模块隔离。 官方 Linux x64 预编译归档使用 System V ABI 的 128 字节栈红区。自写 PAL 的 `-mno-red-zone` 不会改变该归档的机器码;内核必须保护被中断栈的红区。定时 IRQ 使用每线程独立且有保护页的 IST3 栈,调度切换时同步更新 TSS.IST3,保存中的 IRQ 帧也随各线程独立保存。空引用和除零异常使用专用 IST2 栈。内核自检在两个不调用辅助函数、不自行扩栈的原生 leaf 循环中逐项核对 16 个红区哨兵,并要求实际周期中断和抢占发生。 构建使用锁定的官方 Linux x64 NativeAOT 归档。在私有构建目录副本中移除 Linux PAL、GC OS 层、Linux 信号和宿主资源探测对象,保留官方 GC、EH、线程存储、句柄管理、代码管理与 NativeContext 实现。没有复制、改名或链接 Cosmos 的运行时代码。移除成员、工具链及每个输入文件 SHA256 都保存在编译回执中,缺失内核服务时最终链接明确失败。 来源与许可证: - 官方运行时包 `Microsoft.NETCore.App.Runtime.NativeAOT.linux-x64` 10.0.12;包内声明仓库 `https://github.com/dotnet/dotnet`,提交 `95017c711e6afc1085133d440e42b4bd78155701`。 - 官方编译器包 `runtime.win-x64.Microsoft.DotNet.ILCompiler` 10.0.12;Windows ILC 交叉生成 System V x86_64 ELF。 - 两个官方包及完整解包输入锁定在 `Tools/IndependentKernel/Runtime/NativeToolchain.json`,由 `VerifyToolchain.ps1` 核对。微软运行时完整许可证和第三方声明保存在 `ThirdParty/MicrosoftNativeAot10.0.12/`。 - System.Native 公共 ABI 摘录及其 MIT 声明在 `ThirdParty/DotNetSystemNative/`;数学实现由独立锁定的 musl 1.2.5 数学库提供。 当前执行范围为单 BSP、多托管线程、x87/SSE 状态保存和 RAM-only 系统。AVX/OSXSAVE、其他 CPU 执行、持久磁盘、网络/TLS、动态原生库和强密码学熵源都未验收,相关缺失能力返回真实错误或拒绝执行。CMOS 时钟按 RTC 存储 UTC 的约定读取,实体机时区约定和输入兼容性仍需硬件验收。 `Probe/Program.cs` 在真实 guest 中检查压缩 GC 和活根、ConditionalWeakTable 的循环弱引用、终结器、Monitor、两个托管线程之间的 ThreadStatic 隔离、线程 Join、显式 throw/catch/finally,以及空引用、除零、int/long 整数商溢出硬件故障到官方托管 EH 的转换。编译回执本身不代表这些检查通过;必须结合源码绑定的 guest 串口和 `TestBoot.py` 回执。