2038'e hazır mısınız?

Imagem de capa

Bugün biraz gelecekten bahsedelim. 2038 yılı, Unix’in integer tipindeki (epoch ya da timestamp olarak da bilinen) zaman formatını kullanan tüm bilgisayar sistemlerini ilgilendiren bir yıl. Öyle ki bu yıla kadar, donanımsal veya yazılımsal güncelleme yapılmayan çok sayıda sistem ya kullanılamaz hale gelecek ya da bir şeyleri yanlış çalışacak.

Peki nedir 2038 yılı problemi? 32-bit bilgisayar sistemlerinde ortaya çıkacak bu sorun, Unix zaman formatını kullanan tüm bilgisayar sistemlerini etkileyecek. Unix zamanını kısaca özetlemek gerekirse, 1 Ocak 1970’den itibaren bir numerik sayacın her saniye arttırılmasıyla çalışmaktadır. Unix zamanı 0 ise zaman 1 Ocak 1970, 00:00:00‘ı gösterecektir. Bunu 20‘ye çıkartırsak bu sefer saatler 00:00:20‘yi, 124‘e çıkartırsak 00:02:04‘ü gösterecektir. 32-bit’lik bilgisayar sistemlerinde Unix zamanı integer veri türünde tutulduğu zaman, bir integer’ın alabileceği maksimum değer 2147483647 olacaktır. İşte sorun burada ortaya çıkıyor. Unix zamanı 2147483647 olduğunda tarih 19 Ocak 2038, 03:14:07‘yi gösterecektir. Peki bundan bir saniye sonra ne olacak? Integer’in alabileceği maksimum değer aşıldıktan sonra sayı eksiye döner. Yani bu da UNIX zamanını -2147483648 değerine çevirir. Bu da 13 Aralık 1901, 03:14:07 tarihine eşittir.

Peki neden integer’a gelebilecek maksimum değere ekleme yapıldıktan sonra sayı eksiye düşer? Bunu basit bir C programıyla da test edebilirsiniz.

int main()
{
    printf("Sonuç: %d", 2147483647 + 1); // Sonuç: -2147483648
    return 0;
}

Bunun sebebi 2147483647 integer türünün binary’deki karşılığı 01111111 11111111 11111111 11111111 olmasıdır. Bir signed integer’da, binary karşılığının ilk bit’i 0 ise sayı pozitif, 1 ise negatif olur. Bu yüzden değeri bir arttırıldığı zaman karşılığı 10000000 00000000 00000000 00000000 olur. Bunun da integer’daki karşılığı ise -2147483648‘dir.

Unsigned integer’larda ise maksimum sayı 4294967295‘dir. Bunun Unix zamanındaki karşılığı da 7 Şubat 2106’dır. Genelde integer değerleri signed olduğu için bu 2038 problemi olarak adlandırılmaktadır.

2038 problemi neleri etkileyecek? 2038 yılına gelindiğinde bir çok video oyunu, ofis ve bankacılık yazılımları, gömülü sistemler dahil pek çok 32-bit veri türünde saklanan Unix zamanını kullanan sistemlerde büyük sorunlar meydana gelecek.

Bunun en makul çözümü ise gayet basit. Unix zamanını 64-bit veri türünde saklamak. Bir 64-bit’lik integer’ın alabileceği maksimum değer 9223372036854775807‘dir. Bu da yaklaşık 12 Nisan 292277026596 tarihine denk geliyor. Bu tarihe kadar Dünya’daki yaşamın hala devam edeceğine, etse dahi hala 64-bit işlemcilerin kullanılacağına ihtimal veremiyorum :)

Evet, genel olarak insanların 2038 yılına hazır olduğunu görebiliyorum. Ancak elimizi çabuk tutmaz isek Dünya’da büyük bir karışıklık çıkabileceğine, ve bu konunun gündemi meşgul edeceğinden eminim.