# 独立 NativeAOT 桌面应用入口 `NativeApplication.csproj` 是普通 .NET 10 可执行项目;官方 NativeAOT 生成的 `__managed__Main` 由 `RuntimeStart.cpp` 的完整运行时 bootstrapper 调用。它不引用 Cosmos,继续使用项目的 Platform、Desktop、Browser、Documents、ConsoleDemo 与受限 ManagedRuntime。 `NativePlatform` 只以 C ABI 的原生值/指针访问 `xfe_pal`: | 入口 | 合约 | | --- | --- | | `xfe_runtime_framebuffer_info` | 填入 56 字节 `NativeFramebufferInfo`;1 成功、0 不可用 | | `xfe_runtime_write` | UTF-8 bytes 指针及 uint64 长度;有界 UART | | `xfe_runtime_mono_ns` | uint64 单调纳秒 | | `xfe_runtime_clock_ready` | 1 表示内核单调时钟可用 | | `xfe_runtime_halt` | 最多 256 字节 NUL 结束失败原因,永久停止;不是空闲等待 | | `xfe_runtime_input_ready` | 成功初始化的 8042 设备位图:键盘 1、鼠标 2、实际协商的滚轮 4 | | `xfe_runtime_input_read` | 一份真实有序的 32 字节 PS/2 报告;1 有报告、0 暂无报告 | Framebuffer 结构与内核 `NativeFrameSurface` 对齐:Address 在 0、MappedBytes 在 8;Width/Height/PitchBytes/BitsPerPixel 在 16/20/24/28;RedMaskSize/Shift、GreenMaskSize/Shift、BlueMaskSize/Shift 在 32/36/40/44/48/52。应用校验并生成连续 masks,交给 `MemoryFramebufferPresenter` 写实际映射的 framebuffer。 初始化真实 `CpuFramebufferCanvas`、`MemoryWorkspace`、`DesktopSession`、`BrowserService` 和终端,首帧完成且实际 Present 计数非零之后,才写 `XFE_INDEPENDENT_DESKTOP_FIRST_FRAME`。终端使用原有深色背景和蓝色字,启动只保留 `XFESystem|XFEstudio`、版本与 help 提示;没有 Run Demo 工具栏。每个窗口拥有独立 `TerminalShell`,提供 RAM 文件命令、历史和光标编辑。`ManagedApplicationRunner` 读取 RAM 工作区中的实际 PE,在独立程序 worker 中执行,完成后由 UI 接收不可变输出快照。原 `Samples/XFESystem.ManagedHello` 的生成 DLL 通过 ProjectReference 的 EmbeddedResource 输出类型随应用嵌入,不生成替代 IL。 Main 使用 `Ps2InputSource` 从内核真实 8042 队列读取报告,再接入现有 Desktop/Browser。`Connected` 只有 `input_ready` 返回非零初始化位图时才为 1;仍需来宾输入证据验证报告到界面的完整路径。没有伪造设备事件或读取宿主窗口。主循环仅在同一托管线程按单调时钟推进现有桌面反馈/浏览器任务和绘制。编辑/文档准备与导航分别由真实 .NET 线程的有界 FIFO 执行;字体覆盖率在 worker 私有画布生成后,以不可变快照交给 UI。主循环当前主动轮询时钟。现有 .NET 运行时的托管线程身份用于诊断,没有硬编码伪造线程 ID。 32 字节报告依次为 uint32 Kind/KeyCode/Unicode/Modifiers、int32 DeltaX/DeltaY、uint32 Buttons、int32 Wheel。Kind 为 make 1、break 2、pointer 3、lost 4;E0 key code 带 0x100,完整 E1 Pause 为 0x245。Modifiers 为 Shift 1、Ctrl 2、Alt 4、Super 8、Caps 16、Num 32。鼠标 Y 已由内核转换为屏幕向下;应用先累计、裁剪 native 像素,再转换 layout 坐标。PS/2 驱动真实协商 IntelliMouse ID 3 的四字节报文,输出向上为正的滚轮值;协商失败时重置设备并保留三字节兼容,其滚轮能力位关闭。旧桌面主入口当前消费左键,右键/中键尚未提供新的桌面动作。 `Ps2Decoder.cs` 是本项目新写的纯字节解码器,由 NativeKernel 驱动和本应用 Compile Link 使用同一生产源码,不依赖 Cosmos 驱动/Key 枚举。E1 不污染 Ctrl/Num 状态,PrintScreen 的伪 Shift 字节不改真实 Shift,Caps/Num 只在首次 make 时翻转。应用将 Win/Alt/Ctrl 快捷键与普通网页键盘事件分开,保留 browser code、repeat、make/break 和当前修饰键;输入丢失会结束 Alt 窗口切换、释放已记录的网页键并取消鼠标捕获,禁止把丢失包合成为点击。当前键盘字符采用 US set-1 布局,未接 USB HID 或输入法。 ```powershell dotnet build Source/XFESystem.NativeRuntime/Application/NativeApplication.csproj -c Release --artifacts-path build/NativeApplicationHostBuild powershell -NoProfile -ExecutionPolicy Bypass -File Tools/IndependentKernel/Runtime/CompileProbe.ps1 -ProjectPath Source/XFESystem.NativeRuntime/Application/NativeApplication.csproj ``` 这些命令分别证明托管构建和 ELF 交叉编译。只有独立内核安装完整 PAL、官方 .NET 初始化实际成功、来宾日志出现首帧标记且 framebuffer 截图符合现有桌面后,才能报告裸机运行通过。应用源中的成功标记、生成对象、宿主图像或可链接都不能替代来宾证据。 `NativeWebTransport` 在导航 worker 中使用自研 e1000/TCP、BC TLS 与显式 Mozilla 根证书快照。网卡范围为 QEMU 82540EM(8086:100e)及静态 user NAT,未实现实体网卡或 DHCP。TLS 的 UTC 来自 CMOS(QEMU 必须 `-rtc base=utc`),硬件熵通过 `xfe_runtime_random_fill`;缺失、失败或证书验证错误均拒绝。HTTP 请求包含总截止时间,关闭还有至多 250ms 的独立清理预算。根资源固定为 2026-09-25 的 121 个 Mozilla 根,来源、SHA256 与 MPL 正文在 `Security` 目录。 BC 在普通 .NET/Linux 初始化时隐式调用 OpenSSL 随机接口;独立内核的编译路径显式启用 `Tools/TlsEntropyPatch`,只把固定 BC 私有输出副本的随机入口接到硬件适配器,保留 TLS 与证书算法。宿主构建不启用此端口,全局 NuGet 包保持原样。原始、派生 DLL、适配器和补丁源码哈希随原生编译记录绑定。它不等于实现了通用 OpenSSL 或全部 .NET 密码 API。 真实 HTTPS 验收需要同一来宾中的原生响应(状态、证书验证、正文哈希)、同正文 DOM/布局快照、实际 framebuffer Present 及截图。`XFE_REMOTE_PAGE_PROOF` 不执行脚本或取宿主图像。页面样式重定向保留请求与最终资源地址。具体通过情况以源码绑定的 `Result.json`、`BingEvidence.json` 和 `docs/validation-results` 为准;完整 CSS、实体兼容和完整发行资格保持独立验收。 默认入口已合入当前开发分支。保留现有 Markdown 平铺预览、Edit/Split、实时预览、保存重开和网站组件失败时的源码回退;原生外部资源上限继续为 2,500,000 字符。呈现确认只在后台快照实际完成 framebuffer Present 后发出,模型 ready 不代替字形或保存回读验收。