באג 2038

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
אנימציה הממחישה איך יחזור התאריך לשנת 1901 ב-19 בינואר 2038 בשעה 03:14:08 UTC

באג 2038 הוא באג-מחשבים דמוי "באג 2000", שעלול לגרום לתקלות בתוכנות המשתמשות בשיטת POSIX לחישוב הזמן. הבאג משפיע על תוכנות המחזיקות את הזמן במשתנה מסוג מספר באורך 32 סיביות עם סימן (Signed 32bit Integer) ומפרשות את ערך המשתנה כזמן שחלף מאז 1 בינואר 1970 בחצות.

מרבית מערכות היוניקס המותאמות למחשבי 32 ביט מתייחסות לזמן בצורה זו, לכן לעתים נהוג לכנות את הבעיה "באג המילניום של יוניקס". אף על פי כן, בעיה זו צפויה להתרחש בכל המערכות המשתמשות בשיטה זו.

הסבר[עריכת קוד מקור | עריכה]

מרבית לוחות האם סופרים את הזמן כזמן שחלף מאז 1 בינואר 1970 בחצות ומְחשבים את השעה ברגע נתון בהתאם. במערכות 32 ביט, הזמן שחלף מוכנס בדרך כלל לתוך משתנה מסוג מספר באורך 32 סיביות עם סימן (Signed 32bit Integer). הזמן המרבי שניתן לייצג בשיטה זאת הוא 2,147,483,647 שניות (שחלפו מאז 1 בינואר 1970 בחצות), כלומר עד 19 בינואר 2038. לאחר מכן, על פי שיטת המשלים ל-2 (ייצוג מספרים עם סימן) ערך המשתנה יהיה 2,147,483,648- (המקביל לדצמבר 1901).

המועד ייצוג המספר בזיכרון (בבסיס 2) ייצוג המספר בזיכרון (בבסיס 10)
לפני 11111111 11111111 11111111 01111111 2,147,483,647
אחרי 00000000 00000000 00000000 10000000 2,147,483,648-

פתרונות[עריכת קוד מקור | עריכה]

אין פתרון קל או מיידי עבור מערכות קיימות. שינוי הגדרת משתנה הזמן במערכות אלה למשתנה באורך 64 ביט יגרום לבעיית תאימות לאחור בכל האובייקטים המשתמשים בזמן במערכות אלה. שינוי המשתנה למשתנה ללא סימן (Unsigned) ידחה את הבעיה לשנת 2106 אך יגרום לבעיות תאימות לאחור במערכות המחשבות הפרשי זמנים.

רוב מערכות ההפעלה המיועדות למחשבי 64 ביט כבר משתמשות במשתנה 64 ביט לאחסון הזמן שלהן. שימוש במשתנה כזה פותר את הבעיה, אך מערכות 32 ביט רבות מותקנות בשוק, חלקן במערכות משובצות מחשב, ואין ודאות שהן יוחלפו עד לשנת 2038. בנוסף, מערכות המחשבות אירועים עתידיים ייתקלו בבאג לפני התאריך האמור, כאשר ינסו לחשב תאריכים שחלים לאחריו.

אף על פי שבדרך כלל אורך החיים של מחשב הוא קצר (לרוב 24-36 חודשים), הדבר נכון בעיקר למחשבים אישיים ושרתים. קיימים מחשבים רבים, שאורך החיים שלהם הוא כאורך החיים של המערכת אותה הם משרתים. כך למשל, ייתכן כי מערכות השקיה ומערכות שליטה ברמזורים (שאין שום צורך אמיתי שיהיה בהם שעון) לא יוחלפו עד לתאריך האמור.

ראו גם[עריכת קוד מקור | עריכה]