Linux saati 19 Ocak 2038 3:14:08 de başarısız olur mu?


23

Bu konuda biraz endişeliyim. Buna "2038 yılı problemi" denir. Linux çekirdeği veya Ubuntu bundan sonra 12.04 itibariyle tarihleri ​​işlemeye hazır mı?


8
Saatinizi 19 Ocak 2038 3:14:07 gibi bir şeye ayarlayıp denemeyi denediniz mi?
gertvdijk

2
Bu sorunun var olduğunu ve henüz çözülmediğini varsayalım. 12.04 sonsuza dek desteklenmeyecek, bu nedenle siz ve diğer tüm insanlar, bu yıllar gerçekleşene kadar güncellenmiş bir dağıtımda olacaksınız. Güncellemek kolaydır. Bu güncellemelerden biri mutlaka bir düzeltme içerecektir. Bu yüzden endişelenmek için bir neden yok, ama bu gerçekten ilginç bir soru.
verpfeilt

3
Hata zaten giderildi.
ThePiercingPrince

Sistem saati (zaten oldukça yakın zamanda bir çekirdekte olmaz); bazı veri yapıları (ve onu kullanan programlar) anormal davranış sergileyebilir. Benim düşünceme göre, bu gömülü cihazlarda bir sorun olacak - bu kodların geçerli kodu çalıştırması çok daha az olası.
Piskvor

1
@hmayag: Ben "trafik ışığı kontrolörü" gibi "ekmek kızartma makinesi" gibi değildi. Bu şeyler tüketici sınıfı elektronik cihazlardan biraz daha sağlamdır ve bu ömrünü kolayca aşabilir ( parça değiştirmeleriyle, ancak muhtemelen yükseltme yapmadan) - IIRC, 1980'lerin elektroniklerinde Y2K'dan hemen sonra bazı sorunlar vardı.
Piskvor

Yanıtlar:


13

Hayır, başarısız olmayacak. En kötü durumda, bir programcının bakış açısından, beklendiği gibi çalışacaktır: 1901-12-13 20:45:52 tarihine kadar yeniden başlatılacaktır:

görüntü tanımını buraya girin

Bu durumda, bu gerçekleşinceye kadar mevcut dağıtımlarınızı güncellemeyeceksiniz. Chocobai , " Güncellemek kolaydır. Bu güncellemelerden biri kesinlikle bir düzeltme içerecektir. " Dedi.

2000'den önceki 16-bit makinelerde aynı sorun / soru olduğunu hatırlıyorum ve sonunda herhangi bir sorun olmadı.

Vikipedi bir çözüm:

64 bit donanım üzerinde çalışmak üzere tasarlanan çoğu işletim sistemi zaten işaretli 64 bit time_ttam sayıları kullanıyor. İmzalanmış 64 bitlik bir değer kullanılması, evrenin tahmini yaşından yirmi kat fazla yirmi kat daha fazla olan yeni bir sarma tarihi sunar: 4 Aralık 292,277,026,596, bundan sonraki yaklaşık 292 milyar yıl, 15:30: 08'de. Tarihler üzerinde hesaplamalar yapabilme özelliği,tm_yearyıl için 1900'den başlayan imzalı bir 32 bit int değeri kullanır. Bu, yılı maksimum 2,147,485,547 (2,147,483,647 + 1900) ile sınırlandırır. Bu, programların yürütülmesi sorununu çözerken, çoğu katı depolama formatları kullanan, tarih değerlerinin ikili veri dosyaları içinde saklanması sorununu çözmez. Ayrıca uyumluluk katmanları altında çalışan 32 bit programlar için sorunu çözmez ve zaman değerlerini dışındaki türlerdeki değişkenlerde yanlış saklayan programlar için sorunu çözemez time_t.

Ubuntu 13.04'ü 64-bit kullanıyorum ve merakımla zamanı 2038-01-19 03:13:00 olarak değiştirdim. 03:14:08 sonra hiçbir şey olmadı:

2038-01-19 öncesi tarih ve saat 03:14:08 2038-01-19 tarihinden sonraki tarih ve saat 03:14:08

Yani bu konuda endişelenecek bir şey yok.

Hakkında daha ayrıntılı:


9
Sıfırlarsa, başarısız olur çünkü "başarısız" derken "çalışmıyor ya da yanlış çalışıyorum".
ThePiercingPrince

1
@LinuxDistance Bu sizin bakış açınızdan oluyor. Ancak bir programcının bakış açısından beklendiği gibi çalışacaktır: sıfırlanacaktır . Maya takviminin sonu aynıydı: dünya bu yüzden başarısızlığa uğradı.
Radu Rădeanu

10
Katılmıyorum? Bir programcının bakış açısından bir saatin sıfırlanması gerekmiyor, bu yüzden başarısız olacak
Nanne

3
Yorumlardaki bu tartışma anlamsız imo. Soru şu: "Linux çekirdeği mi Ubuntu bundan sonra tarihleri ​​işlemeye hazır mı?" Eh, bu tarihlerle başa çıkabiliyor, bu yüzden bu soru bağlamında başarısız oluyor.
gertvdijk

2
@gertvdijk "" güncel / gerçek "Linux çekirdeği veya Ubuntu bundan sonra tarihleri ​​işlemeye hazır mı?"
Radu Rădeanu

7

Aşağıdaki Perl betiğini kullanarak bilgisayarınızın saatinin çöküp çökmeyeceğini kontrol edebilirsiniz:

#!/usr/bin/perl
use POSIX;
$ENV{'TZ'} = "GMT";
for ($clock = 2147483641; $clock < 2147483651; $clock++) {
    print ctime($clock);
}

Bilgisayarınız iyi olacaksa, şunu alacaksınız:

Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038       <-- Last second in 32-bit Unix systems
Tue Jan 19 03:14:08 2038
Tue Jan 19 03:14:09 2038
Tue Jan 19 03:14:10 2038

Bilgisayarınız benimkine benziyorsa, şöyle sarılır:

Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:52 1901

Bunu da yapabilir:

Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:07 2038

Sanırım burada Perl'i test ediyorsunuz ve çekirdekteki gerçek işletim sistemini değil. Yoksa kullanımıyla ctimemı?
gertvdijk

@gertvdijk Peki, yamalı bilgisayarlarda ilk çıktıyı verir ve Ubuntu dizüstü bilgisayarım ikinciyi verirken, üçüncüsü Debian sunucumdan geliyor. Aslında kodu yazmadım, internet üzerinden aynı şekilde.
SkylarMT

2
doğruladı. 64 bit makineniz varsa, bu iyi olacaktır. Üstelik ... kimiz 2038 yılında hala 32 bit sadece çalışan makinelere sahip olacak?
jrg

1
2038 sorununu bir iş arkadaşına göstermek için bunu aramaya gittim ve yukarıdaki yorumu yaptıktan 2 yıl sonra, 2038'de başarısız olacak 32 bit makinelere sahip olacağımızdan çok az şüphem var. Ah, genç iyimserlik.
jrg

@James, belki biraz istemeyerek. Muhtemelen IoT cihazlarına 32 bit Linux gömülü olacak, yamalı. Dünyanın sonu? Hayır. Bazı yerlerde sorun mu var? Kesinlikle.
Prof. Falken, Monica

3

1996'da bu konuda kısa bir yazı yazdım ve yayınladım. Bu, onu göstermek için kısa bir C programı içeriyordu. Ayrıca David Mills ile NTP - Ağ Zaman Protokolü ile benzer konular hakkında e-postalar aldım. Ubuntu 14.04 64-bit dizüstü bilgisayarımda perl kodu sınırlama getirmedi, bu nedenle temel 64-bit lib'lerin değiştirilmiş olması gerekiyordu.

Bununla birlikte, uzun zaman önce yapılan test kodumu çalıştırmak, UNIX Dönemi’ne geri dönme zamanını gösteriyor. Yani geçmişten gelen 32 bitlik kod ile her şey yolunda değil.

1996 yazım, UNIX zamanı 2038'de bitecek! 2000 yılından bu yana web sitemde yayınlandı. Bu "UNIX Time" başlıklı bir varyantı 1998 yılında "Y2K Millennium Computing için En İyi 2000 Yılı 2000 Yılı" ISBN 0136465064'te yayınlandı.


2

64-bit Linux hazır, en azından çekirdek işletim sistemi arayüzlerinden bahsediyorsanız (bireysel uygulamalar elbette hala bozulabilir). time_t geleneksel olarak 64-bit linux üzerinde "uzun" ve "uzun" için bir takma ad olarak tanımlanır, 64-bit'tir.

32 bit Linux için durum (ve 64 bit Linux'ta 32 bit ikili dosyalar için uyumluluk katmanı) çok daha az pembe. Mevcut tüm ikili dosyaları bozmadan kırılması ve düzeltilmesi kolay bir iş değildir. Tüm API'ler time_t kullanır ve çoğu durumda veri yapılarının bir parçası olarak gömülür, bu nedenle yalnızca API'lerin çoğaltılması değil, birlikte çalıştıkları veri yapılarının da olması gerekir.

Bir miktar geriye dönük uyumluluk seviyesi olsa bile, doğru zaman almak isteyen tüm ikili dosyaların yeni 64-bit zaman arayüzlerini kullanmak için yeniden inşa edilmesi gerekecektir.

Bazı çalışmalar yapıldı (örneğin https://lwn.net/Articles/643234/ ve http://www.sourceware.org/ml/libc-alpha/2015-10/msg00893.html sayfasına bakın ) hala tam bir çözümden uzun bir yol. Y2K38 güvenli olan genel amaçlı 32-bit dağıtımların olup olmayacağı açık değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.