独立 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 或输入法。
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 不代替字形或保存回读验收。