نسخههایی از شبیهسازهای Box86 0.2.6 و Box64 0.1.8 منتشر شدهاند که برای اجرای برنامههای لینوکس کامپایلشده برای معماریهای x86 و x86_64 روی تجهیزاتی با پردازندههای ARM، ARM64، PPC64LE و RISC-V طراحی شدهاند. پروژه ها به طور همزمان توسط یک تیم از توسعه دهندگان توسعه می یابند - Box86 به توانایی اجرای برنامه های 32 بیتی x86 محدود می شود و Box64 توانایی اجرای فایل های اجرایی 64 بیتی را فراهم می کند. این پروژه توجه زیادی به سازماندهی راه اندازی برنامه های بازی، از جمله ارائه قابلیت راه اندازی بیلدهای ویندوز از طریق wine و Proton دارد. کد منبع پروژه به زبان C نوشته شده و تحت مجوز MIT (Box86, Box64) توزیع شده است.
یکی از ویژگی های پروژه استفاده از یک مدل اجرای ترکیبی است که در آن شبیه سازی فقط برای کد ماشین خود برنامه و کتابخانه های خاص اعمال می شود. کتابخانه های سیستم معمولی، از جمله libc، libm، GTK، SDL، Vulkan و OpenGL، با گزینه های بومی پلتفرم های هدف جایگزین می شوند. به این ترتیب، فراخوانیهای کتابخانه بدون شبیهسازی اجرا میشوند و در نتیجه عملکرد قابل توجهی به دست میآیند.
شبیه سازی کدهایی که هیچ جایگزینی برای پلتفرم هدف وجود ندارد با استفاده از تکنیک کامپایل مجدد پویا (DynaRec) از یک مجموعه دستورالعمل ماشین به مجموعه دیگر انجام می شود. در مقایسه با تفسیر دستورالعملهای ماشین، کامپایل مجدد پویا 5 تا 10 برابر عملکرد بالاتری را نشان میدهد.
در آزمایشهای عملکرد، شبیهسازهای Box86 و Box64، زمانی که بر روی پلتفرمهای Armhf و Aarch64 اجرا شدند، عملکرد قابلتوجهی نسبت به پروژههای QEMU و FEX-emu داشتند و در آزمایشهای فردی (glmark2، openarena) عملکردی مشابه اجرای یک اسمبلی بومی هدف را به دست آوردند. سکو. در تستهای فشرده محاسباتی 7-zip و dav1d، عملکرد Box64 از 27٪ تا 53٪ از عملکرد برنامه اصلی متغیر بود (برای مقایسه، QEMU 5-16٪ و FEX-emu 13-26٪). علاوه بر این، مقایسه ای با شبیه ساز Rosetta 2 که توسط اپل برای اجرای کد x86 روی سیستم هایی با تراشه M1 ARM استفاده می شود، انجام شد. Rosetta 2 تست مبتنی بر 7zip را با عملکرد 71٪ از ساخت بومی و Box64 - 57٪ ارائه کرد.
در مورد سازگاری با برنامه ها، از 165 بازی تست شده، حدود 70٪ با موفقیت کار کردند. حدود 10 درصد دیگر کار می کند، اما با رزرو و محدودیت های خاص. بازی های پشتیبانی شده عبارتند از WorldOfGoo، Airline Tycoon Deluxe، FTL، Undertale، A Risk of Rain، Cook Serve Delicious و اکثر بازی های GameMaker. از جمله بازی هایی که مشکلاتی با آنها ذکر شده است به بازی های مبتنی بر موتور Unity3D اشاره شده است که به بسته Mono گره خورده است که شبیه سازی آن به دلیل کامپایل JIT به کار رفته در Mono همیشه کار نمی کند و همچنین دارای انصافا می باشد. نیازهای گرافیکی بالا که همیشه در بردهای ARM قابل دستیابی نیستند. جایگزینی کتابخانه های برنامه GTK در حال حاضر به GTK2 محدود شده است (جایگزینی GTK3/4 به طور کامل اجرا نشده است).
تغییرات اصلی در نسخه های جدید:
- صحافی برای کتابخانه Vulkan اضافه شد. پشتیبانی از API گرافیکی Vulkan و DXVK (اجرای DXGI، Direct3D 9، 10 و 11 در بالای Vulkan) اضافه شده است.
- پیوندهای بهبود یافته برای کتابخانه های GTK. اتصالات برای gstreamer و کتابخانههایی که معمولاً در برنامههای GTK استفاده میشوند اضافه شده است.
- پشتیبانی اولیه (فعلا فقط حالت تفسیر) برای معماری های RISC-V و PPC64LE اضافه شده است.
- اصلاحاتی برای بهبود پشتیبانی از SteamPlay و لایه پروتون ایجاد شده است. امکان اجرای بسیاری از بازی های لینوکس و ویندوز از Steam بر روی بردهای AArch64 مانند Raspberry Pi 3 و 4 را فراهم می کند.
- بهبود مدیریت حافظه، عملکرد mmap و ردیابی نقض حفاظت از حافظه.
- پشتیبانی بهبود یافته برای فراخوانی سیستم کلون در libc. پشتیبانی از تماس های سیستمی جدید اضافه شده است.
- موتور کامپایل مجدد پویا کار با رجیسترهای SSE/x87 را بهبود بخشیده است، پشتیبانی از کدهای ماشین جدید را اضافه کرده، تبدیل اعداد شناور و دوگانه را بهینه کرده است، پردازش انتقالهای داخلی را بهبود میبخشد، و افزودن پشتیبانی برای معماریهای جدید را ساده کرده است.
- لودر فایل ELF بهبود یافته است.
منبع: opennet.ru