ปัญหา "The Year 2038 Problem" ที่คนทำซอฟต์แวร์ต้องเตรียมรับมือ

   By: DH Team

   อัปเดตล่าสุด March 20, 2024

ปัญหา "The Year 2038 Problem" ที่คนทำซอฟต์แวร์ต้องเตรียมรับมือ

จำกันได้ไหมครับกับ "ปัญหาปี 2000" (Y2K) ในช่วงปลายยุค 90s? หรือปัญหาบั๊กปี 2000 เกิดจากในอดีตโปรแกรมคอมพิวเตอร์ถูกเขียนด้วยการประหยัดหน่วยความจำโดยใช้เพียง 2 หลักสุดท้ายของปีค.ศ. เช่น 98 แทนปี 1998 เมื่อถึงปี 2000 ระบบจึงอาจสับสนว่า 00 หมายถึงปี 1900 หรือ 2000 ปัญหานี้ส่งผลให้คอมพิวเตอร์และอุปกรณ์ที่ใช้ชิพคอมพิวเตอร์หลายประเภททำงานผิดพลาด


Year 2038 Problem คืออะไร ?

ปัญหา ปี 2038 (Year 2038 Problem) หรือที่รู้จักกันในชื่อ "Unix Millennium Bug"

เป็นปัญหาที่คล้ายกับปัญหา Y2K แต่เกิดขึ้นกับระบบปฏิบัติการยูนิกซ์และระบบอื่น ๆ ที่ใช้เวลาจำนวนเต็ม 32 บิต โดยนับจำนวนวินาทีตั้งแต่เวลา 00:00:00 UTC ของวันที่ 1 มกราคม ค.ศ. 1970

จำนวนวินาทีสูงสุดที่ระบบ 32 บิตสามารถจัดเก็บได้คือ 2,147,483,647 วินาที ซึ่งจะหมดลงในวันที่ 19 มกราคม 2038 เวลา 03:14:07 UTC หลังจากนั้นตัวนับวินาทีจะกลับไปนับใหม่จากศูนย์อีกครั้ง ส่งผลให้โปรแกรมที่พึ่งพาการนับวินาทีทำงานผิดพลาดทันที


สาเหตุของปัญหา

ระบบเวลาของคอมพิวเตอร์แบบยูนิกซ์ (Unix) ส่วนใหญ่ใช้ตัวเลข 32 บิต บันทึกจำนวนวินาทีตั้งแต่วันที่ 1 มกราคม 1970 (Unix Epoch) โดยตัวเลข 32 บิต มีขีดจำกัดในการเก็บค่าได้สูงสุด 2,147,483,647

ดังนั้นเมื่อเวลาของระบบเกินค่าดังกล่าว (คาดว่าจะถึงวันที่ 19 มกราคม 2038 เวลา 3:14:07 UTC) จะเกิดการ Overflow ทำให้ค่าผิดเพี้ยนเป็นค่าลบ ส่งผลกระทบต่อการทำงานของระบบซอฟต์แวร์


ผลกระทบ

ปัญหานี้จะส่งผลกระทบต่อระบบสำคัญต่างๆ ที่ยังคงใช้งานยูนิกซ์ เช่น ระบบการจัดการฐานข้อมูล, การประมวลผลธุรกรรม, การทำงานของซอฟต์แวร์สำคัญ เป็นต้น 

ระบบฝังตัว (Embedded System) และระบบเก่ามีความเสี่ยงค่อนช้างสูง ตัวอย่างเช่น ระบบโรงไฟฟ้า นิวเคลียร์ เครื่องบิน อุปกรณ์การแพทย์ อุปกรณ์โทรคมนาคม เครื่องใช้ไฟฟ้า เป็นต้น

และระบบปฏิบัติการบางรุ่นที่ยังใช้ตัวเลข 32 บิตในการบันทึกเวลา โดยฐานข้อมูลบางตัวที่ใช้ฟิลด์เวลา 32 บิต ก็ได้รับผลกระทบเช่นกัน

นอกจากนี้ยังรวมไปถึง

  • ระบบไฟล์บางรุ่นที่ใช้ตัวเลข 32 บิตบันทึกเวลาใน Inode
  • อุปกรณ์เครือข่ายที่ใช้เวลามีรูปแบบ 32 บิต
  • ระบบธนาคารและการเงินที่ใช้เวลามีรูปแบบ 32 บิต


YouTube ช่อง PlanetScale อธิบายไว้ได้น่าสนใจในวิดีโอ "Your database will break in 2038"


Image source: YouTube PlanetScale


แนวทางการแก้ไข

  • ตรวจสอบและทดสอบระบบเพื่อหาจุดอ่อน
  • เปลี่ยนระบบเป็นแบบ 64 บิต เพื่อรองรับช่วงเวลาที่กว้างขึ้น
  • ใช้รูปแบบเวลาอื่นที่เหมาะสม เช่น ISO 8601
  • อัพเกรดซอฟต์แวร์ เฟิร์มแวร์ และฮาร์ดแวร์


อ้างอิง


เปิดโลกการเขียนโปรแกรมและ Software Development ด้วย online courses ที่จะพาคุณอัพสกิลและพัฒนาสู่การเป็นมืออาชีพ เรียนออนไลน์ เรียนจากที่ไหนก็ได้ พร้อมซัพพอร์ตหลังเรียน

เรียนเขียนโปรแกรม