Thursday, February 14, 2008

year 2038 problem: Y2K38 Bug has started...!

On January 19, 2038, UNIX-based programs and UNIX-like operating systems will run out of time. To be more precise, at 3:14:07 GMT, UNIX will be exactly 1 billion seconds old. Many see this as a milestone, but from a technical point of view, this can mean disaster for computer programs and systems around the world.

UNIX keeps track of time in a 4-byte integer that represents the number of seconds after January 1, 1970 12:00:00.
For example, a time of 60 represents the date January 1, 1970 12:01:00. A 4-byte integer has a maximum value of 2,146,483,547. This time (known as maximum time) corresponds exactly to January 19, 2038 3:14:07. This explains why UNIX programs in large, were pretty much unaffected by the Y2K bug - since it kept track of time in units of seconds. However, its own version of Y2K will occur a second past the maximum time.

At exactly January 19, 2038 3:14:08 (one second past the maximum UNIX time), one of two things can happen to programs that keep track of time with this format. It will either crash and stop functioning altogether, or it will rollback time to the beginning of UNIX time: the first minute of 1970.

What this means for computer programs and systems that haven't been fixed depends on the program itself. The consequences can be similar those predicted with the Y2K bug.

Many pieces of software that involve future dates (i.e. Calendars, Investment calculators etc.) are already experiencing problems with the 2038 bug, being unable to involve any dates past 2038.

Also, some calculations that involve averaging dates have begun to fail as well. For example, if an algorithm adds two dates together and then divides by 2 to find the middle date, it would fail.