- Debian, Y2K38 (Unix Epochalypse) sorununu önceden engellemek için bir sonraki sürüm Debian 13'ten itibaren 32 bit mimarilerde de 64 bit
time_t kullanımını resmileştiriyor
- Mevcut 32 bit
time_t sınırlaması nedeniyle 19 Ocak 2038'den sonra zamanın 1900'e geri dönmesi gibi bir durum yaşanabileceğinden, bu sorunun daha fazla ertelenmemesine karar verildi
- 64 bit donanım zaten güvenli olsa da, gömülü sistemler, IoT ve benzeri maliyet hassasiyetine sahip 32 bit cihazlarda Debian talebi sürdüğü için önleyici adım ihtiyacı vurgulanıyor
- Toplam 6.429 pakete dağılmış
time_t türü için, ABI uyumluluğunun bozulması göze alınarak eşzamanlı geçiş içeren büyük ölçekli bir çalışma yürütüldü
- i386, hurd-i386 gibi bazı eski destek mimarileri istisna olarak kalırken, 64 bit
time_t tabanlı yeni bir x86 (i686) mimarisinin eklenme olasılığına da değiniliyor
Debian'ın Y2K38 hatasına yanıtı: 64 bit zamana geçiş
- Debian, yaklaşan Y2K38 ya da Unix Epochalypse sorunundan kaçınmak için, desteklenen en eski donanımların bir bölümü dışında tüm ortamlarda 64 bit zamana geçiyor
- Bununla, 19 Ocak 2038'de ortaya çıkması beklenen 32 bit signed int aralığının aşılması nedeniyle oluşan zaman değeri hatası önleniyor
Y2K38 ve Unix Epochalypse sorununun arka planı
- Y2K38 sorunu, 1 Ocak 1970'ten bu yana geçen saniyeleri 32 bit signed int ile ifade eden Unix sistemlerinde, 2038 sonrasında taşma meydana gelerek zamanın 1900 gibi geçmiş yıllara yanlış dönmesi olayıdır
- Bu durum, geçmişteki Y2K (2000 yılı sorunu) gibi kısa veri biçimi seçimine dayanan mimari bir karardan kaynaklanır
- Y2K döneminde geliştiricilerin önceden aldığı önlemler sayesinde büyük bir kaos önlenebilmişti
- 64 bit donanım için yazılımlar zaten güvenli, ancak Debian hâlâ gömülü, düşük özellikli ve eski ortamlarda yaygın biçimde kullanılıyor
Debian'ın başlıca adımları
- Debian 13 "Trixie" sürümünden itibaren tüm ana mimarilerde 64 bit
time_t varsayılan olarak uygulanacak
- 64 bit donanım zaten güvenli olsa da, sorunlar özellikle 32 bit işlemci tabanlı gömülü cihazlar ve eski donanımlarda sık görülüyor
- Bu tür ekipmanlar, otomotiv kontrolü, IoT, TV ve yönlendirici gibi maliyet hassasiyeti yüksek ve yüksek adetli sevkiyat yapılan alanlarda hâlâ kullanılıyor
- Yeni cihazların çoğu OpenEmbedded, Alpine, Android, Gentoo gibi kendi derlenen Linux dağıtımlarını kullansa da, Debian tabanlı gömülü cihazların kullanım alanlarının önümüzdeki yıllarda da süreceği öngörülüyor
Uygulama ve değişiklikler
time_t değişkenleri ilgili kodlara 6.429 pakete dağılmış durumda olduğundan büyük ölçekli bir çalışma gerekti
- Bu değişiklik ABI (Application Binary Interface) uyumluluğunu bozabileceği için, ilgili tüm kütüphane ve paketlerde eşzamanlı olarak düzenleme yapıldı
- Bakım ekibine göre bu çalışma tamamlandı ve yeterince test edildi
İstisnalar ve gelecek planları
- i386 portu (mevcut x86), mevcut ikili dosya çalıştırma uyumluluğu amacıyla 32 bit
time_t kullanmayı sürdürecek
- i686 mimarisi için 64 bit zaman ve daha modern ISA (Instruction Set Architecture) desteği ayrıca tartışılabilir
- hurd-i386 portu, çekirdek desteğinin yetersizliği nedeniyle dönüştürülmeyecek; bunun yerine hurd-amd64'e geçiş planı ilerliyor
Geliştiriciler için notlar
- Geliştiriciler, yazılımlarının 64 bit zaman değişkenlerine geçişle bozulup bozulmadığını Debian wiki'de anlatılan yöntemlerle test edebilir
- Ayrıntılar ve teknik belgeler Debian wiki üzerinde sunuluyor
1 yorum
Hacker News görüşleri
time_tgördüğümde onu hatırlayacağımmm/yy) kısa yazmak daha pratik olduğu için iki basamaklı yıl kullanılıyor, kart ömrü için yeterli ama 2100'de dönüşüm sorunu çıkabilir; Y2K'nin büyük kısmı UI sorunlarından kaynaklanıyordu (iki karakterlik text field,+1900hardcode edilmesi vb.); bizzat gördüğüm Y2K hatası, bir internet forumunun 1999'dan 19100'e geçmesiydi (basit bir çıktı hatası); Y2K sadece COBOL'un sorunu değildiintdeğeriyle temsil etselerdi daha da fazla bayt tasarrufu sağlanabilirdi; 3 bayt ile 1900'den yaklaşık 44.000 yılına kadar, 2 bayt ile de yaklaşık 2070'e kadar kapsanabilirditime_tEpochalypse'ı çözecek ama tüm sistemler basitçe 64 bit saniyeye geçmiyor; ext4 zaten 30 bit kesir çözünürlüğüne (nanosaniye düzeyi) ve 34 bit saniye çözünürlüğüne geçti ama birkaç yüzyıl sonra yine sorun çıkacak; bir gün 64 bit saniye + 64 bit kesirden oluşan 128 bit zaman damgasında karar kılınacağını tahmin ediyorum, o zaman insanlık tarihindeki öngörülebilir geleceğin tamamı kapsanabilirtime64_tgeçişi zaten tamamlandı; yalnızca i386 eski ikili uyumluluk nedeniyle istisna, diğerlerinin hepsi, m68k dahil, değiştirildi; bizzat m68k, powerpc, sh4 ve hppa geçişini yaptımtime_tbir değişken değil, bir veri tipidirtime_tgerçekten her yerde karşımıza çıkıyor. 35.960 paketin 6.429'unun kaynak kodunda yer alıyor.time_tiçeren ve ABI üzerinden açığa çıkan yapıları olan paketlerde, tüm ABI aynı anda migrate edilmek zorunda.” Wiki bunu habere göre daha net açıklamışRLIMIT_STACKdeğerini artırmak yeterli; örneğinulimit -s 40004MB stack demek, daha da artırmak için/etc/security/limits.confdosyasını düzenleyip yeniden giriş yapmak gerekirhttp postJSON isteğiyle göndermek olmaz mı?MAX_ARG_STRLENdeğerini yeniden tanımlayıp çekirdeği yeniden derleyebilirsin; sayfa boyutu daha büyük makineler kullanmak da bir yöntemdir (ör. 64k sayfa boyutlu RHEL Arm çekirdeği), ama komut tamponu yerine prosesler arasında veri taşımak için pipe kullanmak çok daha kolaytime_tkullanan C++ standart kütüphanemi yazıp kullanmıştım