Masalah tahun 2038 [ditutup]


Jawaban:


17

Saya telah mengalami masalah ini dalam sistem Linux tertanam yang perlu menangani tanggal melewati 2038 dalam beberapa sertifikat kriptografi jangka panjang, jadi saya akan mengatakan kesamaan ini tergantung pada domain aplikasi Anda.

Meskipun sebagian besar sistem harus siap sebelum 2038, jika Anda menemukan diri Anda hari ini menghitung tanggal jauh di masa depan, Anda mungkin memiliki masalah.


Bagus Saya tidak memikirkan contoh itu! Apa yang digunakan standar PKI sebagai sintaks waktu di dalam sertifikat? Saya belum pernah melihat!
geoffc

@geoffc, Sebenarnya itu adalah format berpemilik dan memiliki struktur tanggal / waktu internal, yang sendiri cukup besar untuk memenuhi tanggal melewati 2038, tetapi menggunakan fungsi GLIBC untuk konversi tanggal / waktu. Jika saya ingat dengan benar, mktimepanggilan diam-diam gagal.
Alex B

13

Saya pikir ini akan menjadi masalah yang signifikan, jauh lebih merusak daripada masalah Y2K pada tahun 1999/2000 karena kode yang terpengaruh umumnya lebih rendah (CTIME) dan jadi lebih sulit untuk menemukan tempat-tempat di mana waktu disimpan dengan cara itu.

Untuk memperumit masalah lebih lanjut, fakta bahwa Y2K dianggap sebagai squib yang lembab akan membuat lebih sulit untuk menarik perhatian pada masalah dalam rangkaian acara.

Referensi budaya:

Cory Doctorow sedang mencoba model baru untuk komisioning / penerbitan cerita pendek di bawah lisensi terbuka, dan saya menyarankan tema 2038 salah satunya, yang ia lakukan dengan cemerlang dalam Epoch: http://craphound.com/?p=2337


Berbicara sebagai seseorang yang sedang mengerjakan masalah pada saat itu, Y2K gagal karena banyak pekerjaan dan perencanaan sebelumnya. Persepsi squib yang basah diperkuat oleh semua kiamat yang berlebihan di media. Saya berharap akan ada banyak perencanaan dan pekerjaan yang dilakukan mulai tahun 2035 atau lebih, tetapi jika kita beruntung kita akan kehilangan media blitz.
David Thornley

Sorakan untuk tautan Tandai.
boehj

9

Beberapa tahun yang lalu, sudah ada laporan masalah, di bidang-bidang seperti program hipotek melakukan perhitungan pinjaman 30 tahun: 2008 + 30 = 2038.


8

OS 64 bit pada akhirnya tidak relevan dengan masalah 2037. (CTIME berjalan lebih dekat ke 2037 dari 2038).

Pertanyaannya bukan pada kedalaman bit OS, melainkan bagaimana waktu penyimpanan OS. Atau bagaimana kolom database memilih untuk menyimpan waktu. Atau bagaimana sintaks waktu layanan direktori ini menyimpan waktu di bagian belakang.

Ini adalah masalah yang jauh lebih besar daripada yang dipikirkan orang, karena sangat endemik dan umum menggunakan penghitung waktu 32 bit.

Setiap instance yang menyimpan waktu perlu ditinjau kembali, dan semua API diperbarui, dan semua alat yang menggunakannya juga diperbarui.

Lapisan abstraksi yang memungkinkan Anda mengatur waktu melalui format waktu yang dapat dibaca manusia, alih-alih data mentah yang ditulis membuatnya lebih mudah, tetapi itu hanya satu kasus.

Saya menduga ini akan menjadi kesepakatan yang jauh lebih besar daripada yang dipikirkan kebanyakan orang.


1
Masalah terbesar yang saya lihat adalah format file dan filesystens, Namun rentang tanggal untuk ext4 adalah 2514, vfat adalah 2107. Masalahnya dengan reiserfs (2038).
Maciej Piechotka

ReiserFS masih memiliki masalah lain. Saya masih berpikir ada lebih banyak tempat tersembunyi daripada yang orang pikirkan tentang waktu toko di CTIME. Ini adalah format waktu yang sangat mudah dan berguna. Tentu saja, CTIME yang tidak ditandatangani tidak memiliki masalah 2037. Saya pikir itu adalah kasus cap waktu 2107.
geoffc

1
Anda sedang memikirkan Apple HFS. FAT tidak digunakan time_tsama sekali. Ini menyimpan tahun, bulan dan hari sebagai bidang dalam satu nilai 16-bit: 5 bit untuk hari, 4 untuk bulan, meninggalkan 7 untuk tahun. 2107 adalah 1980 (tahun nol di tanah FAT) + 2 ^ 7-1. Untuk lebih menyenangkan, FAT menyimpan waktu sehari dengan cara yang sama dalam nilai 16-bit yang lain, tetapi jika Anda menghitung, Anda perlu 17 bit untuk menyimpan waktu hari dengan cara ini. FAT menyiasatinya dengan menjatuhkan sedikit resolusi selama beberapa detik; FAT tidak dapat membedakan perubahan kurang dari 2 detik. Ah, Microsoft, betapa membosankannya dunia ini tanpa ketidakcocokan Anda yang tidak perlu!
Warren Young

8

Ini adalah pendapat saya, tetapi masalah ini disebabkan oleh masalah penghitung 32 bit, hari ini sebagian besar os diperbarui untuk menangani waktu pada 64 bit (setidaknya pada komputer 64 bit), jadi saya kira semua OS dan perangkat lunak akan siap untuk waktu yang lama. waktu sebelum 2038, katakanlah tahun 2020. Jadi Anda mungkin hanya memiliki masalah jika pada tahun 2038 Anda masih akan menjalankan perangkat lunak dari tahun 2020.
Kemungkinan tidak menjadi masalah di hampir semua kasus. Saya harap.


Saya mencoba versi Ubuntu 32 bit dan itu menunjukkan masalah 2038 tetapi menjalankan versi Ubuntu 64 bit tidak menunjukkan tanda-tanda masalah 2038. Saya belum pernah mencoba Unix lainnya.
Jimmy Hedman

Ya pada sebagian besar versi 32 bit Anda akan melihat masalah tetapi tidak pada versi 64 bit. Anda dapat berharap untuk tidak lagi memiliki OS 32 bit pada tahun 2038.
radius

2
Ini adalah asumsi yang konyol. Kami masih menggunakan mikroprosesor 16 (dan bahkan 8 bit) di dunia saat ini, apa yang bisa dikatakan mikroprosesor 32 bit akan menghilang secara ajaib di masa depan? Adalah adil untuk mengatakan ini tidak akan berdampak pada rata-rata pengguna, tetapi dalam kasus tepi itu bisa terus menjadi masalah.
Eli Frey

Nah - komputer 16-bit dan 8-bit dapat 1. memindahkan tanggal 0 (dari 1970-01-01 menjadi misalnya 2010-01-01) - namun akan merusak konvensi API / ABI tertentu 2. memperpanjang bidang timer ( yang mungkin dalam beberapa kasus melanggar 'hanya' ABI).
Maciej Piechotka

1

Bukan masalah besar.

Selama blitz Y2K pertama, di mana vendor perangkat lunak dan perangkat keras diharuskan untuk mengesahkan produk mereka sebagai "Y2K compliant" agar dapat dijual (Saya ingat kabel jaringan pada PC Connection disertifikasi Y2K compliant), banyak perusahaan melakukan audit terperinci atas segalanya , dengan mengatur jam di masa depan dan pengujian.

Pada saat itu, karena biaya pengujian sangat tinggi, mereka hampir selalu diuji dengan beberapa tanggal, seperti 1/1/99 (beberapa pengembang mungkin menggunakan 99 sebagai sentinal), 12/31/99, 1/1 / 00, lompatan 2000, 1/19/38, dan banyak lainnya. Lihat di sini untuk daftar yang membosankan.

Jadi saya percaya bahwa setiap perangkat lunak penting yang ada sekitar tahun 1999 mungkin tidak akan memiliki 2.038 bug, tetapi perangkat lunak baru yang ditulis sejak saat itu oleh para programmer yang bodoh mungkin. Setelah seluruh programmer Y2K bencana umumnya menjadi lebih sadar akan masalah pengkodean tanggal sehingga tidak akan berdampak sebesar Y2K (yang, dalam dirinya sendiri, merupakan sesuatu yang antiklimaks).


Kecuali bahwa masalah ini disebabkan oleh tipe time_t UNIX menjadi 32-bit.
Yuhong Bao

1

Sistem 32 bit yang masih berjalan saat itu akan menjadi masalah.


2
Bisakah Anda menguraikan itu, untuk membuatnya lebih jelas apa sebenarnya yang menjadi masalah, dan bagaimana bereaksi terhadap itu?
Anthon

Masalahnya adalah dengan integer 32 bit yang digunakan untuk menghitung waktu. Waktu diukur dalam jumlah detik yang berlalu sejak 01 Januari 1970. Misalnya setelah satu hari penghitung ini akan berada di 86400. Jadi pada 2038 nilai ini akan melimpah karena akan menyimpan nilai yang lebih besar daripada jumlah yang dapat disimpan dalam suatu unsigned 32 bit integer. Sistem 64 bit menggunakan 64 bit untuk cap waktu tidak akan memiliki masalah ini karena akan dapat bekerja sampai 15:30:08 pada hari Minggu, 4 Desember 292.277.026.596 (292 miliar tahun)
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));
}

seharusnya 1 bukan 9 tetapi ctime tidak menangani tanggal yang lebih besar:

8 - Sun Jun 13 07:26:08 1141709097

Sistem saya (tentu saja 64 bit) waktu dapat berjalan bahkan 1 juta tahun lebih. Solusinya adalah memperbarui sistem ke 64 bit.

Tangkapannya adalah bahwa program mungkin tidak menanganinya. Terutama tua, propertary dan tidak terawat. Devs digunakan untuk fakta-fakta berikut:

  • intAda 32 bit (sebenarnya mereka disimpan sebagai 32 bit pada sistem 64-bit antara lain karena diasumsikan mereka 32 bit selalu)
  • Sebagian besar tipe (seperti time_t) dapat dicast dengan amanint

Dalam perangkat lunak FLOSS yang populer, kedua hal ini mungkin tidak akan melalui tinjauan 'banyak mata'. Pada yang kurang populer dan propertary itu akan sangat tergantung pada penulis.

Saya kira di dunia * nix gratis, 2038 akan mendapatkan 'tanpa diketahui' sementara saya memang mengharapkan masalah pada platform "propertary" (yaitu mereka yang memiliki sejumlah besar perangkat lunak propertary) - terutama jika beberapa bagian crutial tidak akan dipertahankan.


Ini bukan 'sistem' atau 'OS'. Sebagian besar OS 32 bit sebelumnya (bahkan OS 16 bit) bisa melakukan matematika 64 bit. Kedalaman 64 bit pada level OS pada dasarnya adalah referensi ke model memori, bukan kemampuan untuk melakukan matematika. Dan waktu adalah soal matematika.
geoffc

Iya dan tidak. Memang benar bahwa OS 32 bit dan 64 bit dapat melakukan aritmatika 64 bit (Anda dapat meniru aritmatika apa pun). Namun time_t(atau setara) pada OS 32 bit kebetulan memiliki 32 bit sementara time_t(atau setara) pada OS 64 bit kebetulan memiliki 64 bit. Saya pikir itu cukup jelas bahkan jika dengan penyederhanaan tertentu.
Maciej Piechotka

0

Jika itu seperti Y2K, beberapa orang telah terpengaruh dan sedang mengubah perangkat lunak, tetapi sebagian besar pengembang akan mengabaikannya sampai sekitar tahun 2030-an, mungkin 2035 atau lebih, pada titik mana akan ada banyak pekerjaan yang dilakukan, dan siapa pun yang cukup tua untuk mengetahui K&R C dan belum terlalu pikun tiba-tiba akan bisa mendapatkan banyak uang. Transisi yang sebenarnya akan menunjukkan banyak hal yang belum dilakukan, mungkin tidak ada yang terlalu penting.


-5

Masalah Y2K adalah dua piagam yang mewakili tahun, bukan empat.

Banyak sistem tidak memiliki cara untuk membedakan antara 2000 dari 1900 karena mereka hanya menyimpan '00'.

Hampir semua sistem sekarang menggunakan 4 karakter untuk menyimpan tahun ini, atau mereka menggunakan semacam perpustakaan.

Jadi mari kita semua khawatir tentang tahun 10000 (Y10K) sebagai gantinya. Kecuali untuk penulis OS dan Perpustakaan ...


Mungkin noone (well noically noone) menyimpan tanggal adalah format seperti itu (yaitu DCD atau string) sekarang. Waktu biasanya ditangani oleh objek atau int (jadi hanya kode tampilan yang perlu diperbarui).
Maciej Piechotka

Ya, maksud saya tepatnya. Y2K secara efektif membunuh gagasan mewakili tanggal sebagai string panjang tetap.
Stephen Jazdzewski

@Stephen: Tidak di dunia COBOL, tetapi untungnya ada beberapa implementasi COBOL di Unix / Linux.
David Thornley

@ David: Program COBOL adalah masalah Y2K untuk sebagian besar. Apakah sistem Linux / Unix, dari sudut pandang pengguna, pernah mengalami masalah Y2K? Jawaban sederhana untuk pertanyaan awal adalah tidak.
Stephen Jazdzewski

4
Poster tidak bertanya tentang masalah y2k; mereka bertanya tentang masalah y2k38, yang merupakan binatang yang sama sekali berbeda. Periksa en.wikipedia.org/wiki/Y2K38 untuk keterangannya.
Kevin M
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.