6 điểm bởi xguru 2021-12-30 | 1 bình luận | Chia sẻ qua WhatsApp
  • Sau 2038-01-09 3:14:07 UTC, time_t 32-bit sẽ bị tràn

  • Nhân Linux đã chuyển nội bộ sang 64-bit từ vài năm trước, còn Alpine đã đổi sang time_t 64-bit từ bản 3.13

  • GNU glibc bắt đầu hỗ trợ time_t 64-bit từ 2.34, nhưng cách tiếp cận về mặt kỹ thuật vẫn chưa hoàn chỉnh

  • musl và các triển khai thư viện C UNIX khác luôn dùng time_t 64-bit cho mã mới, đồng thời cung cấp các stub tương thích cho mã 32-bit cũ

→ nhờ đó theo thời gian sẽ tự động trở nên tương thích Y2038

  • Microsoft còn tiến thêm một bước trong msvcrt khi mặc định dùng time_t 64-bit, và nếu dùng macro _USE_32BIT_TIME_T thì vẫn có thể truy cập các hàm 32-bit cũ

  • GNU glibc lại chọn đúng hướng ngược lại với hai cách trên

→ phải yêu cầu tường minh bằng -D_TIME_BITS=64 thì mới dùng được

→ có thể một ngày nào đó mặc định này sẽ thay đổi, nhưng đến nay vẫn hoàn toàn chưa làm vậy

⇨ tương tự, -D_FILE_OFFSET_BITS=64 cần để xử lý các tệp lớn hơn 2GiB đến giờ vẫn phải khai báo tường minh

→ ngoài ra trên hệ thống 32-bit thì không được build với -D_TIME_BITS=64 (tức là không thể tương thích Y2038)

1 bình luận

 
xguru 2021-12-30

Vẫn còn khoảng 16 năm nữa, nhưng Linux được dùng rất nhiều cả trên những thiết bị không được thay thế trong thời gian dài, nên..