באגים הקשורים לשעה ותאריך

מתוך ויקיפדיה, האנציקלופדיה החופשית

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

המקרה הידוע ביותר הוא באג 2000, אבל ידועים מקרים נוספים לאורך ההיסטוריה של המחשוב ובעתיד.

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

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

במהלך שנות ה-60 של המאה ה-20 במספר תוכנות היה נהוג לייצג את השנה באמצעות ספרה בודדת (0–9). כך היה יותר פשוט לרשום, למשל בשפות תכנות כמו COBOL. הבעיה אותרה ותוקנה עוד לפני 1970 ולא ידוע על נזק שנגרם כתוצאה מכך.

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

טווח השדה של השנה במערכת ההפעלה PDP-10 לא היה מסוגל להכיל יותר מידע החל מ-4 בינואר באותה שנה. נרשמו מספר תקלות. במטרה לפתור את הבעיה, פותח פורמט חלופי.[1]

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

מערכת ההפעלה OS/8 של PDP-8 משתמשת ב:

  • 4 ביטים לחודש.
  • 5 ביטים לתאריך שבו.
  • 3 ביטים לשנה.[2][3]

בעיה זו זוהתה כשפותח COS-310 (אנ'), ותאריכים נרשמו בצורה שונה.[4][5]

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

תוכנות מיינפריים מסוימות נכתבו כדי לקודד תאריכים כמספר הימים מאז 'תאריך אפס' ב-1 בינואר 1900, ואוחסנו כמספרים שלמים בינאריים בגודל 16 סיביות כולל סיבית סימן. ב-18 בספטמבר 1989, תוכנות אלה החלו להיכשל, כיוון שהתאריך היה בדיוק 32,768 (215) יום מאז תאריך האפס. ערכים ביום זה ואחריו אינם משתלבים במספר שלם של 16 סיביות בעל סיבית סימן, אלא מוצפים ומחזירים ערכים שליליים.

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

מערכת ההפעלה Domain/OS (אנ') שהתבססה על חישוב זמן לפי 4 מיקרושניות, שהתרחשה מאז 1 בינואר 1980, הגיעה לסיומה[דרושה הבהרה] ב-2 בנובמבר, עת הגיעה ל-47 סיביות, ובכך הופכת מערכות לא מתוקנות לבלתי שמישות.[6]

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

התרחשו מספר באגים בחודשים האחרונים של השנה, הקשורים בהתכוננות לקראת באג 2000, אך קיבלו פחות פרסום ממנו.

התהפכות ה-GPS הראשונה[עריכת קוד מקור | עריכה]

תאריכי GPS מפורשים כמספר שבוע ומספר יום בשבוע, כאשר מספר השבוע מועבר כערך של עשר סיביות. המשמעות היא שכל 1,024 שבועות (7,168 ימים או כ-19.6 שנים) לאחר יום ראשון, 6 בינואר 1980 (תחילת ה-GPS), התאריך יתאפס שוב למועד זה; באג זה התרחש בפעם הראשונה בשעה 23:59:47 ביום שבת, 21 באוגוסט 1999,[7] בפעם השנייה בשעה 23:59:42 UTC ב-6 באפריל 2019, והוא יקרה שוב ב-20 בנובמבר 2038.[8] כדי לטפל בדאגה זו, הודעות ניווט GPS מודרניות משתמשות בשדה של 13 סיביות, שחוזר על עצמו רק כל 8,192 שבועות (57,344 ימים או כ-157 שנה), ולא יחזור לאפס עד לשנת 2137 לערך.

9/9/99[עריכת קוד מקור | עריכה]

עמוד ראשיNuvola apps kpdf2.svg
ראו גם – מספר קסם (תכנות)

בתוכנות או מערכי נתונים רבים, "9/9/99" שימש כערך נוכל לציון תאריך שלא נפתר או כמסיים לציון שאין נתונים נוספים בערכה. הדבר העלה סוגיות עם הגעת התאריך הממשי שהוא מייצג, 9 בספטמבר 1999.[9][7]

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

לוח אלקטרוני בצרפת, שהוצג בכניסה לבית ספר בנאנט. כתוצאה מבאג 2000, הלוח הראה את התאריך "3 בינואר 1900".
Postscript-viewer-blue.svg ערך מורחב – באג 2000
עמוד ראשיNuvola apps kpdf2.svg
ראו גם – בעיית שנה מעוברת, בעיית שנת 1900

ייצוגים דו-ספרתיים של שנים[עריכת קוד מקור | עריכה]

בשנה זו נוצרה בעיה מאחר שעד אותה שנה ספרות השנה הוצגו באמצעות שתי ספרות בלבד, מטעמי נוחות וחיסכון. מפתחי הקודים מעשרות שנים מלפני כן תיקנו את הבעיה ובפועל לא נגרמו נזקים משמעותיים.[10]

בעיות המשך שנגרמו כתוצאה מתיקונים זמניים מסוימים לבאג 2000 צצו ויצוצו בנקודות שונות במאה ה-21. חלק מהתוכנות הותאמו לבאג 2000 על ידי המשך שימוש בשתי ספרות, אך בחירת שנה שרירותית שלפניה שנים אלו מתפרשות כ-20xx, ואחריה מתפרשות כ-19xx.[11]

לדוגמה, ייתכן שתוכנה שונתה כך שהיא מתייחסת לערכי שנה דו ספרתיים 00–68 כאל הכוונה לשנת 2000 עד 2068, ולערכים 69–99 כאל הכוונה ל-1969 עד 1999.[12] תוכנה כזו לא תוכל להתמודד נכון עם שנים מעבר ל-2068.

עבור יישומים הנדרשים לחשב שנת הלידה (או שנה אחרת בעבר), אלגוריתם כזה שימש זמן רב כדי להתגבר על בעיית שנת 1900, אך הוא לא הצליח לזהות אנשים מעל גיל 100.

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

ב-9 בספטמבר התרחש באג בסוגי פורמט קבצים בודדים מערכת ההפעלה Unix כאשר מספר השניות בזמן יוניקס הגיע למיליארד. הבאג יצר בעיה בסוגי קבצים שמשתמשים במספר "999,999,999" בשביל לייצג את סוף הקובץ.[13]

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

חלק מהמערכות נתקלו בבעיות כשנכנסה שנת 2010. בעיה זו כונתה על ידי חלק מהתקשורת כבאג "2010" או "Y2.01k".[14]

המקור העיקרי לבעיות היה בלבול בין קידוד מספרים בבסיס הקסדצימלי לבין עשרוני בקידוד בינארי. המספרים 0 עד 9 מקודדים הן בהקסדצימלי והן בבינארי כ-0016 עד 0916. אך המספר העשרוני 10 מקודד בהקסדצימלי כ-0A16 ובבינארי כ-1016. לפיכך 1016 בקידוד בינארי המתפרש בקידוד הקסדצימלי מייצג בטעות את המספר העשרוני 16.

לדוגמה, פרוטוקול ה-SMS משתמש בקידוד בינארי לתאריכים, כך שחלק מתוכנות הטלפון הנייד הציגו בצורה שגויה את תאריכי ההודעות בתור שנת 2016 במקום 2010. Windows Mobile הייתה התוכנה הראשונה שדווחה שהושפעה מהתקלות הללו; בחלק מהמקרים, Windows Mobile 6 ‏(WM6) שינה את התאריך של כל הודעת SMS נכנסת שנשלחה לאחר 1 בינואר 2010 משנת 2010 לשנת 2016.[15][16]

מערכות אחרות שנפגעו כוללות מסופי EFTPOS,[17] ו-PlayStation 3 (למעט דגם Slim).[18]

התקלה החשובה ביותר התרחשה בגרמניה, שם למעלה מ-20 מיליון כרטיסי בנק הפכו לבלתי שמישים, ובסיטיבנק בלגיה, שם שבבי זיהוי הלקוחות שלה בדיג'יפס הפסיקו לעבוד.[19]

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

Postscript-viewer-blue.svg ערך מורחב – באג 2011

טייוואן משתמשת באופן רשמי בלוח מינגו (אנ'), הרואה את השנה הגרגוריאנית 1912 כשנה 1. לפיכך, השנה הגרגוריאנית 2011 היא השנה הטייוואנית ה-100, השנה הראשונה בת 3 ספרות.[20]

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

הגשושית פגיעה עמוקה של סוכנות החלל נאס"א איבדה קשר עם כדור הארץ באוגוסט 2013, אחרי שהשעון שבה ספר 232 עשיריות שנייה מאז 1 בינואר 2000.[21]

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

חלק מהטלפונים הסלולריים של סמסונג שהכילו ערכת שבבים של חברת Agere (כגון Samsung SGH-C170) מיאנו לעבור את התאריך 31 בדצמבר 2014. התאריך השתנה אוטומטית ל-2015, אבל חזר לתאריך הבסיס אחרי כל הפסקת מתח (כגון הוצאת סוללה).[דרוש מקור]

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

הדקה האחרונה בשנת 2016 הייתה דקה מעוברת ועם כניסת השנה החדשה, נוצרו בעיות בגישה למספר שרתים.[22] טכנאים התגברו על הבעיה בתוך 90 דקות.

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

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

תאריכי GPS מפורשים כמספר שבוע ומספר יום בשבוע, כאשר מספר השבוע מועבר כערך של עשר סיביות. המשמעות היא שכל 1,024 שבועות (7,168 ימים או כ-19.6 שנים) לאחר יום ראשון, 6 בינואר 1980 (תחילת ה-GPS), התאריך יתאפס שוב למועד זה; באג זה התרחש בפעם הראשונה בשעה 23:59:47 ביום שבת, 21 באוגוסט 1999,[7] בפעם השנייה בשעה 23:59:42 UTC ב-6 באפריל 2019, והוא יקרה שוב ב-20 בנובמבר 2038.[8] כדי לטפל בדאגה זו, הודעות ניווט GPS מודרניות משתמשות בשדה של 13 סיביות, שחוזר על עצמו רק כל 8,192 שבועות (57,344 ימים או כ-157 שנה), ולא יחזור לאפס עד לשנת 2137 לערך.

מעבר לוח השנה היפני[עריכת קוד מקור | עריכה]

Postscript-viewer-blue.svg ערך מורחב – באג תקופת לוח השנה היפני

ב-30 באפריל 2019 ויתר הקיסר אקיהיטו על תפקידו והעביר אותו לבנו נארוהיטו. כיוון שביפן, מכנים שנים באופן מסורתי לפי שמות התקופות המתאימות לתקופת שלטונו של כל קיסר, הדבר הביא לשם תקופה חדשה, תקופת ראיווה (令和), שהחלה עם כניסתו של נארוהיטו לכס המלוכה למחרת. מכיוון שהקיסר הקודם, הירוהיטו, נפטר ב-7 בינואר 1989 ותקופת שלטונו של אקיהיטו הייתה דומה בעיקר לתקופת העלייה בשימוש במחשבים, מרבית התוכנות לא נבדקו כדי להבטיח התנהגות נכונה בשינוי בתקופה. יתר על כן, הבדיקה הסתבכה בגלל העובדה ששם העידן החדש לא נחשף עד 1 באפריל 2019. לכן, צפויות טעויות מתוכנות שלא צפו עידן חדש.

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

WWE 2K20 ו-Star Wars Jedi: Fallen Order קרסו שניהם ב-1 בינואר 2020, כשהשנה התחלפה. ניתן לעקוף את התקלות רק על ידי איפוס השנה חזרה לשנת 2019 עד לתיקון התקלה.[23][24] בנוסף, Crystal Reports 8.5 לא הצליח ליצור דוחות ספציפיים החל משנת 2020.[25]

מוני חניה של Parkeon בניו יורק ובמקומות אחרים לא הצליחו לקבל כרטיסי אשראי כאמצעי תשלום החל משנת 2020. פותחה דרך לעקיפת הבעיה, אך נדרש לעדכן כל מונה בנפרד. בניו יורק המונים לא היו אמורים להיות מתוקנים עד ל-9 בינואר.[26][27]

בפולין, כ-5,000 קופות רושמות הפסיקו את הדפסת התאריך כראוי.[28]

שעוני ספורט חכמים של SUUNTO הראו שגיאה במחשוב ימי השבוע, שהוצגה בצעד +2 (כלומר: שישי (FRI) במקום רביעי (WED), שבת (SAT) במקום חמישי (THU) וכן הלאה). עבור שעונים של SUUNTO מדגם Spartan, תוקן הבאג עם שחרור הקושחה 2.8.32.[29]

Mac OS Classic[עריכת קוד מקור | עריכה]

לוח הבקרה בגרסאות 6, 7 ו-8 של Mac OS Classic מאפשר רק לקבוע את התאריך עד ליום 31 בדצמבר 2019, אם כי המערכת מסוגלת להמשיך ולקדם את הזמן מעבר לאותו תאריך.[30][31]

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

משתמשי סמסונג דיווחו כי טלפונים הפועלים על עדכון One UI 3.0 האחרון או אנדרואיד 11 איבדו את הגישה לסוללה ולסטטיסטיקת הטעינה החל משנת 2021. מכשירים מושפעים לא דיווחו על סטטיסטיקות שימוש, ובכך יותירו את החלקים האלו ריקים.[32][33] דגמים ישנים יותר של Sony Bravia דיווחו על נתונים לא תקינים שמקבלים כשמנסים להגדיר תזכורות ללוח השידורים האלקטרוני.

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

תאריכים המאוחסנים בפורמט yymmddHHMM שהומרו למספר שלם מסומן של 32 סיביות גלשו ב-1 בינואר 2022, מפני ש-. מספרי העדכון של רכיבי סריקת תוכנות זדוניות של Microsoft Exchange הושפעו במיוחד היה, ונראה כי הם משמשים לבדיקה מתמטית לקביעת העדכון האחרון.[34][35]

מכוניות הונדה ואקורה שיוצרו בין 2004 ל-2012 המכילות מערכות ניווט GPS הציגו באופן שגוי את השנה כשנת 2002. בעיה זו נבעה מגלישה נומרית מתחילת ספירת ה-GPS. הונדה אישרה כי הבעיה תיפתר מעצמה באוגוסט 2022.[36][37]

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

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

ביפן, מספר מערכות מחשבים ישנות משתמשות בלוח השנה היפני שלא עודכן, עדיין סופרות שנים לפי תקופת שווה. השנה 2025 מתאימה באותן מערכות לשנה ה-100 בתקופת שווה, מה שעלול לגרום לבעיות אם התוכנה מניחה שתי ספרות לשנה.[38]

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

בסוף שנות השבעים של המאה העשרים, במערכות Data General Nova ו-Eclipse, חברת המחשבים העולמית (שעושה יישומי איגודי אשראי) יצרה תבנית תאריך זו;[דרוש מקור]

שדה תאריך של 16 סיביות:

  • 128 שנים = 7 ביטים (‎1900+128=2028)
  • 12 חודשים = 4 ביטים
  • 31 יום = 5 ביטים

תאריכים הושוו באופן ישיר באמצעות פונקציות ללא סיבית סימן.

אין מקרים ידועים של פורמט זה בשימוש כיום.

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

מערכות מסוימות, כמו Nucleus OS של מדיהטק (אנ'), מגיעות רק עד 31 בדצמבר 2030.[דרוש מקור]

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

Palm OS (אנ') משתמש בשני מספרים שלמים בעלי סיבית סימן עם תקופת 1970, כמו גם במספרים שלמים ללא סיבית סימן עם תקופת 1904, עבור פונקציות מערכת שונות,[39] כגון עבור שעון מערכת ותאריכי קבצים. אמנם זה אמור לגרום לכך ש-Palm OS יהיה רגיש לבאג 2038, אך Palm OS משתמש גם בשדה של 7 סיביות לאחסון ערך השנה, עם ספירה של תקופה שונה משנת 1904, וכתוצאה מכך שנת המקסימום שלו היא (1904+127) 2031.[40]

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

ל-Network Time Protocol יש בעיית גלישה הקשורה לבאג 2038, המתבטאת בשעה 06:28:16 UTC ב-7 בפברואר 2036, ולא בשנת 2038. חותמות הזמן של 64 סיביות ש-NTP משתמש בהן מורכבות מחלק של 32 סיביות עבור שניות וחלק של 32 סיביות לשנייה חלקית, מה שמקנה ל-NTP סולם זמן שמתהפך כל 232 שניות (כ-136 שנה או ליתר דיוק, 136 שנים, 70 ימים, 6 שעות, 28 דקות ו-16 שניות) ורזולוציה תאורטית של 2−32 שניות (233 פיקושניות). NTP משתמש בתקופה שמתחילה ב-1 בינואר 1900. ההתהפכות הראשונה מתרחשת בשנת 2036, לפני באג 2038 של UNIX.[41][42]

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

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

Postscript-viewer-blue.svg ערך מורחב – באג 2038

מערכות יוניקס המקוריות מותאמות למחשבי 32 ביט, ומונה הזמן בהן הוא מספר מסומן (כלומר חיובי או שלילי) שבו רק 31 ביטים מיועדים למנייה וביט אחד לסימן. המונה סופר שניות מ-1 בינואר 1970 בחצות, והוא יגלוש כשיגיע ל-2,147,483,647 ב-19 בינואר 2038. מרגע זה הוא יהפוך סימן ויתחיל למנות מ--2,147,483,647 המייצג את 13 בדצמבר 1901.[10]

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

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

למערכת שידור הווידאו הדיגיטלי (DVB) יש בעיה ב-22 באפריל 2038, כאשר 16 הסיביות המשמשות להעברת ה-Modified Julian Days ‏(MJD) המשמשות לתזמון מדריכים אלקטרוניים יופעלו מאפס. המפרט ETSI EN 300 368 מציין בנספח ג' כי נוסחאות ה-MJD המסופקות תקפות עד 28 בפברואר 2100, אך לא מזכיר את המגבלות שהוטלו על ידי 16 הסיביות המשמשות להעברת הערך המתקבל.[דרוש מקור]

התהפכות ה-GPS השלישית[עריכת קוד מקור | עריכה]

תאריכי GPS מפורשים כמספר שבוע ומספר יום בשבוע, כאשר מספר השבוע מועבר כערך של עשר סיביות. המשמעות היא שכל 1,024 שבועות (7,168 ימים או כ-19.6 שנים) לאחר יום ראשון, 6 בינואר 1980 (תחילת ה-GPS), התאריך יתאפס שוב למועד זה; באג זה התרחש בפעם הראשונה בשעה 23:59:47 ביום שבת, 21 באוגוסט 1999,[7] בפעם השנייה בשעה 23:59:42 UTC ב-6 באפריל 2019, והוא יקרה שוב ב-20 בנובמבר 2038.[8] כדי לטפל בדאגה זו, הודעות ניווט GPS מודרניות משתמשות בשדה של 13 סיביות, שחוזר על עצמו רק כל 8,192 שבועות (57,344 ימים או כ-157 שנה), ולא יחזור לאפס עד לשנת 2137 לערך.

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

מחשבי מקינטוש מוקדמים של אפל מאחסנים זמן בשעונים בזמן אמת (Real-time clock) (RTC) שלהם ובמערכות הקבצים HFS (אנ') כמספר שניות של 32 סיביות מאז 00:00:00 ב-1 בינואר 1904. לאחר 06:28:15 ב-6 בפברואר 2040, הזמן יחזור ל-1904.[43] HFS+ (אנ'), פורמט ברירת המחדל של כל מחשבי מקינטוש האחרונים של אפל, מושפע גם הוא. מערכת הקבצים המחליפה של אפל (אנ') פותרת בעיה זו.

ProDOS למחשבי אפל II תומך במספרי שנה דו ספרתיים בלבד. כדי להימנע מבעיות של באג 2000, אפל פרסמה הערה טכנית לפיה מספר השנה אמור לייצג את 1940–2039.[44] תוכנה לפלטפורמה עשויה להציג באופן שגוי תאריכים החל משנת 2040. מאמץ של צד שלישי מתבצע כדי לעדכן את תוכנת ProDOS ותוכנות היישום לכדי תמיכה בשנים עד 2924.[45]

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

ב-18 בספטמבר 2042 שעון היום (TODC) יתהפך במחשבי IBM מיינפריים (IBM mainframe) S/370 וכן בדורותיהם הבאים, כולל הzSeries.[46]

שעוני יום ישנים יותר יושמו כמספר של 64 סיביות של 2-12 מיקרו שניות (0.244 ננו-שניות), והבסיס הסטנדרטי היה 1 בינואר 1900 UT. ביולי 1999 הוכרז על שעון ה-TODC המורחב, שהאריך את השעון ימינה (כלומר, הביטים המורחבים פחות משמעותיים מהביטים המקוריים). הרזולוציה בפועל תלויה במודל, אך הפורמט עקבי, ולכן יתהפך לאחר 252 מיקרו שניות.[46]

ערך ה-TODC נגיש לתוכנות מצב משתמש ומשמש לעיתים קרובות לתזמון וליצירת מזהים ייחודיים לאירועים.

בעוד ש-IBM הגדירה והטמיעה פורמט חומרה ארוך יותר במכונות האחרונות (128 סיביות), שמאריך את הטיימר בשני הקצוות לפחות ב-8 סיביות נוספות, תוכנות רבות ממשיכות להסתמך על פורמט 64 סיביות שנותר כתת-קבוצה נגישה של הטיימר הארוך יותר.

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

למערכת ATSC תהיה בעיה דומה לנושא ה-DVB שתוארה לעיל לאחר 2048 עקב השימוש שלה בשניות GPS של 32 סיביות שמתחילות מ-6 בינואר 1980.

לוגיקת תכנון הקיבולת במערכת ה-ERP‏, SAP S/4HANA, תומכת בתאריכי סיום בלבד עד 19 בינואר 2048 (24855 ימים החל מ-1 בינואר 1980). זה נוגע למשל לתכנון הייצור, התחזוקה והפיקוח.[47]

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

מחשבוני טקסס אינסטרומנטס שונים ממשפחות TI BA II Plus‏, TI BA II Plus Professional‏, TI-83‏, TI-84 ו-NSpire תומכים בפונקציה בשם dbd המשמשת כדי לחשב את מספר הימים בין תאריכים. פונקציה זו מקבלת תאריכים בין התאריכים 1950-01-01 (1 בינואר 1950) ו-2049-12-31 (31 בדצמבר 2049) בלבד. תחום פוטנציאלי אחד שבו הבאג יתחיל לגרום לבעיות בשנת 2020 והלאה הוא בחישוב משכנתאות ל-30 שנים ומעלה.[48][49]

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

Wii ו-Nintendo 3DS יתהפכו בסוף 31 בדצמבר 2050, ויחזרו חזרה עד ל-1 בינואר 2000. חלק מהמשחקים בקונסולות שיש להם מערכות לוח שנה משלהם יחזרו לשנה אחרת שנקבעה על פי המשחק; דוגמה לכך הוא המשחק Animal Crossing: New Leaf, שיחזור חזרה ל-1 בינואר 2012.[50]

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

הנינטנדו סוויץ' לא מאפשרים למשתמשים להכניס תאריכים מעבור ל-2060-12-31. עם זאת, המערכת עדיין מסוגלת לחשב זמן מעבר לתאריך זה.[51]

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

ימים 32,768 ו-65,536[עריכת קוד מקור | עריכה]

תוכניות המאחסנות תאריכים כמספר הימים מאז תאריך שרירותי הן פגיעות יותר לאפקטים של התהפכות אם הערכים אינם רחבים מספיק כדי לאפשר לערכי התאריך טווח זמן מספיק גדול. ערכים בינאריים של 16 סיביות מתהפכים לאחר 32,768 (215) ימים מיום תחילת הספירה, ומתחילים לייצר ערכים שליליים. חלק ממערכות המיינפריים חוו כשלים בתוכנה כיוון שקודדו תאריכים כמספר הימים מאז 1 בינואר 1900, שהפיקו מספרי שנים שליליים בלתי צפויים ב-18 בספטמבר 1989. באופן דומה, ספירות בינאריות של 16 סיביות של ימים גולשות לאחר 65,536 (216) ימים. עבור תוכנות המשתמשות בתקופה שמתחילה ב-1 בינואר 1900, בעיה זו תתרחש ב-6 ביוני 2079.[52]

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

חלק מהטלפונים של נוקיה (אם לא כולם) המריצים את סדרה 40 (כמו Nokia X2-00) תומכים רק בתאריכים עד 2079-12-31 (31 בדצמבר 2079) ויסרבו לשנות תאריכים מעבר ל-2079-12-31. הפתרון הוא להשתמש בשנת 1996 במקום שנת 2080 כשנה מעוברת תואמת להצגת היום הנכון בשבוע, התאריך והחודש על המסך הראשי.

מערכות המאחסנות את השנה כערך דו ספרתי ‎00..99 באופן פנימי בלבד (כמו רבים מה-RTC) עשויות להתהפך בין 2079-12-31 לתקופת ה-IBM PC ו-DOS של 1980-01-01.

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

Postscript-viewer-blue.svg ערך מורחב – בעיית שנה מעוברת

מערכות DOS ו-Microsoft Windows תומכות בממשק תכנות יישומים עד ל-31 בדצמבר 2100, כאשר דבר זה מוצהר על-ידם. הסיבה היא שמערכות אלו לא מתוכנתות לכל הכללים הייחודיים של שנה מעוברת שיחולו בשנה זו.[53] ייתכנו בעיות לא צפויות ב-1 בינואר של שנה זו.

נינטנדו DS יתהפך בסוף 31 בדצמבר 2099, ויחזור חזרה ל-1 בינואר 2000.[52]

בעיה נוספת תופיע בסוף 28 בפברואר 2100, כיוון ששנת 2100 אינה שנה מעוברת, ואילו יישומים נפוצים רבים של האלגוריתם לשנה מעוברת אינם שלמים או פשוטים, ולכן יניחו בטעות שמדובר בשנה מעוברת. זה יגרום לתאריך להתהפך באופן שגוי מ-28 בפברואר 2100 ל־29 בפברואר 2100, במקום ישירות ל-1 במרץ 2100.

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

פורמטים רבים של קבצים, פרוטוקולי תקשורת וממשקי יישומים קיימים משתמשים בגרסה של תבנית התאריך time_t של יוניקס, המאחסנת את מספר השניות מאז תקופת יוניקס (חצות לפי הזמן האוניברסלי המתואם, 1 בינואר 1970) כמספר שלם בינארי של 32 סיביות. ערך זה יתהפך ב-7 בפברואר 2106 בשעה 06:28:15. כלומר, בשלב זה מספר השניות מאז 1 בינואר 1970 הוא FFFF FFFF בבסיס הקסדצימלי, ויגמר המקום בשדה המאפשר רישום (בעיית ייצוג אחסון זו אינה תלויה בתוכנות המאחסנות באופן פנימי ופועלות בזמני מערכת כערכים שלמים של 64 סיביות).

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

חותמות הזמן של התאריכים, המאוחסנות במערכות הקבצים FAT, שהוצגו במקור ב-‎86-DOS 0.42 ב-25 בפברואר 1981 והועברו ל-‏MS-DOS‏, PC DOS‏, DR-DOS וכו', תגלושנה בסוף 31 בדצמבר 2107. חותמות התאריך לשינוי האחרונות נשמרות ברישומי התיקייה, עם השנה מיוצגת כמספר של 7 סיביות (0–127), יחסית לשנת 1980, ובכך אין אפשרות לציין תאריכים כלשהם בשנת 2108 ואילך. פונקציות ה-API שהוגדרו כדי לאחזר תאריכים אלה תומכות באופן רשמי רק בתאריכים עד 31 בדצמבר 2099.

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

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

תאריכי GPS מפורשים כמספר שבוע ומספר יום בשבוע, כאשר מספר השבוע בתחילה משתמש בערך 10 סיביות והודעות ניווט GPS מודרניות באמצעות שדה 13 סיביות. מערכות של 10 סיביות מתהפכות כל 1,024 שבועות (כ-19.6 שנים) לאחר יום ראשון, 6 בינואר 1980 (תחילת ה-GPS), ומערכות 13 סיביות מתהפכות כל 8,192 שבועות. מערכות של 13 סיביות יתהפכו לאפס בשנת 2137.[7][8]

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

תוכנות המחשבות תאריכים של לוח השנה העברי עלולות לא להיות פעילות כאשר שדה השנה, המתחשב בארבע אותיות כציון השנה, יצטרך לחשב תאריך בן חמש אותיות החל מא' בתשרי ה'תתקי"א (21 בספטמבר 2150).[53] עלולים להיתקל בבעיה זו עוד לפני כן בחישוב של תאריכים עתידיים.

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

חלק ממערכות המעקב אחרי הזמן שחלף סופרות ננו-שניות מאז 1970 תוך שימוש במספר שלם בגודל 64 סיביות כולל סיבית סימן, אשר יגלוש ב-11 באפריל 2262, ב-23:47:16. ממשק ה-UnixNano של שפת התכנות Go הוא דוגמה אחת.[54] דוגמאות אחרות כוללות את אובייקט חותם הזמן ב-Pandas של פייתון,[55] ה-chrono::system_clock של C++[56] וטיימרים של QEMU.[57]

באגים שיתרחשו עוד יותר מ-1,000 שנים[עריכת קוד מקור | עריכה]

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

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

בעוד שרוב התוכנות (כולל אקסל, JavaScript ו-R) מזהות בצורה נכונה את 4000 ו-8000 כשנים מעוברות (מכיוון שהן מתחלקות ב-400), SAS לא מזהה את שנים אלה כשנים מעוברות, כתוצאה מ"כלל 4000 שנים" לא רשמי.

לפיכך, המרות תאריכים בין SAS לתוכנות אחרות ייצאו מהסנכרון לאחר 28 בפברואר 4000, אלא אם כן תוכנת SAS מתחשבת בפער הזה.[58][59]

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

Microsoft Outlook משתמש בתאריך 1 בינואר 4501 כשומר מקום ל-"none" או "empty".[60][61]

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

באג 10,000 (אנ') יתרחש כאשר המחשב יצטרך לזהות שנה בעלת חמש ספרות במקום ארבע. לפי הערכות, גם אם תתקיים האנושות עד אז, כל מערכות המחשבים ישתנו ללא היכר עד אז ויכללו פתרון לבעיה זו. עם זאת, בקרב מחקרים (בעיקר בפיזיקה ואסטרונומיה) נדרשים חישובים לתהליכים שאורכים אלפי שנים - למשל, בטיפול בפסולת גרעינית. יישומים אלה נאלצים להתמודד גם עם בעיית שנת ה-0. לכל שנים שהן חזקות עתידיות של 10 יש פוטנציאל לבעיות דומות.

במחשבי חברת אפל באג זה עלול להתרחש בשנת 10,001 בשל שיטת חישוב שונה של תאריכים.

ארגון בשם Long Now Foundation (אנ') פועל לשם הגברת המודעות לבאג ומנסה למצוא פתרונות מבעוד מועד.[62] "RFC 2550 - Y10K and Beyond" דן בפתרונות לטיפול בבעיה זו.

באג 30,828[עריכת קוד מקור | עריכה]

החל מ-14 בספטמבר 30,828, Windows לא יקבל תאריכים מעבר ליום זה בעת ההפעלה, Windows יתלונן על "זמן מערכת לא חוקי". הסיבה לכך היא שערך ה-FILETIME ב-Windows, שהוא ערך 64 סיביות המתאים למספר המרווחים של 100 ננו-שניות מאז 1 בינואר 1601, בשעה 00:00:00.0000000 UTC, יעלה על הערך המרבי האפשרי שלו באותו יום בשעה 02:48:05.4775808 UTC.[63]

באגים 32,768 ו-65,536[עריכת קוד מקור | עריכה]

תוכנות המעבדות שנים כערכי 16 סיביות עשויות להיתקל בבעיות עם השנים 32,768 או 65,536, תלוי אם מתייחסים לערך כמספר שלם עם סיבית סימן או ללא.

עבור באג 32,768, שנים אחרי 32,767 יכולות להתפרש כמספרים שליליים, החל משנת ‎−32,768.[64] סביר יותר שבאג 65,536 יתבטא בכך שהוא יציג את השנה 65,536 כשנה 0.[65]

באג 292,277,026,596[עריכת קוד מקור | עריכה]

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

באג 292,277,026,596 (בערך ‎2.9×1011 שנים בעתיד) יתרחש כאשר זמן יוניקס 64 סיביות יגלוש ב-UTC 15:30:08 ביום ראשון, 4 בדצמבר 292,277,026,596 לספירה.[66][67] בעיה דומה תתרחש עם זמן יוניקס של 128 סיביות המאוחסן כננו-שניות, אשר יגלוש בשנה 5,391,559,471,918,239,498,981 לספירה (2127/1000000000, או כ-‎1.7014118×1029 שניות לאחר תחילת ספירת היוניקס בשנת 1970).

גלישת זמן יחסית[עריכת קוד מקור | עריכה]

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

ב-Windows 7‏, Windows Server 2003‏, ‏Windows Server 2008 ו-Windows Vista, מידע על התחלת חיבור TCP נשמר במאיות שנייה, תוך שימוש במספר שלם בגודל 32 סיביות ללא סיבית סימן, מה שגרם לגלישה ולחיבורי TCP להיכשל לאחר 497 ימים.[68]

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

במטוס בואינג 787 היו לפחות שתי בעיות תוכנה הקשורות לאחסון זמן. בשנת 2015 דווח על שגיאה בה הזמן נשמר במאיות שנייה, תוך שימוש במספר שלם בגודל 32 סיביות כולל סיבית סימן, והמערכות קרסו לאחר 248 יום.[69] בשנת 2020 הוציאה ה-FAA הנחיית כשירות לטיסה לבעיה, שאם המטוס לא יכובה לחלוטין לפני שהגיע לזמן פעילות של 51 ימים רצופים, המערכות שלו תחלנה להציג נתונים מטעים.[70]

קישורים חיצוניים[עריכת קוד מקור | עריכה]

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ Peter G. Neumann, The RISKS Digest, Volume 4 Issue 45, The RISKS Digest, Volume 4 Issue 45, ‏1987-02-02 (באנגלית)
  2. ^ 1970 – 1977
  3. ^ Directory of linctape-images/os8l/ps-8-system-25.linc, www.pdp8online.com
  4. ^ "COS-310, מערכת ההפעלה המסחרית של DEC עבור PDP-8, נתמכת... אבל עם פורמט קובץ טקסט חדש. מערכת הקבצים כמעט זהה ל-OS/8, אך התאריכים נרשמים אחרת..."
  5. ^ Doug Jones's DEC PDP-8 FAQs, homepage.cs.uiowa.edu
  6. ^ Latest News on the Date Bug
  7. ^ 1 2 3 4 5 Janis L. Logan, Applications To The Nines, web.archive.org
  8. ^ 1 2 3 4 GPS week roll over April 6th, www.cyber.gov.au.
  9. ^ איי אונליין, מומחי מחשבים: קיים חשש גדול כי בתאריך 9.9.99 תתרחש 'חזרה כללית לקראת באג 2000', באתר TheMarker‏, 16 באוגוסט 1999
  10. ^ 1 2 עידו גנדל, באג מחשבים, באתר של "רשת 13", 10 בנובמבר 2008 (במקור, מאתר "nana10")
  11. ^ Identifying and Correcting Dates with Two-Digit Years, www.uic.edu
  12. ^ date – write the date and time, pubs.opengroup.org
  13. ^ Manjoo, Farhad. "Unix Tick Tocks to a Billion". Wired (בAmerican English). נבדק ב-2022-05-16. "Unix Tick Tocks to a Billion" באתר wired, ‏ 8 בספטמבר 2001
  14. ^ Bank of Queensland hit by “Y2.01k” glitch, CRN Australia
  15. ^ Windows Mobile glitch dates 2010 texts 2016, ‏05-01-2010
  16. ^ Windows Mobile phones suffer Y2K+10 bug | News | TechRadar, web.archive.org, ‏2013-10-23
  17. ^ iTWire - Bank of Queensland vs Y2K – an update, web.archive.org, ‏2010-01-08
  18. ^ Error: 8001050F Takes Down PlayStation Network, Gizmodo (בAmerican English)
  19. ^ R. T. L. Newmedia, Bug de l'an 2010 en Allemagne: plus de 20 millions de cartes bancaires inutilisables, RTL Info (בצרפתית)
  20. ^ Taiwan’s Y1C problem | Pinyin News (בAmerican English)
  21. ^ Deep Impact: wrong time zone?, web.archive.org, ‏2013-10-02
  22. ^ באג 2017: השנייה הנוספת יצרה פאניקה בשרתים, באתר ynet, 3 בינואר 2017
  23. ^ Saqib Mansoor, WWE 2K20 Refuses To Run In 2020, SegmentNext, ‏2020-01-01 (בAmerican English)
  24. ^ Star Wars Jedi: Fallen Order and WWE 2K20 are not launching due to a "2020" bug [UPDATE], DSOGaming, ‏2020-01-01 (בAmerican English)
  25. ^ sql - ODBC Connection / Crystal Reports, Stack Overflow
  26. ^ Parking Meters Across NYC Not Accepting Credit Cards, Were Never Programmed To Work In 2020, ‏2020-01-02 (בAmerican English)
  27. ^ Y2K20 Parking Meter Software Glitch Causes Citywide SNAFU - Gothamist, web.archive.org, ‏2020-01-04
  28. ^ Patryk Pallus, 3 Sty 20 16:21, Wielka awaria drukarek fiskalnych. Producent naprawia urządzenia, firmy liczą straty, Business Insider, ‏2020-01-03 (בפולנית)
  29. ^ Suunto Spartan Software updates, Suunto (בBritish English)
  30. ^ Technical Note TN1049 Approaching the Millennium: The Mac and the Year 2000, ‏20-01-2020
  31. ^ Vintage Mac 2020 fixes, www.mactcp.net
  32. ^ Eugene Jeong, Users report an interesting glitch in Samsung's One UI 3.0, but it has an easy fix, Phone Arena (בAmerican English)
  33. ^ Update: Mar. 04 Samsung One UI 3.0/3.1 (Android 11) update bugs & issues tracker, PiunikaWeb, ‏2021-03-04
  34. ^ Born, Günter (1 בינואר 2022). "Exchange Year 2022 Problem: FIP-FS Scan Engine failed to load – Can't Convert "2201010001" to long (2022/01/01 00:00 UTC)". Born's Tech and Windows World. נבדק ב-1 בינואר 2022. {{cite web}}: (עזרה)
  35. ^ Martin, Alexander (2 בינואר 2022). "Remember the Y2K bug? Microsoft confirms new Y2K22 issue". Sky News. {{cite web}}: (עזרה)
  36. ^ "Honda Clocks Are Stuck 20 Years In The Past And There Isn't A Fix". Jalopnik (בAmerican English). נבדק ב-2022-01-08.
  37. ^ "Shoddy coding has some Honda cars stuck in the year 2002". Engadget (בAmerican English). נבדק ב-2022-01-08.
  38. ^ "Big tech warns of 'Japan's millennium bug' ahead of Akihito's abdication". TheGuardian.com. 25 ביולי 2018. {{cite web}}: (עזרה)
  39. ^ "Palm OS® Protein C/C++ Compiler Language & Library Reference" (PDF). נבדק ב-12 באוקטובר 2019. {{cite web}}: (עזרה)
  40. ^ subject:"Re\: Date limited to 2031", www.mail-archive.com
  41. ^ The NTP Era and Era Numbering, www.eecis.udel.edu
  42. ^ W. Richard Stevens, W. Stevens, Bill Fenner, Andrew M. Rudoff, UNIX Network Programming: The sockets networking API, Addison-Wesley Professional, 2004, ISBN 978-0-13-141155-5. (באנגלית)
  43. ^ Apple Computer, Inc., Inside Macintosh, Volume II, Addison Wesley, 1985, p. 369
  44. ^ ProDOS 8 Technical Note #28, www.1000bit.it
  45. ^ ProDOS 2.5 Alpha 8, prodos8.com
  46. ^ 1 2 Server Time Protocol Planning Guide | IBM Redbooks, 2016-09-30. (בAmerican English)
  47. ^ SAP note 2258792 (access to SAP Support Portal required), launchpad.support.sap.com
  48. ^ Need a better days between dates function
  49. ^ Y2K problem for days-between-dates for TI-84 series calcs, www.hpmuseum.org
  50. ^ What happens when you max out the year and set to Dec 31st 11:59 PM? - Animal Crossing: New Leaf, gamefaqs.gamespot.com
  51. ^ "Animal Crossing time travel". IGN. 12 באפריל 2020. נבדק ב-28 באוגוסט 2021. {{cite web}}: (עזרה)
  52. ^ 1 2 What happens when DS Lite system time and date exceeds 31st December 2099 @ 23:59?, נבדק ב-2021-03-15
  53. ^ 1 2 אריה סתר, ‏באג 2100 ובאג תתקי"א, באתר "הידען", 28 בספטמבר 2004
  54. ^ time - The Go Programming Language, golang.org
  55. ^ Time series / date functionality — pandas 1.2.3 documentation, pandas.pydata.org
  56. ^ std::chrono::system_clock - cppreference.com, en.cppreference.com
  57. ^ git.qemu.org Git - qemu.git/blob - include/qemu/timer.h, git.qemu.org
  58. ^ In the year 9999...., Chris Hemedinger
  59. ^ The Conversion of Date and Time Values between SAS Data Sets and Microsoft Access Database, SAS 9.4 documentation
  60. ^ o365devx, OlMarkInterval enumeration (Outlook), docs.microsoft.com (בAmerican English)
  61. ^ o365devx, Filtering Items Using Query Keywords, docs.microsoft.com (בAmerican English)
  62. ^ The Long Now Foundation - Fostering Long-Term Thinking, longnow.org
  63. ^ Forensic Focus, Interpretation of NTFS Timestamps, Forensic Focus, ‏2013-04-06 (בAmerican English)
  64. ^ Computer Science MSCS, Twitter Twitter, What Is Delphi Programming?, ThoughtCo (באנגלית)
  65. ^ "Archived copy". אורכב מ-המקור ב-9 בפברואר 2008. נבדק ב-21 בינואר 2008. {{cite web}}: (עזרה); (עזרה)
  66. ^ William Porquet, Project 2038 FAQ, www.deepsky.com, ‏2007-08-15
  67. ^ "Date/Time Conversion Contract Language" (PDF). Office of Information Technology Services, New York (state). 19 במאי 2019. נבדק ב-16 באוקטובר 2020. {{cite web}}: (עזרה)
  68. ^ All the TCP/IP ports that are in a TIME_WAIT status are not closed after 497 days from system startup in Windows Vista, in Windows 7, in Windows Server 2008 and in Windows Server 2008 R2, support.microsoft.com
  69. ^ To keep a Boeing Dreamliner flying, reboot once every 248 days, Engadget (בAmerican English)
  70. ^ Gareth Corfield, Boeing 787s must be turned off and on every 51 days to prevent 'misleading data' being shown to pilots, www.theregister.com (באנגלית)