רק שניה

נכתב ב1 ביולי 2017.

8 תגובות

רק שניה מפרידה בין השעה 03:14:07 ל 03:14:08 בתאריך: 19 בינואר 2038. לכאורה, זה לא צריך לעניין אף אחד. אבל אם אתה יוניקס/טיים גיק כמוני, התאריך הזה מייד אמור להדליק לך נורה אדומה.
למה? כי בשניה הזאת יעברו בדיוק 2,147,483,648 (או 2 בחזקת 31) שניות מתאריך 1.1.1970 בשעה 00:00:00. מחשב לינוקס בארכיטקטורת 32 ביט לא יכול להציג את הזמן הזה.
נסו להריץ את הפקודה הבאה על מחשב הלינוקס הקרוב:

date --date='@2147483647'

או במערכות מבוססות BSD (כמו macOS), את הפקודה הזאת:

date -r 2147483647

זה אמור לעבוד בלי בעיה. אבל אם תוסיפו שניה נוספת (כלומר להחליף את ה-7 ב-8), אתם עלולים לראות משהו כזה:
2038 on 32 bit Linux

לעומת זאת, על מחשב 64 ביט, התוצאה תקינה:
2038 on 64 bit Linux

אז למה זה מעניין עכשיו, ומה איכפת לי ממשהו שיקרה בעוד קצת יותר מ-20 שנה?

קודם כל, כי הזמן עובר. 20 שנה נשמע כמו המון זמן, אבל אם תסתכלו סביבכם בחדר, תראו לא מעט מכשירי חשמל שעובדים 20 שנה ויותר. תוסיפו לזה את העובדה שהיום כמעט כל מכשיר (ממנורה ועד טלוויזיה) מחובר לאינטרנט, ותבינו שיתכן שזו פצצת זמן שנדרכת עם כל קניה של מכשיר חדש שנעשית היום. וזה עוד בלי להזכיר מטוסים, בתי חולים, מערכות רכב (מישהו מוכן להיכנס למכונית אוטונומית ב 2038?) רמזורים, מעליות.

צילום המסך העליון, לדוגמה, נלקח ממחשב Raspberry Pi שמחובר למערכת ההשקיה בגינה שלי.
Raspberry Pi with Open Sprinkler
האם הוא ישרוד עד 2038? אולי. עד עכשיו, החלפתי בממוצע מחשב השקייה כל 10 שנים: הראשון בגלל הבטרייה שזלגה, והשני עדיין עבד, רק שרציתי להחליף אותו בדגם שמאפשר תכנות דרך הרשת במקום ממשק לא ידידותי. למזלי, ה 19 בינואר יוצא בחורף, כך שיהיו לי כמה חודשים טובים לדאוג למחליף במידת הצורך.

ולמה נזכרתי בכל זה עכשיו? כי מחר (2 ביולי 2017) יעבור מספר השניות את סף ה 1.499 מיליארד, ובעוד שבועיים (14 ביולי) הוא יעבור את סף ה 1.5 מיליארד.

השעון מתקתק…


תגובות:

  • דני (1 ביולי 2017 בשעה 15:20):

    אז העולם יוצף בגלל מחשבי גינה מבוססים 32 ביט ;-)

    • יהודה (1 ביולי 2017 בשעה 15:32):

      מעבר לבדיחה, באמת לא חשבתי על האספקט הזה, אלא רק מצב של יבוש. צודק לגמרי.

      • דני (1 ביולי 2017 בשעה 15:35):

        האמת שזה די מפחיד. בדיוק דיברנו על זה בעבודה לפני כמה ימים וחשבנו מתי יקומו החברות לתיקון באג 2038 (ע״ע באג 2000)

  • נועם (1 ביולי 2017 בשעה 19:28):

    très cool שנה טובה להחליף מקצוע

  • תומר כהן (1 ביולי 2017 בשעה 22:43):

    השאלה האמתית היא מה יקרה אם מחשב בקרת ההשקיה שלך יחשוב שהתאריך הוא 1 בינואר 1970. נניח שבכל חישוב תאריך נבצע חיבור/חיסור של ההיסט, ואז אפילו נוכל לייצג תאריכים עתידיים בקלות, כל עוד לא מבקשים לעשות מניפולציות תאריכים. הפתרונות יהיו החל מהוספה של סיבית נוספת לתאריכים כדי לדחות את הקץ (צריך לזכור שאין שום דבר להתייחס לתאריכים מלפני 1970 או אחרי 2038 בתצורת הגדרת הזמן של יוניקס), או פתרונות יצירתיים אחרים (לדוגמה ג׳אווה סקריפט שבתצוגת שנה דו־ספרתית מתייחס לשנה הנוכחית בתור 117; שזה שריד עצוב מתקופת באג 2000). האם בשנת 2038 יתקיים הכאוס שהבטיחו לנו שיקרה בשנת 2000? עוד מוקדם לדעת, אבל מה שבטוח שהמערכות הראשונות שיהיה כדאי לחשוב על השדרוג שלהן הוא אלו המפעילות כורים אטומיים ומערכות דומות, שמחזיקות מערכות מחשב עתיקות. דווקא על הראספבי פי שלך אני פחות דואג, כי הוא יכול לקבל עדכוני תוכנה סדירים, וסביר שעד אותו המועד יהיה עדכון לקרנל של לינוקס שיסייע במידת מה לצמצום הנזק האפשרי.

    • יהודה (1 ביולי 2017 בשעה 23:35):

      לגמרי לא בטוח שמחשב ההשקיה יוכל להשתדרג בקלות. למשל כרגע הפאי רץ על כרטיס זכרון של 4GB, כאשר 90% כבר תפוסים. מערכת הפעלה שתצא בשנת 2035 (נניח) לטיפול בקרנל 32 ביט, אולי תדרוש מינימום שטח פנוי של 20 ג׳יגה רק לשדרוג, שבטח יחשבו כנפח זעיר בהשוואה להיום. אם המערכת באמת תשרוד עד אז, אני מניח שאני פשוט אוציא ואחליף בפאי 64 ביט. שאר הרכיבים יכולים להישאר כמות שהם. אתה צודק שמערכות כמו כורים גרעינים, הן הרבה יותר קריטיות.

      • תומר כהן (1 ביולי 2017 בשעה 23:56):

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

        • יהודה (2 ביולי 2017 בשעה 0:30):

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

הבא

HTTP/2

הקודם

יומולדת 10 שמח