Metin2 ile tanışmamın üzerinden neredeyse 10 yıl geçmiş. Dile kolay, 10 yıl. O zamanlar hâlâ Club Penguin oynuyordum, hatta Metin2’yi ilk kez Club Penguin sayfasındaki bir reklamdan görmüştüm. Şimdi geriye dönüp bakınca iş biraz daha garip geliyor, çünkü ben oyuna başladığımda Metin2 zaten 6 yaşındaydı. Yani bugün konuştuğumuz şey, neredeyse 16 yıllık bir yazılımın hâlâ ayakta tutulmaya çalışılması.
Bir düşününce insan ister istemez şunu soruyor: Bugün kaç tane 16 yıllık yazılımı hâlâ aktif kullanıyoruz? Kullansak bile ne kadar rahat kullanıyoruz? Ben mesela zamanında Borland C++ 4.52’yi DOSBox üzerinde düzgün çalıştırmak için uğraşmıştım, o bile başlı başına dertti. Metin2 tarafında ise mesele sadece eski bir oyun istemcisinden ibaret değil. Sunucu tarafı da aynı şekilde çok eski bir mimarinin üstüne kurulmuş durumda.

2004 yılında bugünkü gibi çok çekirdekli işlemciler yaygın değildi. Multi-threading dediğimiz şey bugünkü kadar normal bir konu değildi. O dönemlerde ya anakarta fiziksel olarak birden fazla CPU takıyordun ya da yükü farklı makineler arasında dağıtıyordun. YMIR’in Metin2 için yaptığı şey de aslında buydu. Başta her core’un ayrı bir sunucuda çalışması planlanmıştı. Bir tanesi database cache için, bir tanesi authentication için, birkaç tanesi de map’ler için. Tabii o dönemlerde bugünkü gibi 5 dolarlık DigitalOcean sunucuları, AWS container’ları falan yoktu. Sunucu işi pahalıydı.
Bugün Metin2 server core’larında hâlâ peer-to-peer TCP/IP ayarlarıyla uğraşmamızın sebebi de bu eski mimari zaten. Sistem o dönemin şartlarına göre mantıklı olabilir ama bugünün gözünden bakınca ciddi anlamda yaşlanmış durumda. Hatta biraz sert olacak ama Metin2’nin sunucu mimarisi kötü yaşlandı. Bazı parçalar zaman içinde güncellenmiş olabilir, buna haksızlık etmeyelim. Ama libthecore gibi temel bölümlerin ilk hâlinden çok da farklı olduğuna inanmıyorum. Yine de bu kodun bugün yarı düzgün şekilde çalışabiliyor olması bile bir noktada ilginç. Burada C++’a da hakkını vermek lazım. JavaScript’in rüzgâr yön değiştirse geriye dönük uyumluluğu bozduğu bir dünyada bu eski C++ kodunun hâlâ ayakta kalması garip şekilde etkileyici.

Ama sorun sadece mimarinin eski olması değil. Kodun kendisi de başlı başına problem. Böyle eski ve büyük bir sistemi yazmanın kolay olduğunu söylemiyorum, sonuçta oyun sunucusu dediğin şey basit bir script değil. Ama Metin2 server dosyalarına dikkatli bakınca YMIR geliştiricilerinin zamanla nasıl geliştiğini görebiliyorsun. Bu aslında normal, herkes yazarak öğreniyor. Kötü olan taraf şu: Onların öğrenme sürecindeki hatalar kodun içinde kalmış. Bazı basit hatalar yıllarca temizlenmemiş ya da çok geç düzeltilmiş. Eski oyuncular /dice bug gibi şeyleri hatırlar zaten.
Bir de işin BSD tarafı var. O dönem mimari seçilirken Linux bugünkü kadar standart değildi. Hatta birçok kişi için Linux daha çok oyuncak gibi görülen, meraklıların uğraştığı bir sistemdi. Bugün bazı insanların Docker veya Kubernetes’e baktığı gibi düşünebilirsiniz. Tabii Linux üretim ortamlarında kullanılabiliyordu ama o dönem bunu yapmak biraz cesaret işiydi. Bazı şirketler potansiyelini erken görüp kullandı ama genel kabul gören, savaşta test edilmiş taraf daha çok UNIX sertifikalı BSD dünyasıydı.
FreeBSD bugün kötü mü? Hayır, kesinlikle değil. Ama Linux için geliştirme yapmak artık çok daha kolay. Sektörün fiili standardı hâline geldi. Araçlar, dokümantasyon, topluluk, paketler, entegrasyonlar… Hepsi Linux tarafında daha rahat ilerliyor. Metin2 ise eski kararların yükünü hâlâ sırtında taşıyor.

Sonuç olarak elimizde eski, yarım yamalak modernize edilmiş ve bugünkü standartların bayağı dışında kalmış bir sunucu yapısı var. Harika.
Benim için Metin2 server üzerinde çalışmak artık şöyle bir ilişkiye döndü: Partnerinden çok hoşlanmıyorsun, sürekli kavga ediyorsun, ama yılların alışkanlığı ve bağlılığı yüzünden yine de ayrılamıyorsun. Kötü bir durum ama insan bırakamıyor. Foruma bakınca da aynı şeyi görüyorsun. Her yer hotfix dolu. Gerçek bir özellik yayınlandığında ise tonla dosyada find-replace yapıyorsun, sonra da hangi sistemin bozulduğunu kestirmeye çalışıyorsun. Bu işin böyle gitmemesi lazım.
Mesela neden düzgün bir plugin sistemi yok? Neden her yeni sistem eklediğimizde doğrudan core’un içine dalmak zorundayız? Neden bir özellik başka bir özelliği kırma potansiyeliyle geliyor? Bu kadar eski bir yapıda çalışmanın en yorucu kısmı bu. Bir şey eklemekten çok, bir şeyleri bozmamaya çalışıyorsun.

Metin2 server’ının Linux’a port edilmesi konusu bu toplulukta defalarca konuşuldu. Ama çoğu zaman bu işler yer altında yürümek zorunda kaldı. Çünkü kodu açık paylaşmak, Gameforge kapına dayanacak korkusunu beraberinde getiriyor. Bu konuya çok girmek istemiyorum, sonuçta bazı hukuki haklar ve sınırlar var. Ama yakın zamanda başka bir örnek aklımı açtı diyebilirim.
Bir arkadaşım Lineage 2 sunucusu hostlama konusunda yardım istemişti. Oyunu çok iyi bildiğimi söyleyemem ama araştırırken şunu gördüm: Lineage 2 tarafında iki büyük sunucu yazılımı sınıfı var. Biri OFF, yani NCSOFT’un orijinal sunucu dosyaları. Diğeri ise L2J, Java ile yazılmış bir emülatör. Ve işin ilginç yanı, insanlar orijinal server dosyalarını çalıştırdıkları için dava yemiş ama Java sürümünü kullananlar aynı ölçüde hedef olmamış. Üstelik L2J’nin farklı fork’ları GitHub ve Bitbucket üzerinde açık şekilde bulunabiliyor.
Sanırım varmak istediğim yer belli. Madem çoğumuz hâlâ bu oyuna bir şekilde bağlıyız, neden bir araya gelip Metin2 sunucusunu daha mantıklı, geleceğe dönük ve sürdürülebilir bir şekilde yeniden yazmayı düşünmüyoruz?
Bu, orijinal dosyalara bağımlılığı azaltabilir. Hukuki riskleri tamamen sıfırlar demiyorum, öyle bir iddia komik olur. Ama en azından orijinal dosyaları kullanmakla aynı şey olmaz. Üstelik elimizde kaynak kod zaten var. Reverse engineering yapmak zorunda değiliz. Bu çok büyük bir avantaj. Resmî Metin2 bir gün bitecek, belki birkaç yıl içinde, belki daha uzun sürede. Ama Gameforge bitmeyecek. O yüzden oyunun geleceği bir noktada topluluğun elinde olacaksa, bunun açık kaynak ve düzgün mimariyle yapılması daha mantıklı.

Eğer böyle bir işe girilecekse, hedef bugünü kurtarmak olmamalı. Geleceği düşünmek lazım. Güncel sistem mimarileri hesaba katılmalı. Bir sunucu çökerse sistemin tamamen dağılmaması için redundancy düşünülmeli. Modülerlik olmalı. Plugin sistemi olmalı. Test edilebilir bir yapı olmalı. Geliştirici yeni bir özellik eklerken core dosyalarının her köşesinde mayın aramak zorunda kalmamalı.
C++ güçlü bir dil, buna kimse bir şey diyemez. Ama güçlü olduğu kadar tehlikeli de. Hata yapmak çok kolay. Bir library eklemek bile bazen ayrı işkenceye dönüşüyor. Bir açıdan iyi tabii, çünkü JavaScript tarafında iki sayı toplamak için bile paket ekleyen insanları görünce insan C++ disiplinini özlüyor. Ama yine de bu iş için daha uygun araçlar düşünülebilir.
Mesela Rust bu konuda iyi bir aday olabilir. Makine koduna derleniyor, modern bir dil, bellek güvenliği tarafında ciddi avantajları var, network stack desteği var, JSON ve XML dosyalarını rahat okuyabiliyor, ekosistemi büyüyor. Ben Rust ile büyük bir şey yazmadım ama sonuçta syntax öğrenilir. Gerçek programlama syntax ezberlemek değil, problem çözmektir. Dil sadece araç.
Tabii burada “kesin Rust olmalı” gibi bir iddia da yok. Başka diller, başka mimariler, farklı yaklaşımlar konuşulabilir. Önemli olan Metin2’nin artık bu eski, kırılgan ve sürekli yamayla ayakta tutulan yapıdan çıkarılması. Çünkü şu an yapılan şey biraz enkazın üstüne kat çıkmak gibi. Çalışıyor, evet. Ama her yeni katta daha çok sallanıyor.

Belki de saçmalıyorumdur. Belki Metin2 gerçekten ömrünü tamamlamalı ve olduğu yerde bırakılmalı. Ama topluluğa bakınca hâlâ emek veren, hâlâ yeni sistemler geliştiren, hâlâ paylaşım yapan insanlar var. Vanilla, Shogun, MartySama, Sanchez ve adını şu an hatırlayamadığım daha birçok kişi bu topluluğa ciddi katkılar verdi. Böyle insanlar varken “bu iş olmaz” demek biraz erken geliyor.
Bu devasa bir iş olur, orası kesin. Ama imkânsız değil. Herkes bir yerinden tutarsa, iyi planlanırsa, mimari doğru kurulursa yapılabilir. Belki C++ devam eder, belki Rust olur, belki Go olur, belki başka bir şey. Hatta biri çıkıp “bunu MIPS Assembly ile yazalım, PS2 üzerinde çalıştıralım” dese ve mantıklı argüman getirirse onu bile dinlemek lazım.
Siz de kendi Metin2 sunucunuzu kurmak mı istiyorsunuz?
Metin2 server dosyaları, sistem geliştirmeleri, teknik destek, kaynak paylaşımları ve özel sunucu dünyasına dair içerikler için MMOoyun’un geliştirici tarafına göz atabilirsiniz.
dev.mmooyun.com’u Ziyaret EtMetin2’nin hâlâ seveni var. Sorun da zaten bu. Sevmesek uğraşmayız. Ama sevdiğimiz şeyin sürekli aynı eski hatalarla, aynı yama kültürüyle, aynı kırılgan sistemle devam etmesi de bir yere kadar. Belki de artık asıl soru şu değil: “Metin2 server’ı düzeltilir mi?” Asıl soru, “Baştan daha düzgün yazmaya değer mi?”
Paylaş :








