The Year 2038 Problem Explained
On 32-bit systems, the Unix time_t type is a signed 32-bit integer. It stores seconds since January 1, 1970 00:00:00 UTC. The maximum value of a signed 32-bit integer is 2,147,483,647, which corresponds to 03:14:07 UTC on January 19, 2038. One second later, the counter overflows and wraps to -2,147,483,648 -- December 13, 1901 in calendar time. Any software that uses time_t for comparisons, expiry checks, file timestamps, or log entries will break in ways that range from subtle to catastrophic.
The Multi-Year Linux Kernel Effort
Fixing the Linux kernel for Y2038 required changing thousands of syscall interfaces, internal data structures, and filesystem timestamp formats. The work spanned several years of patches by Arnd Bergmann and many contributors. The kernel had to maintain backward compatibility with 32-bit userspace binaries while internally using 64-bit timestamps. New syscall variants (e.g., clock_gettime64, futex_time64) were added so that 32-bit programs compiled against a modern libc could use 64-bit timestamps even on a 32-bit kernel.
What Linux 5.6 Completed
Linux 5.6, released 29 March 2020, was the milestone release that completed the in-kernel 64-bit time transition. After 5.6, all internal kernel code was Y2038-safe. The remaining work shifted to userspace: libc implementations (musl, glibc), language runtimes, and applications themselves need to be compiled with 64-bit time_t, a change that requires a toolchain-level flag (-D_FILE_OFFSET_BITS=64 and -D_TIME_BITS=64 on glibc, or simply using musl which defaults to 64-bit time_t on 32-bit targets).
The Embedded Linux Challenge
The practical Y2038 problem is concentrated in embedded Linux: routers, industrial controllers, medical devices, and IoT hardware that run 32-bit ARM or MIPS kernels with hardware that cannot support 64-bit architectures. Many of these devices have firmware that cannot be updated, or are managed by vendors who no longer exist. Some will be replaced before 2038; others will not. Researchers estimate tens of millions of such devices remain in production with no Y2038 mitigation plan.
Filesystem Timestamps: A Separate Problem
Even with a Y2038-safe kernel and libc, filesystem timestamps remain an issue. The ext3 filesystem stores inode timestamps as 32-bit values; ext4 extended this to 34-bit (covering dates through 2446). FAT32, the filesystem used on most SD cards and USB drives, uses a 2-second resolution date field valid only through 2107. XFS and Btrfs use 64-bit nanosecond timestamps and are effectively immune. Systems must use a Y2038-safe filesystem to fully avoid the problem.