Baru-baru ini sebuah bug besar di iOS telah ditemukan, yaitu bug “1 Januari 1970”. Bug tersebut dapat menyebabkan gagal booting pada perangkat-perangkat 64-bit hanya dengan mengatur tanggal dan tahun secara manual ke 1 januari 1970.

Tom Scott (@tomscott) yang merupakan seorang YouTuber dan programmer memberikan penjelasan soal bug tanggal (1/1/1970) di iOS ini. Silakan disimak (English).


Jadi, mengapa ini bisa terjadi?

Tanggal 1 Januari 1970 adalah hari spesial untuk komputer. Terutama komputer yang menggunakan sistem operasi Unix dan turunannya, serta Unix-like.

Bug ini berhubungan dengan yang namanya “Unix time“. Unix time adalah cara atau metode pelacakan atau penghitungan waktu yang digunakan pada waktu itu, yang direpresentasikan sebagai angka (int / integer). Unix time menghitung jumlah detik yang telah berlalu sejak 1 Januari 1970 dan cara ini sudah digunakan secara universal pada semua komputer hingga sekarang.

Jadi, dengan memundurkan tanggal secara manual ke 1 Januari 1970 berarti memundurkan penghitungan waktu Unix time sehingga nilainya menjadi 0.

Nah, kenapa bug ini muncul hanya pada perangkat 64-bit saja?

Penjelasan yang paling mungkin adalah karena sistem perhitungan tanggal pada iOS membuat nilai Unix time ini negatif (0-1) setelah diubah ke 1 Januari 1970. Tapi entah karena alasan apa (di iOS) nilai negatif tidak bisa disimpan, maka nilai integer yang negatif ini akan kembali ke nilai maksimumnya.

Sebagai contoh sederhananya, 4-bit (0000) hanya bisa menampung nilai maksimal 15 (1111). Setelah nilai maksimum tercapai, kita tidak bisa lagi menambah nilainya. Ketika dipaksa 15+1 maka nilainya akan kembali ke 0 atau 0000 (overflow).

Pada komputer 32-bit nilai maksimum yang bisa ditampung adalah 2,147,483,647, dan kalau diubah ke Unix time maka hasilnya adalah 19 January 2038. Masih normal bukan? Yup, itu alasannya kenapa perangkat 32-bit kebal dengan bug ini.

Year 2038 Problem

Year 2038 Problem

Kalau pada perangkat 32-bit 0-1 menghasilkan 2,147,483,647 sebagai nilai maksimum, maka pada perangkat 64-bit beda lagi. Sistem opeasi yang berjalan pada perangkat 64-bit menyimpan nilai Unix time ini dalam format integer 64-bit yang nilainya jauh lebih besar dibanding integer 32-bit.

Tom Scott - iOS bug

Dan apa yang terjadi kalau nilai Unix time pada perangkat 64-bit menjadi negatif? Yup, akan kembali ke nilai maksimumnya, yaitu 9,223,372,036,854,775,807. Sedangkan kalau dikonversi ke Unix time, nilai tersebut menghasilkan tanggal 12/04/292277026596 atau 4 Desember 292277026596 (292 milyar tahun lagi). Inilah alasan kenapa bug ini hanya muncul pada perangkat 64-bit saja.

*Kalau ada yang mau menambahkan atau mengoreksi silakan :)*