At riskConfirmedOperating systems › Android
32-bit Android devices and builds (incl. Android Go, TV, Wear OS, car head units)
deadline 2038-01-19 03:14:07 UTC
Why: Bionic's time_t is 32-bit on 32-bit ABIs, and Google has no plan to adopt the kernel's time64 interfaces. The whole system is affected.
What to do: Specify 64-bit userspace in procurement, and plan replacement of 32-bit devices.
Details & sources →
At riskConfirmedOperating systems › Linux
32-bit glibc programs built without _TIME_BITS=64
deadline 2038-01-19 03:14:07 UTC
Why: Even glibc 2.34+ keeps a 32-bit time_t by default on 32-bit platforms. 64-bit time is opt-in.
What to do: Rebuild with -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 (glibc 2.34+, kernel 5.1+). Rebuild all libraries that exchange time structures together.
Details & sources →
At riskConfirmedOperating systems › Linux
32-bit Linux with a kernel older than 5.6
deadline 2038-01-19 03:14:07 UTC
Why: Kernels before 5.1 have no 64-bit time system calls for 32-bit programs, and 5.1–5.5 are incomplete.
What to do: Move to Linux 5.6 or later (or a vendor backport), then rebuild userland with 64-bit time.
Details & sources →
At riskConfirmedOperating systems › Linux
uClibc-ng before 1.0.46
deadline 2038-01-19 03:14:07 UTC
Why: No time64 support. uClibc-ng is common in older embedded and router SDKs.
What to do: Upgrade to 1.0.46+ with TIME64 enabled, on kernel 5.1+.
Details & sources →
At riskConfirmedOperating systems › Embedded & RTOS
VxWorks 6.x (without RCPL8) and earlier
deadline 2038-01-19 03:14:07 UTC
Why: These have a 32-bit time_t. VxWorks 7 supports 64-bit time_t only in a VSB configured for it.
What to do: Move to VxWorks 7 with a 64-bit time_t VSB.
Details & sources →
At riskConfirmedOperating systems › Android
32-bit Android apps (armeabi-v7a) on 64-bit devices
deadline 2038-01-19 03:14:07 UTC
Why: Native code in a 32-bit app uses the 32-bit ABI, even on a 64-bit phone.
What to do: Ship 64-bit (arm64-v8a) native libraries.
Details & sources →
At riskConfirmedOperating systems › BSD & Unix
32-bit applications on Solaris, illumos, AIX and HP-UX
deadline 2038-01-19 03:14:07 UTC
Why: 64-bit applications are safe, but 32-bit ones keep a 32-bit time_t. On illumos about 90% of utilities are still 32-bit, and HP-UX is past standard support.
What to do: Rebuild as 64-bit or migrate, and check JFS1 timestamps on AIX.
Details & sources →
At riskConfirmedOperating systems › Windows
32-bit editions of Windows (including Windows 10)
deadline 2038-01-19 03:14:07 UTC
Why: A 2024 demonstration showed core functions breaking when the clock was set to 2038.
What to do: Move to 64-bit Windows.
Details & sources →
At riskConfirmedOperating systems › Linux
Debian 12 and earlier, Ubuntu 23.10 and earlier (32-bit ARM)
deadline 2038-01-19 03:14:07 UTC
Why: armhf and armel used a 32-bit time_t until the 2024 transition.
What to do: Upgrade to Debian 13 or Ubuntu 24.04 LTS, and rebuild third-party armhf software.
Details & sources →
At riskConfirmedOperating systems › Linux
Debian and Ubuntu i386
deadline 2038-01-19 03:14:07 UTC
Why: Deliberately left on a 32-bit time_t so legacy binaries keep working.
What to do: Move workloads to amd64, and treat i386 only as a legacy-compatibility layer.
Details & sources →
At riskConfirmedOperating systems › Embedded & RTOS
ESP-IDF 4.4 and earlier (ESP32)
deadline 2038-01-19 03:14:07 UTC
Why: These have a 32-bit time_t. ESP-IDF 5.0 moved to 64-bit.
What to do: Rebuild firmware with ESP-IDF 5.0 or later.
Details & sources →
At riskConfirmedOperating systems › BSD & Unix
FreeBSD i386 (13.x, 14.x) and 32-bit binaries under COMPAT_FREEBSD32
deadline 2038-01-19 03:14:07 UTC
Why: FreeBSD i386 never moved to 64-bit time. The platform was retired in 15.0.
What to do: Move to amd64.
Details & sources →
At riskConfirmedOperating systems › Linux
musl 1.1.24 and earlier
deadline 2038-01-19 03:14:07 UTC
Why: These versions have a 32-bit time_t on 32-bit platforms. Older Alpine, OpenWrt and embedded images inherit it.
What to do: Upgrade to musl 1.2.0 or later and rebuild.
Details & sources →
At riskConfirmedOperating systems › Embedded & RTOS
newlib toolchains built with _USE_LONG_TIME_T
deadline 2038-01-19 03:14:07 UTC
Why: On 32-bit microcontrollers, long-based time_t is 32-bit.
What to do: Use a toolchain built without _USE_LONG_TIME_T.
Details & sources →
At riskConfirmedOperating systems › Windows
Windows programs built with Visual Studio 2003 or earlier, or with _USE_32BIT_TIME_T
deadline 2038-01-19 03:14:07 UTC
Why: These use the old 32-bit time_t. Microsoft warns such programs "may fail after January 18, 2038".
What to do: Rebuild with a current compiler and remove _USE_32BIT_TIME_T.
Details & sources →
At riskConfirmedOperating systems › macOS & iOS
32-bit iPhones and iPads (iPhone 5/5c, iPad 4 and older)
deadline 2038-01-19 03:14:07 UTC
Why: These are capped at iOS 10 with a 32-bit time_t. The same devices needed emergency updates for the 2019 GPS rollover.
What to do: Retire these devices.
Details & sources →
At riskConfirmedOperating systems › macOS & iOS
32-bit Mac apps (macOS 10.14 and earlier) and Mac OS X 10.4–10.6 with a 32-bit kernel
deadline 2038-01-19 03:14:07 UTC
Why: 32-bit Darwin uses a 32-bit time_t. On 32-bit kernels, the kernel itself is affected too.
What to do: Retire or isolate these systems.
Details & sources →
At riskConfirmedOperating systems › Linux
Login records (utmp, wtmp, lastlog) on glibc before 2.40
deadline 2038-01-19 03:14:07 UTC
Why: These use a 32-bit seconds field even on x86-64. glibc 2.40 made it unsigned, which moves the limit to 2106.
What to do: Upgrade glibc and migrate tools off utmp/wtmp (for example to systemd-logind/wtmpdb).
Details & sources →