Bir programcının en eski dualarından biri şudur: Burada çalıştıysa orada da çalışsın. Kulağa teknik bir istek gibi gelir; oysa içinde küçük bir uygarlık tasarımı saklıdır. Kodun taşınabilirliği, yalnızca bir uygulamanın Windows’tan Linux’a, telefondan buluta, yerel makineden uzak sunucuya nazlanmadan geçmesi değildir. Daha derinde, bir fikrin coğrafyadan, donanımdan, işletim sisteminden ve hatta bazen kültürden bağımsız biçimde var olabilmesi arzusudur.
Bu yüzden portability, yazılım dünyasının küreselleşme felsefesidir. Nasıl ki bir para birimi, bir dil ya da bir ölçü standardı sınırları aşmayı kolaylaştırıyorsa; taşınabilir kod da fikrin gümrükte takılmadan dolaşmasını sağlar. Fakat burada romantizme fazla kapılmayalım: Her yerde çalışan kod, kendiliğinden ortaya çıkan büyülü bir varlık değildir. O, disiplinli soyutlama, dikkatli bağımlılık yönetimi, standartlara saygı ve çevresel farklara karşı paranoyak bir uyanıklık ister.
Makineden Bağımsız Düşünmek
Taşınabilirlik önce zihinde başlar. Kötü programcı yalnızca kendi bilgisayarını evren sanır. İyi programcı ise evrenin klavye düzeninden dosya yoluna, saat diliminden karakter kodlamasına kadar tuzaklarla dolu olduğunu bilir. Bir yerde eğik çizgiyle çalışan dosya yolu, başka yerde ters eğik çizgi ister. Bir sistemde küçük harf-büyük harf farkı önemsizdir, diğerinde kader belirler. Bir ülkede virgül ondalık ayırıcıdır, başka bir yerde nokta. Kod, bu farklılıkları yok saydığında yerel bir lehçeye dönüşür; onları hesaba kattığında ise ortak dile yaklaşır.
Bu ortak dilin en önemli araçları standartlardır. POSIX, Unicode, HTTP, SQL, ECMAScript gibi isimler ilk bakışta sıkıcı teknik tabelalar gibi görünür. Fakat aslında bunlar yazılım medeniyetinin demiryollarıdır. Ray açıklığı herkes için aynıysa trenler kıta boyunca ilerler. Protokoller, dosya biçimleri ve dil standartları da böyledir: Fikirlerin başka makinelerde yeniden doğmasını sağlar.
Taşınabilirlik Bedava Değildir
Elbette her soyutlama bir bedel ister. Taşınabilir kod yazmak çoğu zaman daha fazla planlama, daha fazla test, daha az kestirme yol demektir. Sisteme özel bir özelliği kullanmak hızlıdır; fakat sizi o sisteme zincirler. Taşınabilir bir çözüm ise bazen daha yavaş, daha genel, daha zahmetli olabilir. Burada stratejik soru şudur: Hızlıca yerel bir zafer mi istiyoruz, yoksa uzun vadeli küresel hareket kabiliyeti mi?
Bu sorunun cevabı bağlama göre değişir. Gömülü sistemlerde donanıma yakın optimizasyon hayatidir. Bir oyun motorunda grafik kartının özel yeteneklerinden yararlanmak performans getirir. Fakat bir iş uygulaması, bir kütüphane, bir eğitim aracı ya da açık kaynak projesi geliştiriyorsanız, taşınabilirlik sizi çoğaltır. Kodunuz tek bir makinede çalışan bir not olmaktan çıkar, dünyanın farklı köşelerinde yorumlanan bir besteye dönüşür.
Küreselleşmenin Yazılımcı Versiyonu
Küreselleşme çoğu zaman malların, sermayenin ve kültürün dolaşımı olarak anlatılır. Yazılımda ise dolaşan şey daha soyuttur: yöntem, algoritma, arayüz, deneyim. Bir geliştirici İstanbul’da bir paket yazar, Tokyo’da biri onu projeye ekler, Berlin’de başka biri hata bildirir, Nairobi’de biri çatallayıp geliştirir. Kod taşınabilir değilse bu ağ kırılır. Çalıştırma talimatları büyü kitabına, kurulum süreci çile ritüeline dönüşür.
Docker, sanal makineler, konteynerler ve bulut platformları bu soruna modern cevaplar sunar. İlginçtir: Eskiden kodu ortama uydurmaya çalışırdık; şimdi çoğu zaman ortamı kodla birlikte paketliyoruz. Yani taşınabilirlik yalnızca kodun hafiflemesiyle değil, dünyanın küçük bir kopyasını yanımıza almamızla da sağlanıyor. Bu, dijital çağın valiz felsefesidir: Sadece fikir değil, fikrin yaşadığı iklim de taşınır.
Fakat en büyük risk şudur: Taşınabilirliği yalnızca teknik uyumluluk sanmak. Bir yazılım her cihazda açılabilir ama her insan için anlaşılır olmayabilir. Dil desteği, erişilebilirlik, yerelleştirme, kültürel varsayımlar ve etik tasarım da taşınabilirliğin geniş halkalarıdır. Gerçekten küresel bir kod, yalnızca işlemciler arasında değil, insanlar arasında da çalışır.
Sonuçta taşınabilirlik, programcının egosuna atılmış zarif bir tokattır. Dünya senin bilgisayarından ibaret değildir. Kodunu, başka makinelerin, başka alışkanlıkların, başka saat dilimlerinin ve başka hayatların içinden geçecek bir yolcu gibi tasarla. Çünkü iyi yazılım, doğduğu yere sadık kalırken oraya mahkum olmayan yazılımdır. Bir ortamda yazılan fikrin her yerde çalışması, sadece mühendislik başarısı değil; dijital çağın en pratik özgürlük tanımlarından biridir.