Sự cố năm 2038 là gì?
Thời điểm chuyển sang thế kỷ 21 cũng là lúc cả thế giới hoang mang về sự cố máy tính mang tên Y2K, để rồi cách khắc phục tạm thời lúc đó đã dẫn đến một sự cố máy tính khác mang tên Y2020 vào thời điểm bước sang năm mới 2020 vừa qua. Và sắp tới người ta tiên liệu sẽ còn có sự cố máy tính Y2038.
Sự cố năm 2038, hay còn được gọi là Y2038 hoặc Unix Y2K, là lỗi được dự báo trong các hệ thống phần mềm hiện nay liên quan đến dữ liệu thời gian tương tự như sự cố Y2K. Rất nhiều hệ thống đang đếm thời gian theo số giây trôi qua kể từ mốc là 0h00 ngày 1/1/1970 (theo giờ chuẩn quốc tế UTC) bằng dữ liệu số nguyên 32 bit có dấu.
Dung lượng dữ liệu của số nguyên 32 bit có dấu chỉ đủ duy trì đến 3h14’7’’ ngày 19/1/2038, vì nếu tính cụ thể ra thì số nguyên 32 bit có dấu chỉ đếm được 231 - 1 = 2.147.483.647 giây (khoảng gần 2,15 tỷ giây) sau mốc 0 năm 1970. Thời gian tràn bộ đếm của hệ thống sẽ gây ra những hệ quả khó lường cho hệ thống máy tính.
Đây là lỗi hệ thống được phát hiện trong hệ điều hành Unix. Trong đó các hệ thống nhúng nhiều khả năng sẽ bị ảnh hưởng bởi sự cố 2038. Khá nhiều phương tiện giao thông hiện nay dùng hệ thống nhúng, như xe hơi sử dụng hệ thống phanh chống bó cứng ABS, hệ thống cân bằng điện tử ESC/ESP, hay như máy bay sử dụng định vị GPS, dù tất nhiên những hệ thống nhúng này không liên quan mấy đến hệ thống thời gian.
Sự cố 2038 nhiều khả năng sẽ ảnh hưởng nhiều hơn đến hệ thống nhúng trong các thiết bị thông tin liên lạc như điện thoại, router hay thiết bị phát sóng WiFi. Đó là những thiết bị dựa vào dữ liệu ngày tháng thời gian chính xác trên những nền tảng tương đồng Unix.
Ngoài ra các cơ sở dữ liệu MySQL cũng dựa trên hàm thời gian bị ảnh hưởng bởi sự cố 2038. Một số phiên bản Mac OS X đời đầu cũng được cho rằng sẽ dính sự cố 2038.
Hiện nay chưa có giải pháp tổng thể cho sự cố 2038. Người ta có thể đổi sang số nguyên 32 bit không dấu để đếm thời gian, như vậy sẽ gia hạn được đến tận 6h28’15’’ ngày 7/2/2106, nhưng ngược lại sẽ làm ảnh hưởng đến những hệ thống lưu trữ dữ liệu thời gian trước năm 1970 vốn trước đây được biểu thị bằng số âm.
Trong khi đó tăng dung lượng lưu trữ thời gian lên 64 bit như các máy đời mới thì có thể tạo ra sự không tương thích với cấu trúc cũ.
Trên hình là minh họa khi số đếm nhị phân dần đến giới hạn tràn, và đến thời điểm 3h14’7’’ ngày 19/1/2038 thì bộ đếm thời gian của máy tính quay về năm 1901.
Sự cố Y2020 vừa qua diễn ra như thế nào?
Nếu tìm hiểu lại các sự cố máy tính trước đây, hơn 20 năm trước cả thế giới đồn thổi về sự cố Y2K như "ngày tận thế năm 2000" có thể khiến toàn bộ hệ thống máy tính sụp đổ, kéo theo nhiều hệ lụy như hệ thống giao thông đình trệ, các doanh nghiệp, ngân hàng, tổ chức chính phủ phải đóng cửa.
Nguyên nhân của Y2K đến từ cách lưu thời gian của máy tính. Cách đây hàng chục năm khi bộ nhớ còn đắt đỏ, các máy tính, vi mạch đồng hồ điện tử chỉ dùng 2 số cuối của năm thay vì 4 số để tiết kiệm dung lượng lưu trữ. Chẳng hạn như thay vì lưu 1998, máy tính ở thời điểm đó chỉ lưu đơn giản là 98.
Mọi thứ diễn ra bình thường trong thập kỷ 1960, 1970 nhưng đến cuối những năm 1990, các lập trình viên nhận ra máy tính không thể phân biệt năm 1900 với 2000 vì chúng đều có 2 số cuối là 00. Khi chuyển giao sang thế kỷ mới, mọi hoạt động sử dụng máy tính và vi mạch đồng hồ điện tử sẽ bị đảo lộn.
Hàng triệu người đã tham gia vào chiến dịch chạy đua để sửa lỗi hệ thống máy tính. Các lập trình viên có 2 lựa chọn để tránh sự cố Y2K: viết lại toàn bộ phần mềm, hoặc sử dụng phương pháp nhanh chóng hơn có tên "windowing" - dịch chuyển "cửa sổ" thời gian lên phía trước một chút.
Theo NewScientist, cách này khiến máy tính hiểu giá trị từ 00 đến 19 là năm 2000 đến 2019, còn lại là của thế kỷ trước. Vào năm 1999, có đến 80% máy tính sử dụng phương pháp này vì nhanh chóng, chi phí thấp. Lúc đó các lập trình viên cho rằng tất cả máy tính sẽ hỏng hoặc được nâng cấp sau 20 năm.
Một nguyên nhân nữa để dịch chuyển 20 năm là các lập trình viên chọn điểm mốc chính giữa tính từ năm 1970. Nhiều ngôn ngữ lập trình và máy tính đều chọn mốc thời gian khởi thủy để tính ngày giờ là 1/1/1970, còn gọi là "mốc thời gian Unix".
Nhưng thực tế đến nay vẫn còn những hệ thống máy tính cũ tồn tại và phát sinh sự cố có thể gọi là Y2020, hệ quả từ Y2K. Thời khắc bước sang năm 2020, các máy tính sử dụng "windowing" để khắc phục Y2K đã bị lỗi vì không thể phân biệt số 20 là năm 1920 hay 2020.
"Khắc phục lỗi trên những hệ thống cũ là cơn ác mộng bởi không phải ai viết ra mã còn ở đây. Các lập trình viên không nghĩ rằng hệ thống của họ vẫn được sử dụng đến năm 2020", Paul Lomax - kỹ sư từng khắc phục sự cố Y2K cho Vodafone, chia sẻ.
Theo ghi nhận, một số hóa đơn tiền điện trên thế giới đầu năm nay ghi ngày xuất là 1/1/1920, trong khi hàng chục nghìn máy bán vé đỗ xe tại Mỹ đã từ chối thanh toán bằng thẻ tín dụng vì sai ngày.
Tại Ba Lan, hàng nghìn máy tính tiền của công ty Novitus không thể in hóa đơn do sự cố tương tự. WWE 2K20, tựa game đấu vật cũng ngừng hoạt động trong ngày đầu năm mới, rất may khi nhà phát hành 2K Sports đã tung ra bản sửa lỗi sau đó.
Nhà phát triển phần mềm thu thập lỗi máy tính Splunk cũng đã nhận ra lỗi này từ tháng 11/2019 và khắc phục sau đó một tuần nên người dùng không bị ảnh hưởng.
Nhiều phần mềm và hệ thống máy tính tại các cơ sở y tế cũng được cho là bị ảnh hưởng bởi sự cố "hậu" Y2K, dù trả lời phỏng vấn thì hãng phát triển phần mềm y tế McKesson khẳng định không bị liên quan đến sự cố.
Đến nay chưa có thống kê cụ thể về mức độ ảnh hưởng của Y2020, cũng như cách khắc phục của những hệ thống bị ảnh hưởng (liệu có phải là dịch "cửa sổ" lên trước chút nữa?), dù có thể rằng phần lớn hệ thống máy tính cũ từ năm 2000 đã được thay thế mới.
Và nếu nhìn cảm quan thì có khả năng sự cố Y2038 sẽ có mức ảnh hưởng sâu rộng hơn Y2020.