Kakehashi؛ اجرای باینریهای مک روی لینوکس
خلاصهٔ کاملتر
Kakehashi یه پروژهی متنباز با لایسنس Apache 2.0 ـه که با Rust نوشته شده و کار کمسابقهای میکنه: باینریهای macOS ARM64 رو روی لینوکس aarch64 اجرا میکنه. مدلش userspace و CLI-first ـه؛ فایل Mach-O مربوط به Darwin رو لود میکنه، یه libSystem مستقل (freestanding) رو کنارش map میکنه و syscallهای BSD رو به معادل لینوکسی ترجمه میکنه. خبری از JIT یا شبیهسازی دستورالعمل نیست — کد مهمون مستقیم روی همون CPU اجرا میشه.
تو مستندات پروژه اومده که چیزهایی که الان واقعاً سبزن، روی Docker/Colima و UTM تست شدن: نسخهی Darwin ابزار 7-Zip (همون 7zz) حتی با فشردهسازی چندنخی، ابزار curl روی HTTP و HTTPS، پروبهای clang و کار با نخها. نصب از مسیر cargo انجام میشه و بعدش یه bottle ساخته میشه که نقش فایلسیستم مهمون رو بازی میکنه و مسیر /Volumes/linux/… توش به فایلسیستم میزبان وصله.
بخش صادقانهی مستندات، هزینهی این کار رو هم میگه. روی یه آرشیو چندفایلی بزرگ (حدود ۸ هزار فایل و ۲۴۰ مگابایت) اجرای 7zz زیر Kakehashi حدود ۱۱۸ ثانیه طول کشیده در برابر ۲۲.۵ ثانیهی نسخهی نیتیو لینوکس، یعنی حدود ۵.۲ برابر کندتر. ولی روی نمونههای کمفایل و فشردهسازیمحور این فاصله به ۱.۱ تا ۱.۲ برابر میرسه، چون گلوگاه اصلی مرز syscall و پیمایش مسیرهاست، نه خود الگوریتم.
به گفتهی سازندهها هدف رسیدن به سرعت مک نیست؛ هدف اینه که ابزارهای خطفرمان Darwin روی رانرهای ارزون لینوکس arm64 اجرا بشن. دقیقهی رانر macOS در GitHub Actions حدود ۱۰ تا ۱۲ برابر رانر لینوکس arm64 قیمت داره، پس حتی با ۵ برابر کندتر بودن هم صورتحساب میتونه کمتر دربیاد. در عوض هر کاری که GUI، امضای کد، notarization یا تستهای رابط Xcode بخواد، هنوز رانر واقعی مک میخواد.
نکات کلیدی:
- باینریهای macOS ARM64 رو بدون JIT و بدون شبیهسازی CPU روی لینوکس aarch64 اجرا میکنه
- الان 7zz، curl و پروبهای clang روی Docker/Colima و UTM سبزن
- سربار اصلی مرز syscall ـه: حدود ۵ برابر کندتر روی بار چندفایلی، ۱.۱ تا ۱.۲ برابر روی بار فشردهسازیمحور
- برنامهی بعدی اجرای git از Command Line Tools اپله؛ GUI و codesign هنوز پشتیبانی نمیشن




