概要
Kakehashi は、macOS ARM64ユーザ空間バイナリを Linux aarch64 環境でCLI中心に実行するトランスレーションレイヤー。 JITなし でMach-Oバイナリをロードし、libSystemやBSDシステムコールを翻訳。 Docker/ColimaやUTM での動作が確認済み。 7-Zipやcurlなど実際のDarwinバイナリ をLinux上で動作可能。 コスト効率の高いCI 運用や開発用途に最適。
Kakehashi: macOS ARM64 → Linux aarch64 トランスレーションレイヤー概要
- CLIファースト 設計、JITなしでMach-OバイナリをLinux aarch64上で実行
- libSystem.B.dylib を独立実装し、BSDシステムコールをLinuxにマッピング
- 本物のDarwinバイナリ (例:7-Zip 7zz, curl, clang probes, スレッド対応)を実行
- ライブ実行 :Linux aarch64(ベアメタル、仮想環境、Colima/Docker)で稼働
- Dry-load/インスペクト :任意のホスト(macOS含む)でバイナリのロード・検査
インストール手順
- Rust 1.88+ と Linux aarch64 が必要
- インストールコマンド
- cargo install kakehashi
- またはローカルチェックアウトから: cargo install --path crates/kh-cli --force
- bottle環境の初期化: kh bottle ensure
- ゲストバイナリのインストール: kh install 7zip / kh install curl
ボトル(bottle)構成
- デフォルトパス: ~/.local/share/kakehashi/bottle/
- ホスト/ゲストのパス対応
- /usr/local/bin/7zz(ホスト) → /usr/local/bin/7zz(ゲスト)
- /Volumes/linux/… → ホストのルートディレクトリをゲストにブリッジ
- -o/アーカイブパス はkhプロセスのカレントディレクトリ基準で解決
7-Zip(7zz)の利用例
- バージョン表示: kh run 7zz -- --help
- アーカイブ作成: kh run 7zz -- a demo.7z README.md
- アーカイブ検査: kh run 7zz -- t 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
- Dockerヘルパースクリプト: ./scripts/docker-7zz.sh
curlの利用例
- バージョン表示: kh run curl -- --version
- HTTP GET → ファイル: kh run curl -- -sS -o .tmp/kh-out/body http://example.com/
- HTTP GET → 標準出力: kh run curl -- -sS http://example.com/ | head -c 80
- HTTPS GET: kh run curl -- -sS -o .tmp/kh-out/https-body https://example.com/
- Dockerヘルパースクリプト: ./scripts/docker-curl.sh
パス解決とファイルシステム
- /Volumes/linux/ 以下がホストFSにブリッジ
- 例: /Volumes/linux/src/README.md → <repo>/README.md
- /Volumes/linux/out/demo.7z → <repo>/.tmp/kh-out/demo.7z
パフォーマンス・実測値
- ネイティブCPU実行、命令レベルエミュレーションなし
- 主なオーバーヘッドは システムコール境界 で発生
- Ubuntu aarch64ベアメタルでの例
- ネイティブLinux 7zz: 約22.5秒
- Darwin 7zz(kh経由): 約118秒(約5.2倍)
- 少ファイル圧縮などでは1.1~1.2倍程度まで縮小
- CI用途では コスト効率 が高い(Linux aarch64はmacOSの10分の1程度の単価)
制限事項・注意点
- GUI、codesign/notarization、Xcode UIテストなどは非対応
- Apple Security.frameworkや本物のmacOSフレームワークは未実装(ソフトスタブで回避)
- 本プロジェクトは Darling とは無関係
- プロプライエタリなApple SDKやバイナリの同梱禁止
- Apache License 2.0(LICENSE.txtとNOTICE参照)
開発・テスト・CI向け利用方法
- Docker/Colima でのクイックスタート
- docker build -t kakehashi:dev -f Dockerfile.dev .
- docker run --rm -v "$PWD":/src -w /src kakehashi:dev \ cargo test --workspace --exclude kh-libsystem
- smokeテスト一式: ./scripts/docker-smoke.sh
- ビルド・テスト
- cargo build -p kakehashi --release
- cargo test --workspace --exclude kh-libsystem
- cargo clippy --workspace --exclude kh-libsystem --all-targets -- -D warnings
- libSystem.B.dylibの更新
- cargo build -p kh-libsystem --release --target aarch64-apple-darwin
- ./scripts/stage-libsystem.sh
テストマトリクス
- 単体テスト: cargo test --workspace --exclude kh-libsystem
- Docker smokeテスト: ./scripts/docker-smoke.sh
- フィクスチャテスト: kh run --expect-code … tests/fixtures/…
- Clangプローブ: kh run --root tests/fixtures/bottle tests/clang-probe/puts_hello
- 実バイナリテスト: ./scripts/docker-7zz.sh, ./scripts/docker-curl.sh
主要スクリプト一覧
- stage-libsystem.sh: libSystem.B.dylibビルド&配置
- install-linux.sh: kh本体&bottleセットアップ
- docker-smoke.sh: Docker内smokeテスト
- docker-7zz.sh / docker-curl.sh: Darwinバイナリのテスト実行
- docker-curl-probe.sh: curlのプローブログ生成
- docker-curl-options.sh: curlフラグ組み合わせテスト
- docker-git.sh: Apple gitテスト
- bench-fair-local.sh: ネイティブvs khパフォーマンス比較
今後の展望
- curlの全機能対応 (POST、プロキシ、HTTP/3、各種スキームなど)
- Apple Security.frameworkやgit/Xcodeツール群 の対応強化
- GUIやcodesign等のmacOS固有機能への対応は未定
Kakehashi は、macOS ARM64バイナリをLinux aarch64上でコマンドライン主体に安全・効率的に実行したい開発者・CIユーザー向けの強力なツール。 コスト削減・クロスプラットフォーム検証 に最適な選択肢。