Drama Y2K38 bắt đầu nóng dần khi anh em Reddit thi nhau khoe tem 'Y2K38 Compliant' dán tủ server. Nhìn tấu hài thế thôi nhưng cũng là lời cảnh tỉnh cho đống legacy code đấy.

Y2K ngày xưa làm giang hồ một phen xám hồn, giờ chuẩn bị tinh thần đón sóng Y2K38 đi các đồng đạo. Hôm rày lướt r/homelab thấy mấy thanh niên thi nhau khoe cái tem "bảo chứng" xịn xò này mà phì cười, tiện đem lên C4F chém gió với anh em.
Nói nhanh cho anh em nào lười đào lại kiến thức đại cương: Unix time (hay Epoch time) đếm số giây trôi qua kể từ ngày 1/1/1970. Ở mấy hệ thống đời cũ, con số này được lưu bằng kiểu dữ liệu 32-bit signed integer. Vấn đề là giới hạn của thằng 32-bit này chỉ đến 2,147,483,647 thôi.
Cứ tà tà mà đếm, thì đúng vào lúc 03:14:07 UTC ngày 19/01/2038, biến này sẽ bị tràn (integer overflow) và quay ngoắt về số âm. Lúc đấy, máy tính sẽ ngáo ngơ tưởng mình đang du hành thời gian về năm 1901. Kết quả? Lỗi logic búa xua, database toang, sập máy chủ, thiết bị nhúng lăn ra chết lâm sàng.
Thế là một thanh niên vui tính trên Reddit đã thiết kế hẳn một cái tem ghi chữ "Y2K38 COMPLIANT" (Đã tương thích Y2K38) rồi dán chình ình lên cái tủ rack server ở nhà để khịa. Ý là "server tao up 64-bit rồi, đ*o sợ tận thế nhé".
Bài post hút cả đống upvote với bình luận cực mặn từ dân tình:
.svg. Làm gì? Để in ra dán lên laptop, dán tủ lạnh, dán lên trán cho nó ngầu chứ sao. Nhìn uy tín vãi chưởng.Anh em nhìn cái tem dán tủ rack thì thấy tấu hài vậy thôi, chứ đi làm thực tế thì nó là một câu chuyện thấm đẫm nước mắt đấy.
Giờ code mới thì đa số anh em dùng stack hiện đại, auto 64-bit cmnr, chạy mượt. Nhưng đời đ*o như mơ, vớ phải mấy cái project maintain hệ thống di sản (legacy) của mấy anh ngân hàng, viễn thông hay y tế xài C/C++ đồ cổ thì khóc bằng tiếng Mán. Chỗ nào mà định nghĩa time_t là 32-bit thì lo mà rà soát lại dần đi.
Đừng có cái tư duy "2038 tao nghỉ hưu cmnr, để thằng khác lo". Nghiệp quật đấy. Code sạch, quy hoạch data đàng hoàng từ bây giờ để con cháu đời sau nó không lôi gia phả mình ra tế.