6 puan yazan xguru 2021-12-30 | 1 yorum | WhatsApp'ta paylaş
  • 2038-01-19 03:14:07 UTC geçildiğinde 32-bit time_t taşacak

  • Linux çekirdeği bunu birkaç yıl önce dahili olarak 64-bit ile değiştirdi; Alpine ise 3.13 sürümünden itibaren 64-bit time_t'ye geçti

  • GNU glibc, 2.34'ten itibaren 64-bit time_t desteği sunmaya başladı, ancak yaklaşımı teknik olarak tam değil

  • musl ve diğer UNIX C kütüphanesi uygulamalarında yeni kodlarda time_t her zaman 64-bit, eski 32-bit kodlar için ise uyumluluk stub'ları sağlanıyor

→ böylece zaman içinde otomatik olarak Y2038 uyumlu hale geliyor

  • Microsoft, msvcrt'de bunun da ötesine geçerek varsayılan olarak 64-bit time_t kullanıyor; _USE_32BIT_TIME_T makrosu kullanılırsa eski 32-bit işlevlere erişilebiliyor

  • GNU glibc ise tam olarak yukarıdaki iki yaklaşımın tersini benimsiyor

→ kullanılabilmesi için açıkça -D_TIME_BITS=64 istenmesi gerekiyor

→ bir gün bu varsayılan değişebilir, ancak bugüne kadar hiç yapılmadı

⇨ benzer şekilde, 2GiB'den büyük dosyaları işlemek için gereken -D_FILE_OFFSET_BITS=64 de hâlâ açıkça belirtilmek zorunda

→ ayrıca 32-bit sistemlerde -D_TIME_BITS=64 ile derleme yapılmamalı (yani Y2038 uyumluluğu mümkün değil)

1 yorum

 
xguru 2021-12-30

Önümüzde hâlâ yaklaşık 16 yıl var, ancak Linux uzun süre değiştirilmeyen cihazlarda da çok kullanıldığı için..