Vấn đề năm 2038, còn được gọi là Unix Epochalypse, đe dọa làm sập các hệ thống trên toàn thế giới khi bộ đếm thời gian 32-bit tràn số vào ngày 19 tháng 1 năm 2038. Khác với việc vội vã vào phút chót để sửa lỗi Y2K, Debian đang hành động chủ động bằng cách chuyển sang biểu diễn thời gian 64-bit trong bản phát hành Debian 13 Trixie sắp tới. Động thái này ảnh hưởng đến hàng nghìn gói phần mềm và đại diện cho một trong những thay đổi quan trọng nhất để giải quyết cuộc khủng hoảng kỹ thuật đang đến gần.
Hệ thống thời gian Unix đếm giây kể từ ngày 1 tháng 1 năm 1970, sử dụng số nguyên có dấu 32-bit. Điều này sẽ tràn số chính xác lúc 03:14:07 UTC vào ngày 19 tháng 1 năm 2038, có thể khiến các hệ thống nghĩ rằng ngày tháng đã quay lại năm 1901. Với chưa đầy 15 năm còn lại, thời gian đang trôi qua đối với hàng triệu thiết bị đang được sử dụng ngày nay.
Dòng thời gian Vấn đề 2038
- Ngày hiện tại: 28 tháng 7, 2025
- Ngày khủng hoảng: 19 tháng 1, 2038 lúc 03:14:07 UTC
- Thời gian còn lại: Ít hơn 13 năm
- Các hệ thống bị ảnh hưởng: Bất kỳ hệ thống 32-bit nào sử dụng định dạng thời gian Unix
Nỗ Lực Kỹ Thuật Khổng Lồ Trải Rộng 6.429 Gói
Các nhà phát triển Debian phát hiện biến time_t rải rác khắp 6.429 gói trong bản phân phối của họ. Đây không chỉ là một thao tác tìm và thay thế đơn giản. Thay đổi này đòi hỏi phải phá vỡ giao diện nhị phân ứng dụng (ABI) cho các thư viện bị ảnh hưởng, có nghĩa là tất cả phần mềm liên quan phải được cập nhật đồng thời để tránh sự cố và vấn đề tương thích.
Thách thức kỹ thuật mở rộng ra ngoài việc chỉ thay đổi một kiểu dữ liệu. Các cuộc thảo luận cộng đồng tiết lộ rằng nhiều nhà phát triển đã sử dụng sai số nguyên thông thường thay vì kiểu time_t phù hợp cho các giá trị thời gian, tạo thêm công việc để theo dõi và sửa chữa những trường hợp này. OpenBSD đã tiên phong trong quá trình chuyển đổi này từ năm 2014, giúp xác định các vấn đề trong phần mềm mã nguồn mở mà Debian có thể học hỏi.
time_t: Một kiểu dữ liệu trong các ngôn ngữ lập trình đại diện cho các giá trị thời gian, thường là số giây kể từ ngày 1 tháng 1 năm 1970
Các thay đổi trong Debian 13 "Trixie"
- Các gói bị ảnh hưởng: 6.429 gói chứa biến time_t
- Kiến trúc với time 64-bit: Tất cả trừ i386 và hurd-i386
- Phá vỡ ABI: Yêu cầu cập nhật đồng thời tất cả các thư viện bị ảnh hưởng
- Hỗ trợ Legacy: i386 duy trì time_t 32-bit để tương thích
Quyết Định Chiến Lược Để Nguyên Kiến Trúc i386
Debian đã đưa ra lựa chọn gây tranh cãi là loại trừ kiến trúc i386 (x86 32-bit) khỏi quá trình chuyển đổi này. Mặc dù điều này có thể có vẻ phản trực giác, quyết định này phản ánh thực tế về cách i386 được sử dụng ngày nay. Kiến trúc này chủ yếu phục vụ để chạy các ứng dụng 32-bit cũ trên các hệ thống 64-bit hiện đại, đặc biệt cho gaming và tương thích Wine.
Các thành viên cộng đồng lưu ý rằng việc phá vỡ ABI cho i386 sẽ gây ra nhiều vấn đề hơn là giải quyết, vì trường hợp sử dụng chính liên quan đến việc chạy các tệp nhị phân 32-bit hiện có mong đợi định dạng thời gian cũ. Người dùng Steam và những người đam mê máy tính retro phụ thuộc rất nhiều vào lớp tương thích này. Đối với những người cần hỗ trợ thời gian 64-bit trên phần cứng x86 32-bit, Debian có kế hoạch có thể giới thiệu một biến thể kiến trúc i686 mới.
ABI (Application Binary Interface): Giao diện cấp thấp giữa các thành phần phần mềm xác định cách các hàm được gọi và dữ liệu được cấu trúc
Hệ Thống Nhúng Đối Mặt Với Tác Động Thực Tế
Vấn đề 2038 không chỉ là lý thuyết. Các thiết bị nhúng được vận chuyển ngày nay có khả năng vẫn sẽ chạy trong 15 năm nữa, tạo ra một quả bom hẹn giờ trong thiết bị công nghiệp, hệ thống ô tô và thiết bị IoT. Các cuộc thảo luận cộng đồng nhấn mạnh rằng nhiều hệ thống ARM nhúng và thiết bị 32-bit nhạy cảm về chi phí tiếp tục vận chuyển với các triển khai thời gian dễ bị tổn thương.
Có khá nhiều máy tính 32-bit nhạy cảm về chi phí vẫn còn ngoài kia, và vẫn đang vận chuyển các thiết bị mới (ô tô, IoT, TV, router, điều khiển nhà máy, giám sát/điều khiển tòa nhà, điện thoại Android giá rẻ).
Thiết bị y tế đưa ra một kịch bản đặc biệt đáng lo ngại, vì những hệ thống này thường chạy trong nhiều thập kỷ mà không có cập nhật. Cộng đồng kỳ vọng các cơ hội tư vấn đáng kể sẽ xuất hiện vào khoảng năm 2035 khi các tổ chức vội vã giải quyết các hệ thống mà họ đã quên.
Các triển khai trước đây
- OpenBSD: Chuyển sang thời gian 64-bit trong phiên bản 5.5 (2014)
- Linux Kernel: Thêm hỗ trợ thời gian 64-bit trong phiên bản 5.6
- Các hệ thống khác: Các biến thể BSD đã báo cáo các bản sửa lỗi upstream từ nhiều năm trước
Nhìn Ra Ngoài 2038
Trong khi thời gian 64-bit đẩy vấn đề xa vào tương lai, một số nhà phát triển đã suy nghĩ về các giải pháp dài hạn hơn nữa. Các hệ thống tệp hiện đại như ext4 sử dụng các định dạng dấu thời gian tinh vi với độ chính xác nanosecond, và có thảo luận về việc cuối cùng chuẩn hóa trên dấu thời gian 128-bit với 64 bit cho giây và 64 bit cho thời gian phân số.
Quá trình chuyển đổi cũng đặt ra câu hỏi về các giới hạn tùy ý khác trong hệ thống máy tính. Các thành viên cộng đồng đã khơi mào các cuộc thảo luận về giới hạn độ dài đối số dòng lệnh và các ràng buộc cũ khác có thể hưởng lợi từ các bản sửa chữa chủ động tương tự.
Hành động sớm của Debian về vấn đề 2038 chứng minh giá trị của việc giải quyết các vấn đề đã biết trước khi chúng trở nên quan trọng. Mặc dù ngoại lệ i386 có thể làm thất vọng một số người dùng, quá trình chuyển đổi tổng thể đại diện cho một bước quan trọng hướng tới việc ngăn chặn một thảm họa kỹ thuật số tiềm tàng có thể ảnh hưởng đến hàng triệu hệ thống trên toàn thế giới.
Tham khảo: Debian isn't waiting for 2038 to blow up, switches to 64-bit time for everything