Najbardziej spektakularne błędy programistów w historii informatyki

Błędy w oprogramowaniu były, są i będą, a przynajmniej nic nie wskazuje na to żeby miało się coś w tym temacie zmienić. Zdecydowana większość z nich przechodzi bez większego echa, są jednak takie, które doprowadzają do olbrzymich strat finansowych, paraliżu systemów informatycznych dla milionów osób czy też śmierci. Programiści niestety nie są w stanie wyeliminować wszystkich bugów ze swojego kodu co skutkuje od czasu do czasu „zamieszaniem” na mniejsza bądź większą skalę.

Fot: geralt, CC0 Public Domain.

Fot: geralt, CC0 Public Domain.

Pomimo tego, że informatyka jest stosunkowo młodą dziedziną nauki to na przestrzeni ostatnich lat mogliśmy usłyszeć o różnych błędach programistów, których konsekwencje odczuwały miliony osób na całym świecie. Pewnie najsłynniejszym tego przykładem jest tak zwany „problem roku 2000”. Przyjrzyjmy się więc kilku najciekawszym „wpadkom”…

Problem roku 2000

Problem roku 2000 inaczej nazywany millenium bug wywołał spore zamieszanie wraz z nadejściem 2000 roku. Wiele systemów informatycznych uległo wtedy awarii lub podawało błędną datę 1 stycznia 1900 roku. Problem ten spowodowany był przez sposób zapisu daty w programach komputerowych, który polegał na zapisywaniu roku jako dwu bajtowej liczby np. 01 – co oznaczało rok 1901. Oczywiście pierwsze komputery pojawiły się w latach 50 XX w. i posiadały stosunkowo małą ilość pamięci masowej. Programiści więc wpadli na „genialny” pomysł oszczędności i postanowili zapisywać rok jako właśnie 2 bajtowy ciąg znaków co w oczywisty sposób umożliwiało przechowywanie informacji o stuleciu.

O możliwych konsekwencjach tego błędu wraz z nadejściem nowego stulecia czyli roku 2000 zaczęto już mówić w roku 1958, ale wiele osób po prostu zignorowało te ostrzeżenia. W kolejnych latach firmy informatyczne wpadły w pułapkę zapewniania wstecznej kompatybilności co uniemożliwiało poprawę złego sposobu zapisu daty. Tykający zegar zmusił jednak skutecznie programistów do usunięcia tego bugu co wraz z nastaniem roku 2000 skutkowało sporadycznie niewielką ilością awarii.

Warto tutaj dodać, że „problem roku 2000” nie dotyczył systemu Linux gdyż czas w tym systemie jest obliczany w trochę inny sposób. Jeśli ktoś jednak myśli, że programiści pracujący nad tym OS’em są lepsi od innych to muszę go wyprowadzić z błędu, gdyż użytkowników tego oprogramowania w 2012 roku spotkała znacznie poważniejsza awaria, której skutki odczuły miliony osób na całym świecie.

Jedna sekunda więcej i miliony osób dotkniętych awariom

Ile sekund może mieć minuta? Jeśli ktoś myśli, że 60 to się myli. Biorąc pod uwagę sekundy przestępne jedna minuta może mieć od 59 do 61 sekund. To spokojnie wystarczy, aby systemy komputerowe kolokwialnie mówiąc „zgłupiały”. Tak też się stało 30 czerwca 2012 roku o godzinie 23:59:60 UTC. Wtedy właśnie została dodana sekunda przestępna co spowodowało potężną awarię systemu Linux. Miliony osób nie mogły skorzystać z komputera czy serwisów internetowych takich jak LinkedIn czy Reddit. Problemy nie ominęły również takiego giganta jak Google.

Jak się szybko okazało, awaria serwerów była najmniejszym zmartwieniem administratorów. Dodanie dodatkowej sekundy umożliwiało ataki hakerskie na wszystkie maszyny pracujące pod kontrolą systemu Linux.

UWAGA: Następne dodanie sekundy przestępnej będzie miało miejsce 30 czerwca 2015 roku o godzinie 23:59:59 czasu UTC.

Problem z dodatkowymi sekundami, to nie jedyny kłopot programistów odpowiedzialnych za Unix’a. Za parę lat możemy mieć powtórkę z roku 2000…

Problem roku 2038

Jak już wspomniałem wcześniej system Linux był odporny na nadejście nowego stulecia w roku 2000. Wynika to ze sposobu obliczania czasu, który polega na zliczaniu sekund od rozpoczęcia tak zwanej „epoki Unix’a” (Unix Epoch) czyli od 1 stycznia 1970 roku, 00:00:00 UTC – bez uwzględniania sekund przestępnych. Problem polega na tym, że czas ten zapisywany jest w 32 bitowej zmiennej typu integer (int), która umożliwia zapisanie 2 147 483 647 kombinacji. Tak więc o godzinie 03:14:07 UTC, 19 stycznia 2038 dojdzie do przepełnienia i licznik zostanie cofnięty do wartości -2 147 483 648 co spowoduje wyświetlenie daty: 13 grudnia 1901, 20:45:52 UTC zamiast 19 stycznia 2038, 03:14:08 UTC.

Błąd ten można bardzo łatwo naprawić zamieniając typ wspomnianej wyżej zmiennej na 64 bitową reprezentację czasu (time_t). Aktualizacja ta jest już powoli wdrażana.

Wybiegliśmy teraz trochę w przyszłość, więc pora znowu wrócić do początków informatyki czyli lat 80 XX w. kiedy to przez błąd programistyczny życie straciło kilkadziesiąt osób.

Zbyt duże dawki promieniowania przez błąd oprogramowania

Therac-25 to urządzenie stosowane w latach 80 XX w. do radioterapii nowotworów. W latach 1985-1987 na skutek błędu programistycznego w sterowniku, stosowanie tego sprzętu doprowadziło do przynajmniej 5 potwierdzonych ofiar śmiertelnych. Badani pacjenci otrzymywali znacznie większe dawki promieniowania sięgające nawet kilkuset grejów.

Jak się następnie okazało główną przyczyną tych wypadków był błąd typu race condition w wyniku czego w pewnych okolicznościach – bardzo szybkiej obsługi urządzenia przez operatora, nie dochodziło do prawidłowej inicjalizacji parametrów zabiegu.

Przypadek ten jest obecnie szeroko omawiany przy temacie testowania oprogramowania poruszanym na studiach informatycznych.

„Najdroższy myślnik w historii”

22 lipca 1962 roku pracownicy NASA z przylądku Canaveral na Florydzie wystrzelili rakietę nośną mającą na celu wyniesienie na orbitę Wenus, sondy kosmicznej Mariner 1. Zadanie to niestety nie powiodło się przez trywialny błąd popełniony w trakcie pracy nad oprogramowaniem mającym na celu zabezpieczenie rakiety na wypadek uszkodzenia zewnętrznej anteny odbierającej sygnały z ziemi.

Jak wykazało dochodzenie, komputer pokładowy rakiety odbierając nieprawidłowe komendy wydawane przez centrum dowodzenia uruchomił procedurę awaryjną tak aby przeprowadzić cały lot zgodnie z zapisanymi w pamięci danymi. Pech chciał, że w oprogramowaniu tym doszło do błędu polegającego na przegapieniu kreski w trakcie przepisywania równania. Co ciekawe była ona odpowiedzialna za zaokrąglanie pochodnej. Bez tego jednego myślnika program komputerowy traktował każdą, nawet najmniejszą zmianę prędkości jako bardzo ważną co skutkowało wykonywaniem serii gwałtownych ruchów i zboczeniem z kursu. W efekcie inżynierowie NASA widząc „dziwne” zachowanie rakiety zdecydowali się w 293 sekundzie wysłać sygnał samozniszczenia.

Nieco ponad miesiąc po tym wydarzeniu, planowana misja została wykonana przez identyczną sondę Mariner 2 (rzecz jasna z usuniętym bugiem).

Błąd ten został później nazwany „najdroższym myślnikiem w historii”.

, , , , , , , , , , , , ,

  • Andrzej Kopeć

    Ad. „Problem roku 2000” – zakładam, że chodziło o 2 bajty a nie dwa bity? Na dwóch bitach można zapisać 4 różne wartości – trochę za mało na określenie roku :P

    • Oczywiście chodzi o 2 bajty, już poprawiam ;)

  • anonymous

    „Wenusa” to jakaś nowa planeta?

    • Oj tam, szczegóły ;) Ale poprawiłem.