glibc ยังไม่ได้ตั้งค่าให้รองรับ Y2038 เป็นค่าเริ่มต้น
(ariadne.space)-
หลังจาก 2038-01-09 3:14:07 UTC ไปแล้ว
time_tแบบ 32-bit จะเกิด overflow -
เคอร์เนลลินุกซ์ได้เปลี่ยนภายในเป็น 64-bit มาหลายปีก่อนแล้ว และ Alpine ก็เปลี่ยนเป็น
time_tแบบ 64-bit ตั้งแต่ 3.13 -
GNU glibc เริ่มรองรับ
time_tแบบ 64-bit ตั้งแต่ 2.34 แต่แนวทางการเข้าถึงยังไม่สมบูรณ์ทางเทคนิค -
muslและ implementation ของ UNIX C library อื่น ๆ ใช้time_tแบบ 64-bit เสมอในโค้ดใหม่ และมี compatibility stub สำหรับโค้ด 32-bit เดิม
→ ทำให้เมื่อเวลาผ่านไปสามารถเข้ากันได้กับ Y2038 โดยอัตโนมัติ
-
Microsoft ไปไกลกว่าใน
msvcrtโดยใช้time_tแบบ 64-bit เป็นค่าเริ่มต้น และหากใช้แมโคร_USE_32BIT_TIME_Tก็จะเข้าถึงฟังก์ชัน 32-bit แบบเดิมได้ -
GNU glibc ใช้วิธีที่ตรงกันข้ามกับสองแบบข้างต้นพอดี
→ ต้องระบุ -D_TIME_BITS=64 อย่างชัดเจนจึงจะใช้งานได้
→ สักวันหนึ่งค่าเริ่มต้นนี้อาจเปลี่ยนได้ แต่จนถึงตอนนี้ก็ยังไม่ทำเลย
⇨ ในทำนองเดียวกัน -D_FILE_OFFSET_BITS=64 ที่จำเป็นสำหรับจัดการไฟล์ใหญ่กว่า 2GiB ก็ยังต้องระบุเองอยู่
→ นอกจากนี้ บนระบบ 32-bit ก็ไม่ควร build ด้วย -D_TIME_BITS=64 (กล่าวคือ ไม่สามารถรองรับ Y2038 ได้)
1 ความคิดเห็น
ยังเหลือเวลาอีกราว 16 ปี แต่ลินุกซ์ก็ถูกใช้งานในอุปกรณ์จำนวนมากที่ไม่ได้ถูกเปลี่ยนบ่อยนักด้วย..