Linux’ta oyun oynamak bundan birkaç sene önce çok mümkün değildi. Ancak son yıllarda işletim sistemi üzerindeki oyun deneyimi oldukça önemli değişimler geçirdi. Bu alandaki en iyi örnek ise Valve’ın 2018 yılında Proton’u kullanıma sunması olabilir. Daha öncelerinde Linux üzerinde oyun oynama deneyimi birkaç uğraş gerektiriyordu ve bu gösterilen çaba karşısında pek verimli durmuyordu. Ancak Proton’un piyasaya sürülmesiyle birlikte bu deneyim çok daha erişilebilir ve nitekim problemsiz hâle geldi.
Wine, 1993 yılında piyasaya sürülmesinden bu yana adım adım ilerleyerek pek çok konuda gelişme kaydetti. Wine’ın 9 ve 10. sürümleri genellikle hata düzeltmeleri ve performans iyileştirmeleriyle ekosistemin önemli ölçüde gelişmesine ve büyümesine katkı sağladı.
Wine 11 Neden Farklı? NTSYNC ile Gelen Köklü Değişim
Kısa süre önce piyasaya sürülen Wine 11 ise önceki sürümlerinden biraz daha farklı. 11. sürüm küçük hata düzeltmeleri ve uyumluluk iyileştirmelerinin yanı sıra, yıllardır geliştirilen NTSYNC desteğiyle birlikte modern oyunlarda performans açısından kritik öneme sahip bazı işlemlerin ele alınış biçimini köklü şekilde değiştiriyor.

Tüm bunların yanı sıra WoW64 mimarisindeki kapsamlı yenilemelerin tamamlanması, Wayland sürücüsünün önemli ölçüde olgunlaşması ve çok sayıda küçük ama etkili iyileştirmenin bir araya gelmesi, Wine 11’i adeta yeni bir proje seviyesine taşıyor.
Ancak şunu söylemek gerekir ki her oyunda bu değişimlerin önemli bir fark yaratacağını söylemek doğru olmaz. Bazı oyunların önceki sürümlerde olduğu gibi benzer performansla çalışmaya devam edeceğini söyleyebiliriz. Fakat Wine’ın yeni sürümlerinin getirdiği yeniliklerden kapsamlı şekilde faydalanabilen oyunların performans artışının oldukça yüksek olduğunu belirtelim. Üstelik Proton, SteamOS ve Wine tabanlı diğer tüm projeler bu altyapı üzerine inşa edildiğinden dolayı, elde edilen bu kazanımlar doğrudan tüm ekosisteme de yayılıyor.
ESYNC ve FSYNC Nedir?
Eğer daha önce Wine veya Proton kullandıysanız ESYNC veya FSYNC terimlerine aşina olabilirsiniz. Uygulamaların başlatma ayarlarında görmüş olabileceğiniz bu ayarların ne olduklarını biliyor olabilirsiniz. Peki bilmeyenler için bunlar ne anlama geliyor? ESYNC, bir bakıma sadece programdaki uygulamaların daha düzgün çalışabilmesine yarana ve senkronizasyon artıran bir ayar. FSYNC ise daha çok dosya tanımlayıcısına ait önbellekteki verilerin fiziksel depolama diskine yazılmasını sağlayan bir ayar. Yeni sürümle birlikte gelen NTSYNC’in asıl önemini anlayabilmek için ise problemleri nasıl çözdüğüne kısaca bakmak gerek.
Modern Windows oyunları özellikle yoğun şekilde “multi-thread” dediğimiz çoklu iş parçacığını kullanırlar. Yani işlemciniz tek bir işi sırayla yürütmek yerine; render işlemleri, fizik hesaplamaları, varlık (asset) yükleme, ses işleme ve yapay zekâ gibi birçok görevi aynı anda, paralel şekilde gerçekleştirir. Bu çoklu iş parçacıklarının ise sürekli olarak birbirleriyle koordinasyon içerisinde çalışmaları gerekir. Örneğin bir iş parçacığı, bir kareyi oluşturabilmek için diğerinin bir dokuyu yüklemesini beklemek zorunda kalabilir. Başka bir iş parçacığı da paylaşılan bir kaynağa özel erişim isteyerek iki farklı işlemin aynı anda bu kaynağı değiştirmesini engellemek isteyebilir.
Windows, bu tür koordinasyonu “NT Synchronization Primitives” yani “NT Senkronizasyon İlkel Yapı Taşı olarak adlandırılan mekanizmalar aracılığıyla sağlıyor. Bu mekanizmalar Windows çekirdeğinin derinliklerine gömülü bir şekilde çalışıyor ve oyunlar tarafından yoğun şekilde kullanılıyor. Linux’taki problem de tam olarak bu arada ortaya çıkıyor. Şöyle ki Linux bu davranışları birebir karşılayan yerel eş değerler sunamıyor. Wine ise bu noktada Windows’un bu senkronizasyon yöntemlerini taklit etmek istiyor ancak pek işe yarar sonuçlar elde edemiyor.
Yöntemlere bakılacak olursa ilk yaklaşımda bir oyunun iş parçacıkları arasında senkronizasyon kurması gerektiğinde, her seferinde “wineserver” adı verilen özel bir “çekirdek” sürecine gidiş-dönüş (RPC) çağrısı yapılması gerekiyor. Saniyede binlerce kez gerçekleşebilen bu çağrılar, ciddi bir ek yük oluşturuyor ve zamanla önemli bir darboğaza dönüşüyordu. Bu darboğaz ise kendini küçük takılmalar, tutarsız kare süreleri ve her ne kadar FPS değerleri iyi görünse de genel deneyimin tam anlamıyla akıcı hissettirmemesi şeklinde gösteriyordu.
Bu soruna yönelik ilk çözüm girişimi ESYNC oldu. Elizabeth Figura tarafından CodeWeavers bünyesinde geliştirilen ESYNC, Linux’un eventfd sistem çağrısını kullanarak senkronizasyon işlemlerini wineserver üzerinden geçirmek zorunda kalmadan gerçekleştirmeyi amaçlıyordu. Bu yaklaşım nitekim işe yarıyordu ve performansı bir miktar iyileştirdi fakat bazı sınırlamaları da beraberinde getirdi. Özellikle her senkronizasyon nesnesi için ayrı bir dosya tanımlayıcısı gerektirmesi, bazı dağıtımlarda sınır değerlerin hızla aşılmasına yol açabiliyordu.
Ardından yeni geliştirilen FSYNC ise daha yüksek performans için Linux’un Futex mekanizmasını kullandı. Kısaca açıklamak gerekirse Linux’un temel çekirdek ögelerinden biri olan Futex, kullanıcı işlemleriyle çekirdek tarafındaki işlemleri birleştirerek verimli bir senkronizasyon sağlamaya yarıyor. FSYNC’in kullandığı bu Futex mekanizması çoğu durumda ESYNC’den daha hızlı sonuç veriyordu. Ancak ana Linux çekirdeğine veya Wine’ın varsayılan sürümlerine dahil edilmeyen ek çekirdek yamaları gerektiriyordu. Bu da FSYCN’in kullanımını, özel veya modifiye edilmiş çekirdekler kullanan ileri seviye kullanıcılarla sınırlı hale getirdi. Örneğin CachyOS ya da Proton-GE kullananlar için bu mümkün olsa da, Ubuntu veya Fedora gibi yaygın dağıtımları tercih eden ortalama kullanıcılar için pek erişilebilir bir durum değil.
Hem ESYNC hem de FSYNC için en önemli durum ise bunların birer geçici çözüm olması. Oldukça akıllıca geliştirilmiş olsalar da, temelde Linux’un bu iş için tasarlanmamış mekanizmalarıyla NT senkronizasyon davranışını taklit etmeye çalışıyorlardı. Bu nedenle bazı senaryoların doğru şekilde ele alınması mümkün olmuyor.

İşte tam bu noktada NTSYNC devreye giriyor. Önceki yaklaşımların aksine NTSYNC, NT senkronizasyon mekanizmalarını kullanıcı alanında taklit etmeye çalışmak yerine bu davranışı doğrudan Linux çekirdeğine taşıyan yeni bir yaklaşım sunuyor. Başka bir deyişle Wine, artık Windows’un senkronizasyon modelini dolaylı yöntemlerle “taklit etmek” yerine çekirdek seviyesinde çok daha doğru ve verimli bir şekilde uygulayabiliyor. Bu sayede wineserver üzerinden yapılan geçişler ortadan kaldırılırken, aynı zamanda NT davranışına çok daha yakın bir senkronizasyon modeli elde ediliyor.
Bu değişimin en önemli sonucu ise tabii ki performans tarafında ortaya çıkıyor. Senkronizasyon işlemleri modern oyunlarda en hassas ve yoğun kullanılan alanlardan biri olduğu için, buradaki iyileştirmeler doğrudan oyun performansına yansıyor. Daha düşük gecikme, daha tutarlı kare süreleri ve özellikle CPU sınırlı senaryolarda belirgin FPS artışları sağlanabiliyor. Önceki çözümlerde görülen mikro takılmaların da önemli ölçüde azaldığı söylenebilir.
NTSYNC, performansı artırmasının yanı sıra aynı zamanda doğruluğu da iyileştiriyor. NT senkronizasyon davranışının çekirdek seviyesinde uygulanması sayesinde, daha önce esync veya fsync ile doğru şekilde ele alınamayan bazı uç durumlar artık sorunsuz biçimde çalışabiliyor. Bu da yalnızca daha hızlı değil, aynı zamanda daha stabil ve öngörülebilir bir oyun deneyimi anlamına geliyor.
Oyun Testleri ve FPS Kazançları
Gelin biraz da bu sistemin kullanıcılara sunduğu performans artışlarına bir bakalım. Ortaya çıkan performans sonuçları biraz şaşırtıcı durumda. Geliştirici testlerine göre Dirt 3’ün performansı 110.6 FPS’ten 860.7 FPS’e çıkarak yaklaşık %678 oranında artış gösteriyor. Resident Evil 2, 26 FPS’ten 77 FPS’e, Call of Juarez 99.8 FPS’ten 224.1 FPS’e, Tiny Tina’s Wonderlands ise 130 FPS’ten 360 FPS’e ulaşıyor. Hatta Call of Duty: Black Ops I, artık Linux üzerinde oynanabilir hale gelmiş durumda. Bu testlerin, NTSYNC destekli Wine ile herhangi bir ESYNC veya FSYNC içermeyen standart Wine sürümü arasında yapıldığını belirtmek gerekiyor. Dolayısıyla FSYCN kullanan oyuncuların çoğu oyunda bu kadar yüksek bir artış görmesi mümkün değil.
NTSYNC’ten en fazla fayda sağlayan oyunlar ise daha önce zorlanan, özellikle yoğun çoklu iş parçacığı kullanan ve senkronizasyon yükünün ciddi bir darboğaz oluşturduğu oyunlar oluyor. Bu tür oyunlarda fark gerçekten ciddi derecelerde belirgin. Üstelik FSYNC’in aksine NTSYNC, doğrudan Linux ana çekirdeğine dahil edilmiş durumda. Bu da ek yamalar veya özel çekirdek kurulumları gerektirmeden kullanılabileceği anlamına geliyor. Kernel 6.14 ve üzeri sürümleri kullanan dağıtımlar NTSYNC desteğini doğal olarak sunuyor. Valve da bu gelişmeyi hızlıca benimseyerek NTSYNC çekirdek sürücüsünü SteamOS 3.7.20 beta sürümüne entegre etti ve varsayılan olarak etkin hale getirdi. Ayrıca Proton-GE gibi topluluk odaklı Proton sürümlerinde de bu destek halihazırda aktif durumda. Valve’ın resmi Proton sürümü Wine 11 tabanına geçtiğinde ise tüm Steam Deck kullanıcıları bu avantajdan doğrudan faydalanabilecek.
Tüm bu gelişmeler, NTSYNC’i sıradan bir performans güncellemesinin çok ötesine taşıyor. Bu, yalnızca birkaç optimizasyondan ibaret bir iyileştirme değil; Wine’ın senkronizasyon mekanizmasının ilk kez çekirdek seviyesinde doğru şekilde uygulanması anlamına geliyor. Bu geliştirme, Linux ana çekirdeğine entegre edilmiş durumda ve herhangi bir ek uğraş gerektirmeden herkes için erişilebilir hale gelmiş bulunuyor.
64-bit Geliştirmesi Tamamlandı
Wine’ın en büyük yeniliklerinden birisi de şüphesiz 32-bit uygulamaların 64-bit sistemlerde bile sorunsuz çalışabiliyor olması. Bilindiği üzere WoW64, 32-bit uygulamaların 64-bit sistemlerde çalışmasını sağlayan bir alt sistem. Wine ise bu sistemin Linux üzerindeki karşılığı konusunda uzun süredir çalışıyordu ve son çıkan sürümle beraber artık bu mümkün hale geldi.
Kullanıcıların artık 64-bit Linux sistemlerinde 32-bit Windows uygulamalarını çalıştırmak için ayrı 32-bit sistem kütüphaneleri kurmalarına gerek yok. Wine, bu dönüşümü kendi içinde yönetiyor ve tek bir birleşik binary üzerinden çalışarak karşısındaki uygulamanın 32-bit mi yoksa 64-bit mi olduğunu otomatik olarak tespit ediyor. Böylece multilib paketleri kurma, ia32-libs yapılandırma ya da 64-bit bir dağıtımda 32-bit bağımlılıklarla uğraşma dönemi sona eriyor.
Bu değişiklik birçok kullanıcı için küçük görülebilir ancak arkasında büyük bir mühendislik söz konusu. Yeni WoW64 modunun artık OpenGL bellek eşlemelerini, SCSI pass-through işlemlerini ve hatta 16-bit uygulama desteğini dahi kapsadığı göz önünde bulundurulduğunda bu değişimin aslında ne kadar büyük olduğu gözlemlenebilir.
Eski oyunların halen 32-bit olduğunu düşünürsek bu yenilik oyunculuk konusunda da büyük bir gelişme. Zira daha öncelerinde bu tür oyunları çalıştırmak, kullanılan dağıtıma bağlı olarak değişen multilib yapılandırmalarıyla uğraşmayı gerektirebiliyordu. Ubuntu, Arch Linux ya da Fedora gibi sistemlerde bu süreç hem karmaşık hem de tutarsız olabiliyordu. Wine 11 ile birlikte tüm bu süreç artık kullanıcı adına otomatik olarak yönetiliyor ve deneyimi ciddi ölçüde sadeleştiriyor.
Wine 11, oldukça büyük bir sürüm ve bunu özel kılan tek şey NTSYNC değil. NTSYNC tek başına bile dikkate değer bir geliştirme fakat WoW64 mimarisinin tamamlanması, Wayland tarafındaki önemli iyileştirmeler ve çok sayıda hata düzeltmesiyle birlikte bu sürüm, Proton’un Linux’ta oyun deneyimini erişilebilir hale getirdiği dönemden bu yana en önemli Wine güncellemelerinden biri. Hatta belki en önemlisi bile denebilir. Wine üzerine inşa edilen Proton, Lutris ve Bottles gibi tüm platformlar bu gelişmelerden doğrudan faydalanıyor. Eğer Linux üzerinde oyun oynuyorsanız, Wine 11’i denemek kesinlikle zaman ayırmaya değer.
Tüm bu teknik gelişmeleri bir arada değerlendirdiğimizde, Wine 11’in yalnızca belirli bir sorunu çözmekle kalmadığı; aynı zamanda Linux üzerinde Windows uygulamaları ve oyunlarının çalıştırılma biçimini daha temelden yeniden şekillendirdiği görülüyor. Performans, uyumluluk ve kullanım kolaylığı gibi farklı alanlarda yapılan bu iyileştirmeler, uzun süredir parça parça ilerleyen gelişimin artık daha bütüncül bir noktaya ulaştığını gösteriyor. Bu da Linux’taki oyunculuk ekosisteminin, yalnızca alternatif bir çözüm olmaktan çıkıp daha geniş kitleler için gerçek bir ana platform haline gelme yolunda önemli bir adım attığını ortaya koyuyor.
Sizler Linux’taki oyun deneyimi ve Wine 11’in getirdiği tüm yenilikler hakkında ne düşünüyorsunuz veya daha önce Linux üzerinden oyun oynamış mıydınız bunları bizlere iletebilirsiniz.