Тридцать бит тому назад
АрхивКомментарий дня"Ошибка Y2K", наделавшая много шуму четыре года назад, продолжает временами проявлять себя в программных продуктах разных разработчиков. Между тем впервые на ее существование было указано еще полвека назад!
Новость, попавшая в поле зрения популярной компьютерной прессы под конец минувшей недели, должна вызвать ощущение дежа-вю у каждого, кому довелось пережить компьютерную лихорадку на сломе тысячелетий. Суть сообщения проста: американская компания PTC выпустила несколько "заплаток" для ранних версий ряда своих программных продуктов, которые призваны исправить странное поведение этих программ - в некоторых случаях отказывающихся нормально работать с данными, датируемыми началом 2004-го года и сроками, отстоящими ещё дальше. Жалоб на работу программ пока поступило немного, но учитывая, что клиентов у компании несколько десятков тысяч, ситуация может стать катастрофической менее чем через месяц. Источник проблемы известен: в некоторых продуктах PTC для хранения даты, выражаемой в секундах, использована 30-битная переменная. За нулевую точку отсчёта принято 1 января 1970 года (стандартное правило для UNIX-систем), так что 30 бит оказываются переполненными по прохождении немногим более одного миллиарда секунд (230). Результат - некорректная работа софта.
Правда, звучит знакомо? Да, выявленный программистами PTC баг не уникален и принадлежит к целому классу "ошибок Y2K". Название его представляет собой сокращение от "Year 2 K", где "K" символизирует тысячу. Особенно много шуму по поводу возможного проявления одной из таких ошибок было четыре года назад, когда смена даты с 1999 на 2000-й год обещала множество различных проблем для вычислительных машин самого разного свойства: во многих компьютерных программах системная дата записывалась двумя десятичными разрядами, хранившими две последних цифры года. Как известно, тогда всё обошлось малой кровью - благодаря миллиардным суммам, вложенным в проверку и коррекцию программного обеспечения по всему миру, ни государственные, ни частные объекты не пострадали. Но это лишь один, считающийся классическим пример. Класс ошибок Y2K, представители которого порождаются всегда одним и тем же допущением (программист, создающий очередной продукт, предполагает, что его программа вряд ли проработает дольше некоторого, кажущегося разумным срока, либо просто не задумывается о будущем своего детища), включает в себя множество примеров. Это и "финальная дата" в UNIX-системах (во многих из них для хранения системной даты отведены 32 бита, что, считая посекундно от 1970-го, должно привести к переполнению счётчика в 2038 году), это и финальная дата в Microsoft Excel (поле, отведённое для даты, в некоторых случаях может переполниться в 2079 году), это и уже прошедшее 9 сентября 1999 года (9/9/99 может быть спутано с кодом 9999, обозначавшим в некоторых старых системах конец файла) и мн.др. Из-за многочисленности таких дат, им даже дали общее название горизонта событий: незримой границы, пересечение которой равноценно гибели.
Но что самое любопытное, впервые на потенциальную опасность слишком вольного обращения с датами было указано отнюдь не в конце 90-х, а на четыре десятка лет раньше! Именно тогда Боб Бемер (Bob Bemer), один из классиков компьютерной эпохи, разработавший основу для современных форматов представления данных в компьютерной памяти (он считается отцом ASCII и дедушкой языка программирования COBOL) призвал программистов использовать для кодирования даты четыре десятичных разряда вместо двух. Увы, тогда его призыв не был воспринят всерьёз, чем Бемер полвека спустя сам и воспользовался, основав компанию Bigisoft, предлагавшую услуги по профилактике проблемы Y2K. Но, взирая на инцидент с программами PTC, похоже, что и сегодня сиюминутные заботы остаются важней перспективы. Пока гром не грянет?..