· kaynak Hacker News – Front Page (native)
Black Ops II ARM64'e statik olarak yeniden derlendi, Apple Silicon'da 60 fps'ye varan hızda native çalışıyor
Bir hayran projesi, Call of Duty: Black Ops II'nin Steam kopyasını 32-bit x86'dan Remill ve LLVM kullanarak native ARM64 macOS koduna dönüştürüyor; oyun, Wine ya da emülasyon olmadan bir M1 üzerinde baştan sona çalışıyor.
AAA bir Windows oyunu native bir Mac uygulamasına dönüşüyor
adrbn tarafından GitHub'da yayımlanan ve 11 Kasım 2026'da Hacker News'te paylaşılan bo2-mac adlı proje, Call of Duty: Black Ops II'yi 32-bit x86 Windows kodundan, oyun çalıştırılmadan önce native ARM64 macOS makine koduna dönüştürüyor. Oyun daha sonra tek bir süreçte sıradan derlenmiş kod olarak çalışıyor; ne Wine, ne Rosetta çeviri katmanı ne de just-in-time bir emülatör devrede. Bir Apple M1 üzerinde proje, oyunun tamamının — kampanya, Zombies ve botlara karşı çok oyunculu — kabaca 51 ile 60 fps aralığında çalıştığını bildiriyor.
Dönüştürücü ne yapıyor
Projenin README'sine göre araç, oyuncunun kendi Steam kopyasındaki üç Windows çalıştırılabilir dosyasını — kampanya, Zombies ve çok oyunculu binary'leri, toplam yaklaşık 150.000 fonksiyon — okuyor ve x86 makine kodlarını oyun daha başlamadan ARM64'ye yeniden yazıyor. Çıktı, menüleri arasında üç mod arasında geçiş yapan tek bir Mac uygulaması.
Depoda bilinçli olarak hiçbir oyun varlığı ya da çevrilmiş oyun kodu bulunmuyor, README'nin altını çizdiği gibi: her oyuncu kendi satın aldığı kopyasından kendi uygulamasını derliyor. Dönüştürücü yalnızca SHA-256 ile doğrulanan tek bir kesin Steam sürümünü kabul ediyor ve başlatıcı, devam etmeden önce yerel Steam istemcisine, oturum açmış hesabın oyunu sahibi olup olmadığını soruyor. Proje kendisini Activision, Treyarch ya da Microsoft ile hiçbir bağı olmayan gayriresmî bir hayran girişimi olarak tanımlıyor.
İşlem hattı
Dönüştürme beş adımda, tamamen oyuncunun Mac'inde gerçekleşiyor ve bir M1'de yaklaşık bir saat kırk beş dakika sürüyor (yalnızca kampanya yaklaşık kırk beş dakika sürüyor ve biter bitmez oynanabilir oluyor). README'ye göre:
- Ghidra her çalıştırılabilir dosyadaki fonksiyonları katalogluyor.
- Remill v6.0.1 her fonksiyonu LLVM IR'ye yükseltiyor; projede lifter'a beş yama var; bunlara x87 yuvarlama modunun doğru işlenmesi ve x86 semantiğini yeniden yüklemek yerine fonksiyon başına çalışan bir Remill süreçleri çatallanması dahil.
- Özel LLVM geçişleri, clang ile -O2'de derlenmeden önce yükseltilmiş IR'yi yeniden yazıyor: guest bellek erişimleri inline hale getiriliyor, kilit dizileri donanım atomiklerine dönüşüyor, dönüşler yükseltilmiş kodun içinde kalıyor ve x87 stack yerel değişkenlere yükseltiliyor.
- El yazımı bir runtime, oyunun gerçekten çağırdığı Windows importlarını, tam stdcall çağrı kurallarıyla uyguluyor. Direct3D 11, Metal üzerinde sahte bir COM katmanı olarak uygulanıyor; DXBC shader'ları HLSLcc kütüphanesiyle çevriliyor; XAudio2 CoreAudio'ya eşleniyor ve ara sahne videoları libvpx ile çözülüyor.
- Guest thread'ler tek bir host thread üzerinde coroutine olarak başlıyor, bu da çalıştırmaları tekrar oynanabilir kılıyor; daha hızlı bir yapılandırmada sunucu, renderer, ses ve iş thread'leri gerçek host thread'lerine taşınıyor; ARM64, x86'nın güçlü sıralama garantilerine sahip olmadığı için gerçek bellek bariyerleri gerekiyor.
DRM ve geri düşüm yolları
Dikkat çekici biçimde, kopya koruması ayıklanmak yerine çalıştırılıyor. README, donanım istisnalarının arkasına gizlenmiş bütünlük kontrollerinin, tek adımlı tuzakların ve heap'te çözülen kodun, Unicorn üzerine kurulmuş küçük bir x86 yorumlayıcısında çalıştığını, ardından kontrolün yeniden derlenmiş koda geri döndüğünü açıklıyor — hiçbir kontrol sonucu zorlanmıyor. Aynı yorumlayıcı çevirinin atladığı kodu da kapsıyor; böylece boşluklar oyunu çökertmek yerine performansı düşürüyor. Zombies ve çok oyunculunun beklediği Demonware çevrimiçi arka ucunu yerel bir yanıtlayıcı karşılıyor; böylece makineden hiçbir trafik çıkmıyor.
Ölçülmüş sonuçlar ve hata ayıklama notları
Bir M1'de proje, kampanyayı tüm görevler yüklenip bitiş jeneriğine kadar zincirlenerek 51–60 fps'de; Zombies'yi altı haritada tek başına 57–60 fps'de (Die Rise 43–58); botlara karşı çok oyunculuyu on bir oyun modunda, hepsi oyunun gerçek menülerinden erişilerek 53–60 fps'de ölçtü. Oyun içi sunucu saati duvar saatini yaklaşık 1.0× izledi ve disk kullanımı 10 GB'ye yakın zirveye ulaşıp yaklaşık 4 GB'ye yerleşti.
README ayrıca on üç mühendislik bulgusu belgeliyor. Örnekler: lifter'ın x87 yuvarlama modunu yok sayması, Zombies'de yüzüstü görünümü sallıyordu çünkü fistp, görüş yüksekliği ağ codec'inde yanlış yuvarlıyordu; bir CPU özellik sorgusuna "SSE2 yok" yanıtı verilmesi C runtime'ını iki donduran bir x87 kod yoluna soktu; 170–430 ms'lik takılmalar, projenin kendi günlük kaydının neredeyse dolu bir diskte render thread'ini bloklamasına bağlandı.
Neden önemli
Statik yeniden derleme çoğunlukla daha küçük ya da daha eski yapıtlarda gösterilmişti; DRM korumalı, üç çalıştırılabilir dosyalı ve 150.000 fonksiyonlu ticari bir AAA sürümü çok daha zor bir hedef. Bu proje, yükselt-optimize et-yeniden bağla yaklaşımının Wine, Rosetta ya da DXVK ve DXMT gibi runtime çeviri katmanları olmadan tam hızda, tamamen native bir port üretebileceğini gösteriyor. Belgelenmiş bulguları — x87 semantiği, bellek sıralaması, özellik bayrağı algılama — x86 semantiği ARM64'e taşındığında neyin bozulduğunun pratik bir kataloğunu oluşturuyor; bu, tek bir oyunun ötesinde değerli. Yalnızca kendi kopyandan derleme tasarımı da, yeniden derleme projelerinin üzerinde sallanan hukuki soruya düşünülmüş bir yanıt denemesi; ne var ki hak sahiplerinin buna hoşgörüsü henüz sınanmadı.
- #static-recompilation
- #arm64
- #apple-silicon
- #macos
- #llvm
İlgili yazılar
- Geliştirici rehberi, macOS Secure Enclave'de saklanan SSH anahtarlarını anlatıyor
- Apple'ın Harbor adında, kümelenmiş yerel yapay zeka çıkarımı için bir Mac uygulaması geliştirdiği iddia ediliyor
- Microsoft, Sysinternals Process Explorer'ı sürec ağaçları, handle incelemesi ve GPU grafikleriyle birlikte macOS'a taşıdı