Insight: Linux Kernel 5.6 To Fix the Year 2038 Issue
For now, it seems like Linux Kernel 5.6 is probably going to solve the possible year 2038 issue. Linux Kernel 5.6 is ready to deal with “Y2038” or “Unix Y2K” problem.
Linux Kernel 5.6 To Fix The Year 2038 Issue
Linux developer Arnd Bergmann mentioned this feature in an email mailed to Linus Torvalds.
The Year 2038 problem is also called Unix Millenium Bug or Y2K38 bug which might cause problems in the data storage situations, such situations where time values are stored or calculated as a signed 32-bit integer.
Embedded systems that use dates for either computation or diagnostic logging are most likely to be affected by the 2038 problem. According to this bug, The time values will be stored as a negative number and the systems will read the date as Dec. 13, 1901 rather than Jan. 19, 2038.
From the email of Arnd bergmann:
y2038: core, driver and file system changes These are updates to device drivers and file systems that for some reason or another were not included in the kernel in the previous y2038 series. I've gone through all users of time_t again to make sure the kernel is in a long-term maintainable state, replacing all remaining references to time_t with safe alternatives. Some related parts of the series were picked up into the nfsd, xfs, alsa and v4l2 trees. A final set of patches in linux-mm removes the now unused time_t/timeval/timespec types and helper functions after all five branches are merged for linux-5.6, ensuring that no new users get merged. As a result, linux-5.6, or my backport of the patches to 5.4 [1], should be the first release that can serve as a base for a 32-bit system designed to run beyond year 2038, with a few remaining caveats: - All user space must be compiled with a 64-bit time_t, which will be supported in the coming musl-1.2 and glibc-2.32 releases, along with installed kernel headers from linux-5.6 or higher. - Applications that use the system call interfaces directly need to be ported to use the time64 syscalls added in linux-5.1 in place of the existing system calls. This impacts most users of futex() and seccomp() as well as programming languages that have their own runtime environment not based on libc. - Applications that use a private copy of kernel uapi header files or their contents may need to update to the linux-5.6 version, in particular for sound/asound.h, xfs/xfs_fs.h, linux/input.h, linux/elfcore.h, linux/sockios.h, linux/timex.h and linux/can/bcm.h. - A few remaining interfaces cannot be changed to pass a 64-bit time_t in a compatible way, so they must be configured to use CLOCK_MONOTONIC times or (with a y2106 problem) unsigned 32-bit timestamps. Most importantly this impacts all users of 'struct input_event'. - All y2038 problems that are present on 64-bit machines also apply to 32-bit machines. In particular this affects file systems with on-disk timestamps using signed 32-bit seconds: ext4 with ext3-style small inodes, ext2, xfs (to be fixed soon) and ufs.