Saya sedikit khawatir tentang ini. Ini disebut "masalah tahun 2038". Apakah kernel Linux atau Ubuntu siap menangani tanggal setelah ini, pada 12.04?
Saya sedikit khawatir tentang ini. Ini disebut "masalah tahun 2038". Apakah kernel Linux atau Ubuntu siap menangani tanggal setelah ini, pada 12.04?
Jawaban:
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:
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_t
bilangan 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_year
menggunakan 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 selaintime_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:
Jadi tidak ada yang perlu dikhawatirkan tentang masalah ini.
Lebih tentang:
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
ctime
?
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.
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.