返回

文章详情

显示 HN: Kakehashi - 在 Linux ARM 上运行 macOS 二进制文件的实验性用户空间

Hacker News2026年8月2日 16:26

用户空间 macOS ARM64 → Linux aarch64 翻译层(以 CLI 为主,无 JIT)。在 Linux aarch64 上加载 Darwin Mach-O,映射独立的 libSystem,翻译 BSD 系统调用,并运行真实的客户机(clang 测试,7-Zip 7zz,curl,线程)。实时执行 Linux aarch64(裸金属,VM,Colima/Docker)干加载/检查任何主机(包括 macOS)设计参考文档/ 工作原理在 Docker/Colima 和 UTM(Linux aarch64)上验证。一次安装:cargo install kakehashi # 或从检出:cargo install --path crates/kh-cli --force kh bottle ensure kh install 7zip # Darwin 7zz → 客户机 /usr/local/bin/7zz kh install curl # Darwin curl → 客户机 /usr/local/bin/curl 相对 -o / 归档路径针对 kh 进程的主机当前工作目录解析(自行创建父目录,或依赖于 O_CREAT 的自动创建)。通过瓶子,/Volumes/linux/… 桥接到主机根(/ → 主机 /)。7-Zip(7zz)# 版本/帮助 kh run 7zz -- kh run 7zz -- --help # 创建归档(相对当前工作目录) kh run 7zz -- a demo.7z README.md kh run 7zz -- t demo.7z kh run 7zz -- l demo.7z kh run 7zz -- x -o./out demo.7z # 多线程压缩(正确性门) kh run 7zz -- a -t7z -m0=lzma2 -mx=5 -mmt=4 mt.7z README.md kh run 7zz -- t mt.7z # 预期:一切正常,退出 0 Docker 帮助程序(主机 .tmp/kh-out/ 下的工件):./scripts/docker-7zz.sh --help ./scripts/docker-7zz.sh a /Volumes/linux/out/demo.7z /Volumes/linux/src/README.md ls -lh .tmp/kh-out/demo.7z KAKEHASHI_HYPERCALL=1 ./scripts/docker-7zz.sh a -t7z -m0=lzma2 -mx=5 -mmt=4 \ /Volumes/linux/out/mt.7z /Volumes/linux/src/README.md ./scripts/docker-7zz.sh t /Volumes/linux/out/mt.7z curl # 横幅(G1) kh run curl -- --version # HTTP GET → 文件(G3 / G5)。-o 的父级在缺失时创建。 kh run curl -- -sS -o .tmp/kh-out/body http://example.com/ # 预期:退出 0,~559 字节,HTML 包含“示例域” wc -c .tmp/kh-out/body head -c 80 .tmp/kh-out/body ; echo # HTTP 到 stdout kh run curl -- -sS http://example.com/ | head -c 80 ; echo # HTTPS GET (G4) — OpenSSL + 瓶子 CA(从主机或 curl.se 下载) kh run curl -- -sS -o .tmp/kh-out/https-body https://example.com/ wc -c .tmp/kh-out/https-body # 负面:错误/self-signed 证书必须失败(rc ≠ 0) kh run curl -- -sS -o /dev/null https://self-signed.badssl.com/ ; echo exit: $? Docker 帮助程序: ./scripts/docker-curl.sh --version ./scripts/docker-curl.sh -sS -o /Volumes/linux/out/body http://example.com/ ./scripts/docker-curl.sh -sS -o /Volumes/linux/out/https-body https://example.com/ ls -lh .tmp/kh-out/body .tmp/kh-out/https-body # 跟踪优先探测日志 → .tmp/kh-curl-probe/ ./scripts/docker-curl-probe.sh --version # 选项矩阵(大层级) → .tmp/kh-curl-options/ ./scripts/docker-curl-options.sh tier1 ./scripts/docker-curl-options.sh tier9-10 ./scripts/docker-curl-options.sh all # tier1..10 在许多运行中无害的噪音: kh: open fail ENOENT(openat) path=/etc/ssl/openssl.cnf — OpenSSL 可选配置;HTTP/HTTPS 仍通过种子 CA 包正常工作。 WARN … 跳过 dylib … Security/CoreFoundation — Apple 框架不在瓶子中;软存根覆盖加载路径。未解析强符号;绑定到命名缺失的跳板 — 符号未在快乐路径上命中。详情及门控:docs/curl.md。 也有绿色表面笔记 Clang / fixture 探测 tests/clang-probe/,tests/fixtures/ 多线程 7zz -mmt=4 Docker + UTM 瓶子 + 独立 libSystem kh bottle ensure 嵌入 dylib 单元测试 + clippy cargo test / clippy 工作空间(不包括 kh-libsystem) 并不是产品声明(还不是) 完整的 curl 功能集(POST 体,代理,HTTP/3 端到端,每种方案),真实的 Apple Security.framework,git / CLT,GUI,代码签名。下一个产品切片:通过 kh install xcode-tools — 查看 docs/git.md。 货物 货物 角色 kakehashi 二进制 kh(安装此项) kh-loader Mach-O 解析、映射、执行 kh-runtime 内存、陷阱、BSD 系统调用、瓶子;嵌入独立的 libSystem.B.dylib kh-libsystem 该 dylib 的源代码(仅限 aarch64-apple-darwin;不是 Linux 主机 crate) 客户机 dylib 嵌入在 crates/kh-runtime/resources/libSystem.B.dylib 并与 include_bytes! 一起编译到运行时。发布 kh-runtime 运输 dylib;最终用户无需单独下载。 要求 Rust 1.88+ Linux aarch64 以实现实时 kh run / kh trace 页面大小:4 KiB(容器)和 16 KiB(Asahi-class) 可选:curl / wget + tar 用于 kh install 7zip / kh install curl 安装 cargo install kakehashi # 或从检出:cargo install --path crates/kh-cli kh bottle ensure kh install 7zip kh install curl 瓶子布局 默认根:~/.local/share/kakehashi/bottle/(使用 KAKEHASHI_DATA_DIR / KAKEHASHI_ROOT 重写)。 主机 客户机 …/bottle/ / …/usr/local/bin/7zz /usr/local/bin/7zz …/usr/local/bin/curl /usr/local/bin/curl …/usr/lib/libSystem.B.dylib /usr/lib/libSystem.B.dylib …/private/etc/ssl/cert.pem /etc/ssl/cert.pem(主机 CA 或下载的 Mozilla) …/Volumes/linux/… /Volumes/linux/… → 主机文件系统 性能(诚实) Kakehashi 原生在 CPU 上运行客户代码。 税收是 syscalls 的开销。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡