Akankah jam Linux gagal pada 19 Januari 2038 3:14:08?

23

Saya sedikit khawatir tentang ini. Ini disebut "masalah tahun 2038". Apakah kernel Linux atau Ubuntu siap menangani tanggal setelah ini, pada 12.04?

ThePiercingPrince
sumber
8
Sudahkah Anda mencoba menyetel jam Anda menjadi sesuatu seperti 19 Januari 2038 3:14:07 dan tunggu sebentar?
gertvdijk
2
Mari kita asumsikan masalah ini ada dan belum diperbaiki. 12,04 tidak akan didukung selamanya, sehingga Anda dan semua orang lainnya akan berada pada distribusi yang diperbarui sampai ini terjadi, karena ada bertahun-tahun di antaranya. Memperbarui itu mudah. Salah satu pembaruan ini pasti akan berisi perbaikan. Jadi tidak ada alasan untuk khawatir, tetapi ini memang pertanyaan yang menarik.
verpfeilt
3
Bug sudah diperbaiki.
ThePiercingPrince
Jam sistem tidak akan (tidak pada kernel yang cukup baru); beberapa struktur data (dan program yang menggunakannya) mungkin menunjukkan perilaku yang tidak normal. Menurut pendapat saya, ini akan menjadi masalah dengan perangkat yang disematkan - mereka cenderung menjalankan kode saat ini.
Piskvor
1
@ hmayag: Saya tidak berpikir "pemanggang roti," lebih seperti "pengontrol lampu lalu lintas." Hal-hal itu sedikit lebih kasar daripada elektronik tingkat konsumen, dan dapat dengan mudah melebihi umur itu (dengan penggantian bagian , tetapi mungkin tanpa upgrade) - IIRC, ada beberapa masalah dengan elektronik 1980-an seperti itu tepat setelah Y2K.
Piskvor

Jawaban:

13

Tidak, itu tidak akan gagal. Dalam kasus terburuk, dari sudut pandang seorang programmer itu akan bekerja seperti yang diharapkan: itu akan diatur ulang ke tanggal 1901-12-13 20:45:52:

masukkan deskripsi gambar di sini

Ini jika Anda tidak akan memperbarui distribusi Anda saat ini sampai ini terjadi. " Memperbarui itu mudah. ​​Salah satu pembaruan ini pasti akan berisi perbaikan. " Seperti kata chocobai .

Saya ingat bahwa itu adalah masalah / pertanyaan yang sama dengan mesin 16-bit sebelum tahun 2000 dan pada akhirnya tidak ada masalah.

Solusi dari Wikipedia:

Sebagian besar sistem operasi yang dirancang untuk berjalan pada perangkat keras 64-bit sudah menggunakan time_tbilangan bulat 64-bit yang sudah ditandatangani . Menggunakan nilai 64-bit yang ditandatangani memperkenalkan tanggal sampul baru yang lebih dari dua puluh kali lebih besar dari perkiraan usia alam semesta: sekitar 292 miliar tahun dari sekarang, pukul 15:30:08 pada hari Minggu, 4 Desember 292.277.026.596.596. Kemampuan untuk membuat perhitungan pada tanggal dibatasi oleh fakta bahwatm_yearmenggunakan nilai int 32 bit yang ditandatangani mulai tahun 1900 untuk tahun ini. Ini membatasi tahun ke maksimum 2.147.485.547 (2.147.483.647 + 1900). Meskipun ini memecahkan masalah untuk menjalankan program, itu tidak memecahkan masalah menyimpan nilai tanggal dalam file data biner, banyak di antaranya menggunakan format penyimpanan yang kaku. Itu juga tidak memecahkan masalah untuk program 32-bit yang berjalan di bawah lapisan kompatibilitas dan mungkin tidak memecahkan masalah untuk program yang salah menyimpan nilai waktu dalam variabel jenis selain time_t.

Saya menggunakan Ubuntu 13.04 pada 64-bit dan, karena penasaran, saya mengubah waktu secara manual menjadi 2038-01-19 03:13:00. Setelah 03:14:08 tidak ada yang terjadi:

Tanggal dan waktu sebelum 2038-01-19 03:14:08 Tanggal dan waktu setelah 2038-01-19 03:14:08

Jadi tidak ada yang perlu dikhawatirkan tentang masalah ini.

Lebih tentang:

Radu Rădeanu
sumber
9
Jika disetel ulang, gagal karena "gagal" maksud saya "tidak berfungsi atau bekerja salah".
ThePiercingPrince
1
@LinuxDistance Ini terjadi dari sudut pandang Anda. Tetapi dari sudut pandang seorang programmer itu akan bekerja seperti yang diharapkan: itu akan mengatur ulang . Itu sama dengan akhir kalender Maya: dunia tidak gagal karena ini.
Radu Rădeanu
10
Saya tidak setuju? dari sudut pandang seorang programmer jam tidak seharusnya diatur ulang, jadi itu akan gagal
Nanne
3
Diskusi dalam komentar-komentar ini tidak ada gunanya. Pertanyaannya adalah "Apakah kernel Linux atau Ubuntu siap menangani tanggal setelah ini?". Yah, itu tidak mampu menangani tanggal seperti itu, jadi gagal dalam konteks pertanyaan ini.
gertvdijk
2
@gertvdijk "Apakah kernel Linux " saat ini / aktual "atau Ubuntu siap menangani tanggal setelah ini?"
Radu Rădeanu
7

Anda dapat memeriksa apakah waktu komputer Anda akan macet dengan menggunakan skrip Perl berikut:

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

Jika komputer Anda baik-baik saja, Anda akan mendapatkan ini:

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

Jika komputer Anda seperti milik saya, komputer akan membungkus seperti ini:

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

Bisa juga melakukan ini:

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
SkylarMT
sumber
Saya pikir Anda sedang menguji Perl di sini dan bukan sistem operasi yang sebenarnya dalam inti. Atau apakah Anda, dengan penggunaan ctime?
gertvdijk
@ gertvdijk Yah, itu memberikan output pertama pada komputer yang ditambal, dan laptop Ubuntu saya memberikan yang kedua, sedangkan yang ketiga adalah dari server Debian saya. Saya sebenarnya tidak menulis kode, semuanya ada di Internet dalam bentuk yang persis sama.
SkylarMT
2
dikonfirmasi. jika Anda memiliki mesin 64 bit, maka ini akan baik-baik saja. Selain itu ... siapa di antara kita yang akan memiliki mesin 32 bit saja yang masih berjalan di tahun 2038?
jrg
1
Saya pergi mencari ini untuk menggambarkan masalah 2038 kepada rekan kerja, dan 2 tahun setelah membuat komentar di atas, saya memiliki sedikit keraguan bahwa pada tahun 2038 kita akan memiliki mesin 32 bit yang akan gagal. Ah, optimisme muda.
jrg
@ James, mungkin beberapa tanpa disadari. Mungkin akan ada tertanam 32 bit Linux di perangkat IOT sekitar itu, tidak ditambal. Akhir zaman? Tidak. Ada masalah di beberapa tempat? Pastinya.
Prof. Falken mendukung Monica
3

Saya menulis dan menerbitkan makalah pendek tentang ini pada tahun 1996. Ini termasuk program C pendek untuk menunjukkannya. Saya juga punya email dengan David Mills tentang masalah serupa dengan NTP - Network Time Protocol. Pada laptop Ubuntu 14.04 64-bit saya, kode perl tidak menunjukkan batasan sehingga lib 64-bit yang mendasarinya harus dimodifikasi.

Namun, menjalankan kode pengujian saya yang lama memang menunjukkan waktu yang terbungkus kembali ke UNIX Epoch. Jadi tidak semua baik-baik saja dengan kode 32-bit dari masa lalu.

Makalah saya tahun 1996, Waktu UNIX akan habis pada tahun 2038! telah ada di situs web saya sejak sekitar tahun 2000. Varian yang berjudul "Waktu UNIX" ini diterbitkan pada tahun 1998 dalam "Praktik Terbaik Tahun 2000 untuk Komputasi Y2K Milenium" ISBN 0136465064.

oldunixguy
sumber
2

Linux 64-bit sudah siap, setidaknya jika Anda berbicara tentang antarmuka inti OS (aplikasi individual tentu saja masih bisa mengacaukannya). time_t secara tradisional didefinisikan sebagai alias untuk "long" dan "long" pada 64-bit linux adalah 64-bit.

Situasi untuk Linux 32-bit (dan lapisan kompatibilitas untuk binari 32-bit di Linux 64-bit) jauh lebih tidak menyenangkan. Ini rusak dan memperbaikinya tanpa merusak semua binari yang ada bukanlah tugas yang mudah. Sejumlah besar API menggunakan time_t dan dalam banyak kasus, ia disematkan sebagai bagian dari struktur data, jadi API tidak hanya harus diduplikasi, tetapi juga struktur data tempat mereka bekerja.

Bahkan jika ada beberapa tingkat kompatibilitas mundur semua binari yang ingin mendapatkan waktu yang benar perlu dibangun kembali untuk menggunakan antarmuka waktu 64-bit yang baru.

Telah ada beberapa pekerjaan yang dilakukan (lihat misalnya https://lwn.net/Articles/643234/ dan http://www.sourceware.org/ml/libc-alpha/2015-10/msg00893.html ) tetapi afaict kami masih jauh dari solusi lengkap. Tidak jelas apakah akan ada tujuan umum distribusi 32-bit yang aman Y2K38.

Peter Green
sumber