Anda mungkin ingat kepanikan seputar Y2K. Media mempunyai kesempatan untuk meramalkan keruntuhan global ketika jam menunjukkan pukul 2000. Namun meskipun banyak sistem lama yang diperbaiki pada saat itu, waktu yang berbeda masih terus berjalan di sebagian besar internet modern. Ini disebut Masalah Tahun 2038. Dan itu berakar pada cara bahasa pemrograman C menangani waktu.

Kebanyakan orang berasumsi bahwa masalahnya adalah sekitar dua digit tahun seperti Y2K. Tidak. Masalah intinya terletak lebih dalam pada kode. Khususnya, bagaimana program C menyimpan data tanggal.

Batas 32-Bit

Inilah realitas teknisnya. Pustaka waktu standar di C menggunakan bilangan bulat bertanda 4 byte untuk melacak waktu. Itu 32 bit. Format ini mendefinisikan “epoch time” yang dimulai pada 1 Januari 1970, pukul 12:00:00 UTC. Setiap detik setelah momen itu disimpan sebagai angka sederhana.

Misalnya, stempel waktu 919642718 mewakili 919 juta detik setelah periode tersebut. Itu jatuh pada tanggal 21 Februari 1999. Ini berguna karena mengurangkan satu stempel waktu dari yang lain memberi Anda detik yang tepat antara dua peristiwa. Perpustakaan kemudian mengubah detik tersebut menjadi menit, jam, atau tahun.

Tapi ada langit-langit yang keras.

Integer 32-bit bertanda memiliki nilai maksimum 2.147.483.647. Ketika penghitung tersebut mencapai nol detik setelah tanggal 1 Januari 1970, penghitung tersebut akan terbalik.

Rollover itu terjadi pada 19 Januari 2038.

Setelah tanggal tersebut, bilangan bulat meluap. Ini beralih ke angka negatif. Bagi sistem yang mengandalkan format ini, nilai negatif tersebut adalah tanggal yang tidak valid. Ini sebenarnya merupakan kesalahan dalam matriks untuk perangkat lunak apa pun yang belum diperbarui.

Mengapa Ini Lebih Mudah Dibandingkan Y2K

Kabar baiknya? Memperbaiki masalah ini tidaklah sekacau mimpi buruk mainframe di akhir tahun 90an.

Di Y2K, banyak sistem tidak menstandarkan cara mereka menyimpan tanggal. Ada yang menggunakan MM-DD-YY. Lainnya menggunakan YY-MM-DD. Kurangnya format universal berarti pengembang harus mencari kode di setiap aplikasi dan mengubah logika tanggal secara manual.

Masalah Tahun 2038 lebih bersih.

Pustaka waktu standar merangkum seluruh proses ketepatan waktu. Ini mendefinisikan jenis dan fungsinya sendiri. Jadi, program yang ditulis dengan baik dapat dikompilasi ulang dengan mudah. Insinyur hanya perlu menukar perpustakaan dengan versi yang menggunakan ukuran byte lebih besar.

Misalnya, berpindah dari bilangan bulat 4-byte ke bilangan bulat 8-byte akan memperluas jangkauan secara signifikan. Integer bertanda 8-byte dapat menghitung jauh melampaui 2038 tanpa meluap. Ini adalah pembaruan perangkat lunak. Bukan pengganti perangkat keras. Bukan penulisan ulang kode. Pertukaran perpustakaan.

Windows dan Mac: Timer Berbeda, Masalah Berbeda

Tidak semua sistem menggunakan format C 32-bit. Sistem operasi yang berbeda memiliki keunikannya masing-masing.

Windows NT, misalnya, menggunakan bilangan bulat 64-bit. Ini melacak waktu dalam peningkatan 100 nanodetik. Namun penghitungannya dimulai dari 1 Januari 1601, bukan 1970. Hal ini membuat tanggal luapan air semakin jauh. Windows kemungkinan akan mencapai batasnya sekitar tahun 2184.

Apple telah mengambil pendekatan berbeda. Menurut dokumentasi Apple sendiri, macOS disusun untuk tetap berlaku hingga tahun 29.940. Itu kira-kira 27.000 tahun dari sekarang. Jadi jika Anda menggunakan Mac, Anda tidak perlu khawatir kalender Anda akan mogok pada tahun 2038.

Siapa Lagi yang Berisiko?

Sistem berbasis Unix adalah perhatian utama. Tapi mereka tidak sendirian.

Sistem tertanam juga rentan. Banyak perangkat IoT, pengontrol industri, dan server database lama mengandalkan format waktu 32-bit yang sama. Jika belum diperbarui, mereka akan mulai salah mengartikan tanggal setelah 19 Januari 2038.

Perbaikan jangka pendek mungkin melibatkan patching perangkat lunak untuk menangani nilai waktu negatif dengan benar. Tapi itu perban. Solusi permanen memerlukan peningkatan ke format waktu 64-bit.

Pertanyaannya bukanlah apakah kode tersebut akan rusak. Tergantung apakah sistem yang menjalankan kode tersebut akan diperbarui sebelum waktu habis.

Sebagian besar infrastruktur yang kami andalkan sudah bergerak menuju ketepatan waktu 64-bit. Namun tidak semuanya demikian. Server lama. Peralatan industri warisan. Beberapa logika tertanam. Itu adalah mata rantai yang lemah.

Ketika tanggal 19 Januari 2038 tiba, jam akan mencapai batasnya. Untuk beberapa sistem, ini bukan peristiwa. Bagi yang lain, ini akan menjadi perhentian yang sulit. Tidak akan ada banyak waktu untuk menambal kode jika Anda menunggu hingga menit terakhir.