หากใครทันกับสมัยปัญหา Y2K ที่บรรดาซอฟต์แวร์ต่างๆ นั้นถูกพัฒนาด้วยการระบุจำนวนปีจากการใช้เลขท้าย 2 หลักของค.ศ. เพื่อรองรับการระบุเวลาในช่วง 1900 – 2000 นั้น ปัญหานี้อาจเกิดขึ้นอีกครั้งในปี 2038 จากการระบุเวลาด้วย Signed 32-bit Integer แทน โดยปัญหานี้มีชื่อเรียกกันว่า Y2038 และทางทีมพัฒนา Linux Kernel ก็กำลังทำการแก้ไขปัญหาดังกล่าวอยู่
การใช้ Unix Signed 32-bit Integer ในการเก็บเวลานี้จะทำให้เวลาสุดท้ายที่ตัวแปรสามารถแสดงผลได้ถูกต้องคือเวลา 03:14:07 UTC ของวันอังคารที่ 19 มกราคม 2038 หรือคือค่า 2^31 – 1 นับวินาทีแรกเริ่มต้นจาก 1 มกราคม 1970 นั่นเอง ซึ่งวินาทีถัดไปที่เลยจากวินาทีสุดท้ายดังกล่าวนั้นจะเป็นค่าเวลาติดลบ และถูกระบบตีความว่าเป็นวันที่ 13 ธันวาคม 1901 เป็นปัญหาที่เกิดจาก Integer Overflow นั่นเอง โดยใน Wikipedia นั้นได้รายงานว่าระบบที่น่าจะได้รับผลกระทบกับปัญหานี้หลักๆ คือเหล่าบรรดา Embedded Systems ที่ถูกพัฒนามาก่อนหน้าและไม่สามารถทำการอัปเดตแก้ไขได้โดยง่าย รวมถึง Android บางระบบนั้นก็สามารถแครชและ Restart ไม่ขึ้นหากถูกตั้งเวลาเอาไว้เป็นช่วงที่มีปัญหา Y2038 ดังกล่าว
ใน Security Update ของ Linux 4.15 Kernel นี้ได้มีการ Merge โค้ดในส่วนที่แก้ไขปัญหา Y2038 เพิ่มเติมจำนวนมาก เพราะปัญหานี้ส่งผลกระทบต่อระบบ Timestamp ในระบบย่อยที่หลากหลาย ซึ่งแนวทางหนึ่งที่ถูกนำมาใช้แก้ปัญหานี้ก็คือการยกเลิกการใช้คำสั่ง do_gettimeofday() ที่ถูกประกาศ deprecate ไปแล้ว มาใช้คำสั่ง ktime_get_real_ts64() หรือ ktime_get_seconds() แทน
ใครพัฒนาโปรแกรมอะไรที่มีส่วนข้องเกี่ยวกับเวลา ก็อย่าลืมจัดการกับปัญหาดังกล่าวที่อาจเกิดขึ้นด้วยนะครับ
ที่มา: https://www.phoronix.com/scan.php?page=news_item&px=Linux-4.15-Year-2038-Fixes