Колонка редактора №22’2008

Доброго времени суток, уважаемые читатели!
Приближающееся летнее затишье в IT-индустрии с каждым днём ощущается всё явственней. Компьютерщики всех мастей потихоньку впадают в спячку. Но — не все. Некоторые совсем даже наоборот — активизируются и принимаются изучать исходные коды популярных программ. Оказывается, там можно найти немало интересного. К примеру, узнать, что для многих пользователей конец света наступит 19 января 2038 года в 3:14:07 по мировому времени (UTC).
Но сначала давайте вспомним рубеж тысячелетий и пресловутую «проблему 2000» («Y2K Bug», ошибка двухтысячного года). В те времена многие программы, написанные до середины 90-х годов, попросту «не знали» о существовании дат после 31 декабря 1999 года и при пересечении этой отметки уходили «назад в прошлое» – к 1900 году. По мнению тогдашней общественности, это могло вызвать катастрофы там, где компьютеры ответственны за жизнь людей — к примеру в диспетчерских аэропортов. На практике, однако, ничего страшного не произошло.
Но на прошлой неделе появились сообщения о новой, куда более реальной проблеме. Началось всё с того, что некий Билл Брэдфорд, один из лидеров неофициальной команды SunHELP, опубликовал статью, посвящённую одной из особеннос-тей определения времени в *nix-системах (к которым, напомню, относятся семейства Linux, Solaris, FreeBSD и MacOS X). Текущее время в этих ОС определяется как количество секунд, прошедших с точки «Начала Эпохи» – с 00:00:00 1 января 1970 года. Для хранения значения времени используется внутренний тип данных time_t, который чаще всего выражается 32-разрядным (4-байтным) целым числом со знаком (signed integer). Таким образом, в операционных системах, отвечающих стандарту POSIX, при достижении 19 января 2038 года, 3:14:07 UTC произойдёт выход значения переменной за рамки допустимых значений. Реакция на это может быть разной — от возникновения системных ошибок (если какая-то программа не сможет корректно обработать исключительную ситуацию) до перевода часов на точке начала отсчёта — 1970 год.
Успокаивает во всей этой ситуации одно: за 30 лет разработчики наверняка успеют решить проблему. Если вообще решение понадобится (читай — Linux ещё будет в ходу).


Рекомендуем почитать: