stamatios
← Voltar ao feed
Kakehashi: camada de tradução roda apps macOS ARM64 em Linux aarch64
Open Source · Dev & Engenharia

Kakehashi: camada de tradução roda apps macOS ARM64 em Linux aarch64

resumo de ~3 min

O que é Kakehashi

Kakehashi é uma camada de tradução em userspace que permite executar binários macOS ARM64 (Mach-O) em Linux aarch64, sem JIT. O projeto carrega executáveis Darwin no Linux, mapeia uma libSystem freestanding, traduz syscalls BSD e já roda programas reais como 7-Zip (7zz), curl e probes compilados com clang.

Como funciona

O código do convidado roda nativamente na CPU - não é um emulador de instruções. O custo vem da fronteira de syscall (troca de TLS, alt stack, save/restore de NEON, dispatch em Rust). Em benchmarks com compressão multi-arquivo (~8 mil arquivos, ~240 MiB), a relação ficou em ~×5,2 comparado ao 7zz nativo Linux. Em workloads com poucos arquivos e muita compressão, a diferença cai para ~×1,1–1,2.

Casos de uso validados

  • 7-Zip (7zz): criação, listagem, extração e compressão multi-thread (-mmt=4) funcionando.
  • curl: HTTP GET, HTTPS com OpenSSL e CA bundle, saída para arquivo ou stdout. POST bodies, proxies e HTTP/3 ainda não estão completos.
  • Clang probes e fixtures: testes de carga e execução básica.
  • Próximo alvo: git via kh install xcode-tools.

Proposta de valor para CI

O argumento central não é "tão rápido quanto macOS nativo", mas sim rodar ferramentas CLI Darwin em runners Linux aarch64 baratos em vez de capacidade macOS cara e escassa. Nos preços do GitHub Actions, um minuto de runner macOS custa ~10–12× mais que Linux arm64. Mesmo com o overhead de ~×5, o custo faturado pode ser menor (exemplo ilustrativo: 5 × $0,005 ≈ $0,025 vs 1 × $0,062).

Quando macOS ainda vence: GUI, codesign/notarização, testes de UI do Xcode ou qualquer workload que não seja um binário CLI Darwin puro sob libSystem freestanding.

Arquitetura

Crate Papel
kakehashi Binário kh (CLI)
kh-loader Parse, mapeamento e execução de Mach-O
kh-runtime Memória, traps, syscalls BSD, bottle; embute libSystem.B.dylib
kh-libsystem Fonte da dylib (compilado apenas para aarch64-apple-darwin)

A libSystem é embutida via include_bytes! no runtime - o usuário final não precisa de download separado.

Requisitos e instalação

  • Rust 1.88+, Linux aarch64 para execução ao vivo.
  • Suporte a páginas de 4 KiB (containers) e 16 KiB (Asahi-class).
  • Instalação: cargo install kakehashi, depois kh bottle ensure e kh install 7zip / kh install curl.

Limitações atuais

Não suporta curl completo (POST, proxies, HTTP/3), Apple Security.framework real, git/CLT completo, GUI, codesign. O projeto é licenciado sob Apache 2.0 e não é derivado do Darling.