Home / What is Y2038
Explainer
What is the Year 2038 problem?
It is an integer overflow. Unix time counts seconds since 00:00:00 UTC on 1 January 1970. When that count is stored in a signed 32-bit integer, the last valid value is 2,147,483,647 — 03:14:07 UTC on 19 January 2038.
One second later the two’s-complement value wraps to −2,147,483,648. Systems that interpret that as a Unix time read 20:45:52 UTC on 13 December 1901. Clocks jump backward 136 years. Certificates look expired. Schedulers refuse to run. Files look older than the disk that holds them.
The arithmetic
| Quantity | Value |
|---|---|
| Unix epoch | 1970-01-01 00:00:00 UTC |
| INT32_MAX seconds | 2,147,483,647 |
| Last good second | 2038-01-19 03:14:07 UTC |
| Overflow second | 2038-01-19 03:14:08 UTC |
| Wrapped interpretation | 1901-12-13 20:45:52 UTC |
| Unsigned 32-bit ceiling | 2106-02-07 06:28:15 UTC |
| Signed 64-bit ceiling | year 292,277,026,596 |
It is not Y2K
Y2K was a decimal encoding: two digits for the year. Y2038 is a binary width: 31 magnitude bits plus a sign bit. The fix is also different. You cannot slap a century window on a 32-bit time_t without breaking either pre-1970 dates or the ABI of every library that passes time values.
It can fail before 2038
Any code that adds a duration to “now” and stores the result in 32 bits will overflow early. The textbook case is AOLserver on 13 May 2006: a one-billion-second timeout landed past 2038, the expiry became a date in the past, and the process crashed. Pension calculators, lease systems, certificate generators and 15-year maintenance plans hit the same wall as soon as they look forward far enough.
That forward look is what this site calls Backwards Risk.
What is actually still at risk
64-bit desktops, phones and servers already use 64-bit time_t. The remaining exposure is narrower and harder:
- 32-bit Linux userland that never opted into time64 (Debian i386 is the explicit compatibility hold-out).
- On-disk and on-the-wire formats with a 4-byte time field: old ext2/3 inodes, XFS without
bigtime, MySQLTIMESTAMP, binary protocols, firmware logs. - Embedded and industrial devices with 10–30 year service lives and no practical update path.
- Application code that stored Unix time in a 32-bit
INTcolumn, a Clongon LP32, or a language binding that still talks 32-bit time.
See affected systems, Linux, filesystems and databases.
The neighbouring deadlines
Unix Y2038 is one rollover in a cluster. NTP era 0 ends on 7 February 2036. DVB-SI 16-bit dates roll on 23 April 2038. The legacy GPS week number rolls on 20 November 2038. Those are different representations. They just land in the same two-year band.