באג 2000 שהפחיד את כולנו עבר בשלום, הרבה בזכות עבודה מאומצת של אנשי תוכנה. אולם, בעיה נוספת מאיימת לשבש את פעולתם של מחשבים רבים בשנת 2038. בעיה זו קשורה לשיטת מדידת הזמן במערכות הפעלה.
במערכות הפעלה רבות יש משתנה מערכת הקרוי "זמן יוניקס". משתנה זה מכיל את מספר השניות שחלפו החל מ- 1/1/1970 עד לזמן הנוכחי, ובכל שנייה הוא מקודם ב-1. משתנה זה הוא מאוד שימושי. המתכנתים יכולים לקרוא את ערכו הנוכחי (למשל על ידי הפונקציה time בשפת התכנות C) ולהשתמש בו.
אז מה הבעיה? נענה על שאלה זו בעזרת סיפור דמיוני.
התאריך: שנת 2038. אתם נכנסים לבנק הישן שלכם כדי לפדות חיסכון שהפקדתם בשנת 1970. נניח שהפקדתם $ 10,000 בריבית שנתית של 2%. אזי אתם מצפים לקבל תשואה יפה:
Money = 10,000$ * 1.02 ^( 2,038-1970) = 38,443 $
הפקיד בבנק מציץ במחשבו ואומר "לא. מגיע לכם רק $ 2,601 ". "איך זה יתכן?!" אתם זועקים. הפקיד עונה בצורה יבשה (טוב, זו שנת 2038, הוא כנראה כבר רובוט...) "זה מה שיצא. אתם מוזמנים להציץ בקוד.”
אתם מסתכלים בקוד הישן ורואים:
Number_of_years = ( time() - t0 )/(60 * 60* 24 * 365);
Money =10,000$ * 1.02 ^ Number_of_years;
הקוד נראה די בסדר. הוא מחשב את מספר השנים שעברו מרגע ההפקדה: פונקציית () time מחזירה את זמן-יוניקס העכשווי. אם מחסרים ממנו את זמן-יוניקס שנמדד בעת ההפקדה לחשבון ( משתנה t0), מקבלים את מספר השניות מאז ההפקדה. בהמשך, הקוד ממיר את השניות לשנים (עם קירוב וגם עם עיגול כלפי מטה, כמובן לטובת הבנק...) ומשתמש בתוצאה לחישוב הריבית.
אז מה הבעיה?
ההסבר (שישמע פשוט לאנשי מחשבים וסינית לאחרים) הוא באג-2038. במערכות מחשבים ישנות, הזמן נשמר בתוך משתנה מסוג מספר שלם עם סימן באורך 32 סיביות. בכל שנייה מגדילים את המשתנה הזה באחד.
אנשי מחשבים ודאי זוכרים שכשמגדילים משתנה יותר מידי, מקבלים לבסוף גלישה, והמשתנה נהייה פתאום שלילי (31 ^2).
אכן, זה מה שצפוי להתרחש ב-19 בינואר 2038. פתאום זמן-יוניקס במחשבים אלו יהפוך להיות מספר שלילי. בסיפור שלנו, Number_of_years יהפוך להיות מספר שלילי ( 68-) ואתם תפסידו כסף.
כיצד למנוע את הבעיה? רוב מערכות המחשבים בימינו כבר עשו עדכוני תוכנה, כך שמשתני המערכת שמכילים את הזמן נשמרים כמספרים באורך 64 סיביות. אולם, מחשבים שלא עשו עדכון, צפויים להיתקל בבעיות.
נשאר לקוות שהבנק שלכם יתעדכן בזמן, כדי שלא תפסידו כסף, וכנ"ל גם מערכות הבקרה של נשק גרעיני.
מאת דורון אורנשטיין