Yıl 2038 problemi [kapalı]


Yanıtlar:


17

Bu problemi, 2038’den sonraki bazı uzun vadeli kriptografik sertifikalarda işlemesi gereken gömülü bir Linux sisteminde karşılaştım, bu yüzden bunun benzerliğinin uygulama alanınıza bağlı olduğunu söyleyebilirim.

Çoğu sistem 2038'den önce iyi hazır olmak zorunda olsa da, bugün kendinizi geleceğe dönük tarihleri ​​hesaplamakla bulursanız, bir sorununuz olabilir.


İyi bir! Bu örneği düşünmedim! PKI standardı sertifikaların içinde zaman sözdizimi olarak ne kullanıyor? Hiç bakmadım!
geoffc

@geoffc, Aslında tescilli bir formattı ve 2038'den sonraki tarihlere uyacak kadar büyük olan iç tarih / saat yapılarına sahipti, ancak tarih / saat dönüşümü için GLIBC işlevlerini kullandı. Doğru hatırlıyorsam, mktimeçağrı sessizce başarısız oluyordu.
Alex B

13

Bunun önemli bir sorun olacağını düşünüyorum, 1999 / 2000'deki Y2K sorunlarından çok daha tehlikeli çünkü etkilenen kod genellikle daha düşük seviyedeydi (bu CTIME) ve zamanın bu şekilde depolandığı yerleri tespit etmek daha zor.

Meseleleri daha da karmaşık hale getirmek için, Y2K'nın nemli bir kalamar olarak algılanması olaya kadarki olaydaki soruna dikkat çekmeyi zorlaştıracaktır.

Kültürel referanslar:

Cory Doctorow, açık lisanslar altında kısa öykü komisyonculuğu / yayıncılığı için yeni bir model deniyordu ve bunlardan biri için Epoch'da zekice yaptığı 2038 tema önerdim: http://craphound.com/?p=2337


O sırada konuyla ilgili çalışan biri olarak konuşan Y2K, daha önce çok fazla çalışma ve planlama nedeniyle düştü. Nemli kalamar algısı, medyadaki bütün abartılı mahkumlar tarafından güçlendirildi. 2035'te başlayacak çok fazla planlama ve iş olmasını bekliyorum, ancak eğer şanslıysak, medyadaki patlamayı özleyeceğiz.
David Thornley

Bağlantı Mark için şerefe.
boehj

9

Birkaç yıl önce, 30 yıllık kredilerde hesaplama yapan ipotek programları gibi alanlarda zaten sorunların olduğu rapor edildi: 2008 + 30 = 2038.


8

64 bit işletim sistemi 2037 problemiyle nihayetinde alakasız. (CTIME, 2037'den 2038'e yakın biter).

Sorun, işletim sisteminin bit derinliği değil, işletim sisteminin nasıl zaman depoladığıdır. Veya veritabanı sütunu zaman depolamayı nasıl seçer? Veya bu dizin hizmetleri zaman sözdizimi özniteliği arka ucunda depo zamanını nasıl kullanır?

Bu, insanların düşündüğünden çok daha büyük bir problem, çünkü 32 bit zaman sayacını kullanmak çok endemik ve yaygın.

Zaman depolayan her vakanın tekrar ziyaret edilmesi ve tüm API'lerin güncellenmesi ve onu kullanan tüm araçların güncellenmesi gerekir.

Yazılan ham veriler yerine insan tarafından okunabilir bir zaman biçiminde zaman ayarlamanıza izin veren soyutlama katmanları kolaylaştırır, ancak bu yalnızca bir durumdur.

Bunun çoğu insanın düşündüğünden daha büyük bir anlaşma olacağını düşünüyorum.


1
Gördüğüm en büyük sorun dosya formatları ve dosya dinleyicileri, ancak ext4 için tarih aralığı 2514, vfat 2107'dir. Sorun reiserfs iledir (2038).
Maciej Piechotka

ReiserFS'nin hala başka sorunları da var. CTIME’de insanların o mağaza zamanını düşündüğünden çok daha fazla gizli yer olduğunu düşünüyorum. Çok kolay ve kullanışlı bir zaman formatı. Tabii ki, imzasız CTIME 2037 sorunu yok. Ben 2107 zaman damgası davası olduğunu düşünüyorum.
geoffc

1
Apple HFS'yi düşünüyorsun. FAT hiç kullanmaz time_t. Yıl, ay ve günü tek bir 16 bitlik değerde alan olarak depolar: günlük 5 bit, aylık 4, yıl 7. 2107 1980 (FAT topraklarda sıfır yıl) + 2 ^ 7-1'dir. Daha fazla eğlence için, FAT günün saatini bir başka 16-bit değerinde aynı şekilde depolar, ancak matematiği yaparsanız, günün bu saatini kaydetmek için 17 bite ihtiyacınız olduğunu görürsünüz. FAT, saniye boyunca bir bit çözünürlük düşürerek bu sorunu çözer; FAT, 2 saniyeden kısa değişiklikleri tek tek ayırt edemez. Ah, Microsoft, bu sizin gereksiz uyumsuzluklarınız olmadan ne kadar sıkıcı bir dünya olurdu!
Warren Young,

8

Bu benim görüşüme göre, ancak bu sorun 32 bitlik bir sayaç sorunundan kaynaklanıyor, bugün çoğu işletim sistemi 64 bitlik (en az 64 bitlik bilgisayarlarda) zamanı ele alacak şekilde güncellendi. 2038'den önceki zaman, 2020 diyelim. Dolayısıyla, yalnızca 2038'de 2020'den yazılım çalıştırmaya devam edecekseniz sorun yaşayabilirsiniz.
Büyük olasılıkla neredeyse her durumda bir sorun olmayacaktır. Umuyorum.


Ubuntu 32 bit versiyonunu denedim ve 2038 problem gösterdi, fakat Ubuntu 64 bit versiyonunu çalıştırırken 2038 probleminin işareti yoktu. Başka hiçbir Unix denemedim.
Jimmy Hedman

Evet, çoğu 32 bit sürümde sorunu göreceksiniz ancak 64 bit sürümde görmeyeceksiniz. Artık 2038'de 32 bit işletim sistemine sahip olmamayı bekleyebilirsiniz.
yarıçap

2
Bu saçma bir varsayım. Bugünün dünyasında hala 16 (ve hatta 8 bit) mikroişlemci kullanıyoruz, 32 bit mikroişlemcilerin gelecekte sihirli bir şekilde ortadan kaybolacağı söyleniyor? Bunun ortalama kullanıcıyı etkilemeyeceğini söylemek doğru olur, ancak son durumlarda sorun olmaya devam edebilir.
Eli Frey

Peki - 16 bit ve 8 bit bilgisayarlar 1. tarihi taşıyabilir (0: 1970-01-01'den örneğin 2010-01-01'e) ki bazı durumlarda 'sadece' ABI kırılabilir).
Maciej Piechotka

1

O kadar da önemli değil.

Yazılım ve donanım tedarikçilerinin ürünlerini satmaları için "Y2K uyumlu" olarak sertifikalandırması gereken ilk Y2K hava saldırısı sırasında (PC Bağlantısı üzerindeki ağ kablolarını Y2K uyumlu olduğunu hatırlıyorum) pek çok şirket her şeyin ayrıntılı denetimlerini yaptı. , gelecekte saatler ayarlayarak ve test ederek.

Testin maliyeti çok yüksek olduğu için, hemen hemen her zaman 1/1/99 (bazı geliştiricilerin 99'u bir hapishane olarak kullanmış olabilir), 12/31/99, 1/1 / 00, 2000, 1/19/38 ve diğer birçoklarının atılımı. Sıkıcı bir liste için buraya bakın .

Bu nedenle, 1999'da etrafta olan önemli bir yazılımın 2038 hataya sahip olmayacağına inanıyorum, ancak o zamandan beri cahil programcılar tarafından yazılmış yeni yazılımlar olabilir. Tüm Y2K debacle programcıları genel olarak tarih kodlama konularının çok daha fazla farkına vardıklarından, Y2K'nin (kendi başına bir anticlimax olan) olduğu kadar büyük bir etki yaratması muhtemel değildir.


Bunun dışında, UNIX time_t türünün 32 bit olması neden oluyor.
Yuhong Bao,

1

O zaman hala çalışan 32 bit sistemler bir problem olacaktır.


2
Bunu daha net hale getirmek için, bu konuda ayrıntılı Could neyi tam olarak sorun haline gelir ve bu nasıl tepki?
Anthon

Mesele, zamanı hesaplamak için kullanılan 32 bit tamsayıdır. Zaman, 01 Ocak 1970'ten bu yana geçen saniye sayısı ile ölçülür. Örneğin, bir gün sonra bu sayaç 86400'dür. Bu nedenle, 2038'de, bu değer, işaretsiz 32 bit tam sayı. Zaman damgası için 64 bit kullanan 64 bit bir sistem, 4 Aralık Pazar günü 15: 30: 08'e kadar çalışabileceği için bu sorunu yaşamayacaktır
Rahul Kadukar

0
#include <time.h>
#include <stdio.h>

int main() {
  time_t t = (time_t)(1L << (sizeof(time_t)*8 - 9));
  printf("%d\n", sizeof(time_t));
}

9 yerine 1 olmalıdır ancak ctime daha büyük tarihlerle başa çıkamaz:

8 - Sun Jun 13 07:26:08 1141709097

Sistemim (elbette 64 bit) zamanım 1 milyon yıl daha bile çalışabiliyor. Çözüm, sistemleri 64 bit olarak güncellemektir.

Program, programın üstesinden gelemeyebileceği yönündedir. Özellikle eski, uygun ve bakımı yapılmamış. Devs gerçekleri takip etmek için kullanılır:

  • int32 bit (aslında diğerleri arasında 64 bit sistemlerde 32 bit olarak korunurlar çünkü her zaman 32 bit olduklarını varsaydılar)
  • Çoğu tür (örneğin time_t) güvenle üzerine dökülebilirint

Popüler FLOSS yazılımında her iki şey de muhtemelen 'birçok göz' incelemesinden geçemez. Daha az popüler ve özellikli olduğunda, büyük ölçüde yazara bağlı olacaktır.

Özgür * nix dünyasında 2038 “farkedilmez” hale gelirken “uygun” platformlarda (yani, çok sayıda uygun yazılım içerenler) sorun beklemekteyim - özellikle de bazı parçaların bakımı yapılmayacaksa.


Bu 'sistem' veya 'işletim sistemi' değildir. Önceki 32 bit işletim sistemlerinden çoğu (16 bit işletim sistemi bile olsa) 64 bit matematik yapabilirdi. İşletim sistemi seviyesindeki 64 bit derinlik temelde matematik yapma yeteneğine sahip olmayan bellek modeline bir referanstır. Ve zaman tamamen matematikle ilgilidir.
geoffc

Evet ve hayır. 32 bit ve 64 bit işletim sisteminin 64 bit aritmetik işleyebileceği doğrudur (herhangi bir aritmetiği taklit edebilirsiniz). Ancak time_t, 32 bit işletim sistemindeki time_t(veya eşdeğeri) 32 bit olurken , 64 bit işletim sistemindeki (veya eşdeğeri) 64 bit olur. Bazı basitleştirmelerde bile yeterince net olduğunu düşündüm.
Maciej Piechotka

0

Y2K gibi bir şey varsa, bazı insanlar zaten etkilenmiş ve yazılımları değiştiriyor, ancak çoğu geliştirici 2030'larda bir zamana kadar, muhtemelen 2035'te bir süre öncesine kadar görmezden gelecektir. K & R C'yi bilmek ve henüz çok yaşlı olmamak birdenbire çok fazla parayla para kazanabilecek. Gerçek geçiş henüz yapılmayan, muhtemelen o kadar önemli olmayan pek çok şey gösterecektir.


-5

Y2K problemi dört yerine yılı temsil eden iki tüzüktü.

Pek çok sistemin 2000'den 1900'den yalnızca '00'ı depoladığı için ayırt etmenin bir yolu yoktu.

Hemen hemen tüm sistemlerde ya yıl depolamak için 4 karakter ya da bir çeşit kütüphane kullanılıyor.

Öyleyse herkes 10000 yılı (Y10K) için endişelensinler. İşletim sistemi ve Kütüphane yazarları hariç ...


Muhtemelen hiç kimse (iyi pratik olarak hiç kimse) tarih koyma tarihi şu anda böyle bir formattır (yani DCD veya string). Zaman genellikle nesneler veya nesneler tarafından ele alınır (bu nedenle yalnızca ekran kodunun güncellenmesi gerekir).
Maciej Piechotka

Evet, tam olarak benim açımdan. Y2K, tarihleri ​​sabit uzunluklu dizeler olarak temsil etme fikrini etkili bir şekilde öldürdü.
Stephen Jazdzewski

@Stephen: COBOL dünyasında değil, ama neyse ki Unix / Linux'ta COBOL uygulamaları çok az.
David Thornley

@David: COBOL programları çoğunlukla Y2K problemiydi. Linux / Unix sistemlerinin kullanıcılar açısından hiç Y2K sorunu var mıydı? Orijinal soruya verilen basit cevap hayır.
Stephen Jazdzewski

4
Poster, y2k problemini sormuyor; Tamamen farklı bir canavar olan y2k38 problemini soruyorlar. Açıklama için en.wikipedia.org/wiki/Y2K38 adresini ziyaret edin .
Kevin M,
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.