Tag Archives: Epochalypse

2038 yılı problemi

2038 yılında bilgisayar sistemlerini etkileyebilecek bu problemi açıklamaya çalıştım bu videoda.

Bundan önce daha iyi anlaşılması adına bahsetmek istediğim y2K, yani 2000 yılı bug‘ı.

Bildiğiniz gibi bilgisayar sistemleri 1950’li yıllarda geliştirilmeye başlandı ve günümüze kadar devam etti. Bu süreçte birçok program yılları yalnızca son iki basamakla temsil ederek 2000 yılını 1900’den ayırt edilemez hale geldi. Bu da 1 ocak 2000’de bir çok sistemde problemler yaşanacağına dair kehanet oluşmasına neden oldu.

Peki ne oldu 1 Ocak 2000 günü?

Aslında çok büyük bir olay yaşanmadı, Avustralya’da otobüslerde bilet kontrolü yapılan makinalar bozuldu, Japonya’da bir kaç mobil markasında hatalar yaşandı, Amerikada bazı slot makinaleri çalışamaz hale geldi. Yani ölümcül bir olay yaşanmadı bilişim sistemlerinde. Korkulduğu gibi olmadı yani.

2038 yılı problemi ise, birçok dijital sistemde zamanı 1 Ocak 1970 UTC gece yarısından (Unix time) bu yana geçen saniye sayısı olarak temsil etmek ve onu işaretli bir 32-bit tamsayı olarak saklamakla ilgilidir. Bu tür uygulamalar, 19 Ocak 2038’de UTC 03:14:07’den sonraki süreleri kodlayamaz. Y2K sorununa benzer şekilde, Yıl 2038 sorunu, zamanı temsil etmek için seçilen yetersiz sayıda bit (rakam) nedeniyle oluşur.

Nedenleri;

  • 1 Ocak 1970’den bu yana, işaretli bir 32-bit tamsayı kullanılarak depolanabilen en son zaman, 19 Ocak 2038 Salı günü 03:14:07’dir (2^31 − 1 = 1 Ocak 1970’ten sonra 2.147.483.647 saniye).
  • Bu tarihten sonraki süreyi artırmaya çalışan programlar, değerin dahili olarak negatif bir sayı olarak saklanmasına neden olur ve bu sistemler, 13 Aralık 1901 Cuma günü 20:45:52’de (1 Ocak 1970’den 2,147,483,648 saniye önce) meydana geldiği şeklinde yorumlayacaktır. ). Bu, sayacın kullanılabilir ikili rakamların veya bitlerin bittiği ve bunun yerine işaret bitini çevirdiği tamsayı taşmasından kaynaklanır.

Hangi sistemler savunmasız?

Öncelikle embeded olarak çalışan ve özellikle tarihleri hesaplama veya loglama için kullanan sistemler. Özellikle uçuş sistemlerinde ve otomobillerde yoğun olarak kullanılıyor bu tarz sistemler. Bu sistemlerdeki ABS gibi kilitlenme önleyici fren sistemleri, ESC ve ESP gibi elektronik stabilite kontrolü yapan kısımlar ve GPS alıcıları kullanıyor olabilir. Ancak bu, tüm bu sistemlerin Y2038 sorunundan etkileneceği anlamına gelmez, çünkü bu tür birçok sistem tarihlere erişim gerektirmez. Bunu yapanlar için, mutlak saatler/tarihler değil de, yalnızca saatler/tarihler arasındaki farkı izleyen sistemler hesaplamanın doğası gereği büyük bir sorun yaşamayacaktır.

Ayrıca mysql’in 2021 ağustos sürümünden önceki versiyonlarında, UNIX_TIMESTAMP fonksiyonu 19 Ocak 2038 Salı günü 03:14:07’den sonra 0 döndürüyormuş.

Problemi veri yapıları hangileri?

Günümüzde kullanılan birçok veri yapısı, gömülü 32 bitlik zaman temsiline sahip. Ama tam bir liste vermek neredeyse imkansız.

Dosya sistemleri (birçok dosya sistemi, süreleri temsil etmek için yalnızca 32 bit kullanır), binary dosya biçimleri (32 bit zaman alanlarını kullanan), veritabanları (32-bit zaman alanları olan), UNIX_TIMESTAMP() benzeri komutlara sahip SQL gibi veritabanı sorgu dilleri vs..

Kısaca 32-bit zaman gösterimleri içeren veri yapılarını kullanan herhangi bir sistem risk arz edecektir.

Peki çözümü nedir?

2038 Yılı sorunu için evrensel bir çözüm yoktur. Örneğin Freebsd ve OpenBsd gibi işletim sistemleri bazı değişiklikler yapmışlar ama bazı değişiklikleri de “backward compatibility” nedeniyle yapamamışlar.

Neden umursayalım ki daha 17 sene var?

Bazen gelecekte bazı şeyler olur ve bunun ne zaman olacağını bilmek isteriz. Bazen, 17 yıllık bir ipotek gibi, 17 yıldan fazla bir süre sonra planlanması gerekir. Bu sorun zaman geçtikçe daha da kötüleşecek, çünkü yazılım geliştirici olmanın en sinir bozucu yanlarından biri, her zaman upgrade yapmayan birilerinin olmasıdır. Ve her zaman, asla upgrade yapmayan bir çok insan olacak, emin olun.

64 bit işlemcileri kullanmaya başladığımızda sorun ortadan kalkacak, değil mi?

64 bit işlemci kullanmanız, 2038 yılı bug’ı konusunda temiz olduğunuz anlamına gelmez. Örneğin, yeni Apple bilgisayarınızda 64 bit işlemci var ama işletim sistemi hala 32 bit tam sayılar ve 32 bit time_t ile çalışıyor.

Tamsayı boyutunu değiştirdiğinizde, tüm yazılımınızı yeniden derlemeniz gerekir. O zaman Mac uygulamalarının 32 bit ve 64 bit sürümleri göndermesi gerekir. Ancak bu durum hem geliştirici, hem de kullanıcı için acı verici ve sorunlu bir süreç.

Ve sırf yeni bir 64 bit işlemci kullanıyor olmanız, herkesin kullanacağı anlamına da gelmez. 32 bit işlemciler sadece PC’lerde ve eski donanımlarda değil, arabanızda, telefonunuzda, saatinizde, TV’nizde, DVD oynatıcınızda da ucuz ve bol bol duruyor olacak.