9 сентября 2001 года в 5 часов 46 минут 40 секунд утра пройдет один миллиард
секунд с 0 часов 0 минут 0 секунд 1 января 1970 года. Именно с этой даты
ведется отсчет времени в популярной компьютерной операционной системе Unix и
некоторых других ОС.
В компьютерном представлении время исчисляется сначала в идущих подряд
секундах, которые затем переводятся в минуты, часы, дни и года. Разработчики
операционных систем в качестве точки отсчета заложили начало 1970 года и
отвели для всего исчисления времени 4 байта, или 32 бита.
Число комбинаций битов должно исчерпаться в 2038 году - как отмечают
специалисты, все Unix-системы теоретически одновременно должны перестать
работать, когда с 1 января 1970 года пройдет 231 секунд. В данный
же момент время приближается к 999999999.
Смысл так называемой "Ошибки-1000000000" заключается в том, что в языке
программирования Perl, на котором написано очень большое количество
использующихся на интернет-сайтах программ (так называемых "cgi-скриптов"),
при работе со временем часто используются текстовые строки, что при переходе
в новый разряд может вызвать сбои, так как согласно соответствующим
принципам программирования при строчном сравнении "1000000000" меньше
"999999999".
Скрипты, использующие подобные операции сравнения, применяются при
обслуживании гостевых книг, форумов, списков новых поступлений, новостных
лент, генерации списков рассылки и для других целей. Ошибка будет
проявляться в некорректной сортировке объектов по времени, что может
привести к серьезным сбоям в работе некоторых web-сайтов.
Определенные неполадки, связанные с вышеописанной проблемой, появились в
работе Lenta.Ru в пятницу. После принятия соответствующих мер неполадки были
устранены.
Как отмечает системный администратор Lenta.Ru Максим Мошков, даже если
ничего не исправлять в скриптах, сортировка объектов придет в норму после
того, как все значения времени в списках превысят 1000000000 - в большинстве
баз данных это должно произойти через несколько дней.