Чи беруть програмісти в борг у власного майбутнього? На яких умовностях тримається наш світ? І що станеться з нами, якщо ці умовності припиняють працювати? У цій статті ми розберемося, що таке проблема 2000 року, як тоді вдалося уникнути катастрофи, і що за виклик чекає на нас у 2038 році.

 

      Ви можете сказати, що до 2038 року ще дуже далеко. Навіщо думати про якісь проблеми, які можуть статися колись? Проте, зверніть увагу що проблеми 2000 року нас наздоганяють ще й досі. Про що йде мова?  

 

Програмне забезпечення створило катастрофу

 

 

      Нещодавно наступив новий рік і в Іспанії зламалися потяги. 1 січня зупинилися 106 електричних експресів, які мали відвезти десятки тисяч людей у Мадрид, Валенсію, Барселону та інші міста. Справа була у тому, що програмне забезпечення їх батарей рахувало роки не так, як всі інші програми на борту. І коли воно зазнало відкладеної на 25 років проблеми 2000 року, програми почали передавати одна одній дати, що не відповідали один одному, і потяги зупинились. 

 

 

      Але 25 років тому люди боялися, що зупиняться не лише потяги. У 1999 світ охопила паніка: зупинитися у 2000 мали системи безпеки атомних реакторів і забезпечення ракетних шахт, літаки мали впасти з неба, а банківські рахунки — зійти з розуму. А все через те, як у комп’ютерах записувалася дата.  

 

Що таке технічний борг?

 

      У часи перших комп’ютерів пам’ять була дуже дорога і програмісти рахували кожен біт. Тож коли вони записували рік, вони вирішили записувати лише дві останніх цифри року. Ось так: 01.01.81. Це займало лише 8 біт: 4 на ліву цифру і 4 на праву. Комп’ютери з’явилися у XX сторіччі, тож переплутати роки з іншим сторіччям було неможливо.  

      Але проблема підкралася, коли підійшло нове сторіччя, і це несподівано стало можливим.  

      Технічний борг — це проблеми, які виникають через застосування тимчасових рішень, які з часом все одно треба буде переробити. Вставляючи прості, але тимчасові рішення, програмісти наче беруть в борг у власного майбутнього. І запис дати був технічним боргом на масштабі всієї цивілізації.  

      Багато старих систем вимагало перероблення дат і величезні гроші були витрачені на те, щоби запобігти проблемі 2000 року. Програмісти сиділи в офісах чи не цілодобово, розбираючись в лабіринтах старого коду, який мав от-от зламатися. І їхні старання увінчались успіхом: катастрофічних багів не сталося. У Японії зламався автоматичний продаж квитків на потяги, у Китаї вийшли з ладу таксометри, у США — державний реєстр виробників тютюну. Хвиля багів прокотилася по усій планеті, але жоден з них не привів до катастрофи, якої так боялися.

 

 

      Приклад багу — зламане табло у Центральній Інженерній Школі Нанта.

 

      Проте це ще не все. Наступна проблема, ще один прадавній технічний борг, невпинно ближчає. І це — проблема 2038 року.

 

Проблема 2038 року

      2000 рік був першим у новому столітті та новому тисячолітті. Але що такого особливого у 2038 році? 

 

 

 

      Багато систем досі користуються часом Unix — давно введеним стандартом. За цим стандартом час рахується у секундах з 01.01.1970 і зберігається у знаковому цілому числі. 

      Таке число може зберігати лише 2 у 31 ступені значень (адже 1 біт зарезервований під знак, щоб позначати дати й до 1970, як від’ємні числа). 

      Ці 2 у 31 ступені секунд  кінчаються 19 січня 2038 о 03:14:07. А о 03:14:08 число переповниться і змінить крайній лівий біт на 1. 

      Наперекір логіці, зазвичай негативні числа у компʼютері записують з «1» в крайньому лівому біті. У компʼютерному записі негативні числа йдуть після позитивних. 

      Таким чином весь Unix-час стане зворотнім. Дати перескочать назад і компʼютери вважатимуть, що зараз грудень 1901 року (за 68 років і місяць до 1970 — бо січень 2038 через 68 років і місяць від 1970).  

      Вирішення доволі просте — перейти з 32-бітного часу на 64-бітний. 

      Але, як і з проблемою 2000 року, від проблеми 2038 найбільше постраждають вбудовані системи, адже неправильна дата вшита у їх прошивку. Можуть зламатися системи кредитних карток, wi-fi роутери, і навіть мобільні телефони. 

      Залишається лиш сподіватися, що до 2038 якнайбільше застарілих систем замінять на нові. І що програмісти зуміють впоратися з тими, що замінені не будуть.

 

За матеріалами:

1. https://cybercalm.org/novyny/pomylka-2000-znovu-zayavyla-pro-sebe/

2. https://allthatsinteresting.com/what-is-y2k

Іван Синенко

 

 

 

 

 

Популярні статті

Читати далі