diff --git a/.agents/docs/2026-08-21-freestanding-outstanding-four.md b/.agents/docs/2026-08-21-freestanding-outstanding-four.md index c88d30e3..655b38ff 100644 --- a/.agents/docs/2026-08-21-freestanding-outstanding-four.md +++ b/.agents/docs/2026-08-21-freestanding-outstanding-four.md @@ -650,6 +650,38 @@ QEMU 可以从源码构建,而且**只构建需要的目标**能把代价压下 ⚠️ macOS 那两条腿不 strip,并且说明了原因:strip Mach-O 会让 ad-hoc 签名失效,这 正是本生态发布流水线自己的规则。 +### 4.3.2 ⭐ 选定载荷之后的数字:392 MB → 54 MB + +把五条腿都从 `meson install` 改成**显式组装**(模拟器 + `pc-bios` + Windows 上用 +`ldd` 实测出的 13 个 MinGW 运行时 DLL)之后: + +| 宿主 | `meson install` | 显式组装 | strip 后 | +|---|---|---|---| +| linux-x64 | 392 MB | 103 MB | **54 MB** | +| linux-arm64 | 389 MB | 100 MB | **53 MB** | +| darwin-arm64 | 341 MB | — | **53 MB**(不 strip) | +| darwin-x64 | 342 MB | — | **53 MB**(不 strip) | +| win32-x64 | (装不出来) | 110 MB | **58 MB** | + +⭐ **七倍。** 而这不是收尾优化:索引的资产预算是实测 **0.012 MB/s** 的单连接上传、 +无分片、无断点续传,343 MB 的载荷在那条链路上是不可发布的,54 MB 的可以。也就是说 +「载荷选什么」不是打包细节,而是**收录能否成立的前提**。 + +⚠️ `pc-bios` 一个文件都没删。哪些 blob 会在运行时被加载是描述符要回答的问题,靠 +「删到出问题为止」来回答,就是一个载荷在别人机器上少一个 blob 的由来 —— 本次实施在 +这里犯过一次(顺手删了 `keymaps` 与固件描述符),当场撤回。 + +### 4.3.3 收录 `xim:qemu-x86` 还差什么 + +五条腿全绿这个门槛已经达到,而收录仍是一个**独立的决定**,它现在有了做决定所需的 +全部数字。剩下的三步与 `qemu-riscv` 的做法同形: + +1. 把五个资产发布成一个**版本化 release**,每个带 `.sha256` 侧文件; +2. 镜像到 `xlings-res/qemu-x86` 双端,并按「回探下载 URL」而不是退出码判定成功; +3. 写 `xim:qemu-x86` 描述符,`deps` 是否为空按 `qemu-arm` 的做法**实测 DT_NEEDED / + otool 闭包**后决定,而不是从兄弟描述符抄结论。⚠️ Windows 一侧的答案已经量出来了: + **13 个 MinGW 运行时 DLL 必须与 exe 同目录**,因为 PE 没有 rpath。 + ⭐ 这一步的价值在于**先把五条流水线跑通,再谈收录**。GitHub 托管的 runner