~ / topics / Operating Systems
$man operating-systems

Operating Systems

In brief: Whether an operating system survives 2038 depends mostly on whether it, and the programs on it, count time with 64 bits. Every mainstream 64-bit OS does. The open-source Unix systems fixed their 32-bit versions between 2012 (NetBSD) and 2024–2025 (Debian and Ubuntu on ARM). The remaining risks are 32-bit Android, old 32-bit PC software, commercial Unix systems running 32-bit programs, and embedded devices that will never be updated. This page compares them all. Each OS has its own page with details and sources.

Risk level Varies by OS: see matrix (overall High because of embedded and legacy 32-bit)
Status 64-bit OSes fixed. Most 32-bit open-source OSes fixed by 2025. Android LP32, i386 legacy and embedded fleets open
Last reviewed 2026-10-21

Overview

Three questions decide whether a system is 2038-safe:

  1. Kernel: can it keep and expose time beyond 2038? All maintained 64-bit kernels can. 32-bit Linux needs ≥ 5.6.
  2. C library and ABI: is time_t 64-bit for the programs actually running? On 32-bit systems this requires a deliberate ABI transition and a rebuild of all userland.
  3. Data at rest and on the wire: do file systems, log formats, databases and protocols store time in 32 bits? See File-Systems, Databases and File-Formats-and-Protocols.

An OS can be "fixed" while still running old 32-bit binaries through a compatibility layer, and those binaries are not fixed. The matrix below therefore separates native status from legacy risk.

Summary matrix

OS family 64-bit time_t on 64-bit platforms 32-bit platforms: version where 64-bit time_t arrived Remaining risk Detail page
Linux kernel Always 5.1 (time64 syscalls), 5.6 complete (2020) [1] 32-bit legacy syscalls kept for old binaries; some interfaces unsigned to 2106 OS-Linux
glibc Always 2.34 (2021), opt-in _TIME_BITS=64 [2] 32-bit builds without the flag; ABI mismatches OS-Linux
musl (Alpine, OpenWrt, Void-musl) Always 1.2.0 (2020), default [3] Binaries built against musl ≤ 1.1.24 OS-Linux
Debian Always 13 "trixie" (2025) for armel/armhf; transition started 2024-02-27 [4][5] i386 kept 32-bit by design; Debian ≤ 12 armhf OS-Linux
Ubuntu Always 24.04 LTS (2024) for armhf [6] i386 compatibility libraries; ≤ 23.10 armhf OS-Linux
Fedora / RHEL family Always No 32-bit primary arch (ARMv7 dropped in F37) [7] i686 multilib for Wine/Steam remains 32-bit time_t OS-Linux
Gentoo Always musl since 2020; glibc profiles migrating (t64 CHOST, 2024 decision) [8] Unmigrated 32-bit glibc installs OS-Linux
Yocto / Buildroot Always Yocto 4.3 (2023) default; Buildroot BR2_TIME_BITS_64 [9][10] Products on older BSPs OS-Linux, OS-Embedded-and-RTOS
NetBSD Always 6.0 (2012), all ports [11] Old binaries via the compat layer OS-BSD-and-Unix
OpenBSD Always 5.5 (2014-05-01), all platforms [12] Some fields unsigned 32-bit (to 2106) OS-BSD-and-Unix
FreeBSD Always All 32-bit ports except i386 (armv7, powerpc have 64-bit time_t) [13] i386 never fixed; platform retired in 15.0 [14] OS-BSD-and-Unix
illumos (OpenIndiana, SmartOS, OmniOS) 64-bit binaries n/a (64-bit kernel only), but ~90% of utilities are still 32-bit [15] 32-bit userland; IPD 14 in progress OS-BSD-and-Unix
Oracle Solaris 11.4 64-bit binaries n/a (64-bit only kernel); userland largely converted to LP64 [16] 32-bit applications OS-BSD-and-Unix
IBM AIX 64-bit applications n/a: 32-bit applications keep a 32-bit time_t (no IBM statement found) 32-bit apps; JFS1 timestamps [17] OS-BSD-and-Unix
HP-UX 11i v3 64-bit applications n/a: 32-bit apps limited to 2038 [18] Past standard support (2025-12-31) [19] OS-BSD-and-Unix
Windows (NT kernel, Win32) Not applicable: native FILETIME is 64-bit since 1601 [20] MSVC CRT time_t 64-bit by default since VS2005 [21] _USE_32BIT_TIME_T, _time32, pre-2005 binaries, 32-bit fields in formats OS-Windows
macOS Always (LP64) 32-bit apps dropped in 10.15 Catalina (2019) [22] HFS+ and classic Mac dates end 2040-02-06 [23] OS-macOS-and-iOS
iOS / iPadOS Always 32-bit apps dropped in iOS 11 (2017) [24] 32-bit devices (iPhone 5/5c, iPad 4 and older) OS-macOS-and-iOS
Android Always (arm64-v8a, x86_64) Never on LP32: bionic keeps 32-bit time_t, no plan to change [25] 32-bit devices and 32-bit apps; Wear OS, TV, Go and automotive builds OS-Android
VxWorks VxWorks 7 (since 2020) [26] VxWorks 6.9.4.12 RCPL8 (2025) partial [26] VxWorks ≤ 6.9 without RCPL8 OS-Embedded-and-RTOS
QNX 64-bit targets signed 64-bit 7.x 32-bit: unsigned 32-bit (~2106); SDP 8.0 signed 64-bit [27] Signed casts in apps; QNX 4 OS-Embedded-and-RTOS
FreeRTOS n/a (tick-based kernel) Depends on libc; coreSNTP affected (as of 2023-12) [28] Toolchain time_t OS-Embedded-and-RTOS
Zephyr n/a 3.5+ default picolibc with 64-bit time_t [29] Other libc configurations OS-Embedded-and-RTOS
ESP-IDF n/a v5.0 [30] ≤ v4.x firmware OS-Embedded-and-RTOS
Eclipse ThreadX n/a (tick-based kernel) Depends on toolchain libc Toolchain time_t; SNTP/FileX add-ons OS-Embedded-and-RTOS

Remaining-risk heat map

Risk Where
Critical Deployed 32-bit embedded Linux and RTOS firmware with no update path; industrial, automotive and medical fleets
High 32-bit Android devices; i386 legacy binaries (Debian/Ubuntu i386 compat, FreeBSD ≤ 14 i386); 32-bit apps on AIX, HP-UX, Solaris and illumos
Medium Windows applications built pre-2005 or with _USE_32BIT_TIME_T; ext4 file systems with 128-byte inodes and XFS without bigtime; HFS+ (2040)
Low Current 64-bit Linux/BSD/macOS/Windows with up-to-date applications

Risk & compliance notes

Detection & mitigation

See Testing-and-Detection for test methods (clock-forward VMs, faketime, static analysis) and Remediation-Guide for rebuild and migration steps.

See also

References

  1. [GIT PULL] y2038: core, driver and file system changes — Arnd Bergmann, LKML, 2020-01-29. Linux 5.6 readiness; 5.1 time64 syscalls.
  2. glibc NEWS (mirror of glibc.git) — GNU C Library. 2.34 _TIME_BITS=64.
  3. musl 1.2.0 released — musl list (Openwall), 2020-02-20.
  4. ReleaseGoals/64bit-time — Debian Wiki. Transition timeline and the i386 exclusion.
  5. Debian 13 "trixie" release notes §2.2.6 — Debian.
  6. Ubuntu 24.04 LTS release notes — Canonical.
  7. Changes/RetireARMv7 — Fedora Project Wiki.
  8. Project:Toolchain/time64 migration — Gentoo Wiki and Gentoo Council summary 2024-10-13.
  9. Release 4.3 (nanbield) migration guide — Yocto Project.
  10. MISC-TN-033: How to cope with Y2038 problem — DAVE Embedded Systems wiki. Buildroot BR2_TIME_BITS_64.
  11. Announcing NetBSD 6.0 — The NetBSD Project, 2012.
  12. OpenBSD 5.5 — OpenBSD, 2014-05-01.
  13. arch(7) — FreeBSD Manual Pages.
  14. FreeBSD 15.0-RELEASE Release Notes — FreeBSD Project.
  15. IPD 14: illumos and Y2038 — illumos (GitHub).
  16. OS-8097: 64-bit userspace for SmartOS — SmartOS. Links Oracle's Solaris 11.4 LP64 conversion blog.
  17. IBM APAR IV92515 — IBM Support. istat fix; JFS 32-bit timestamp limitation (seen in search results).
  18. HPE Community: how to set date beyond 31st Dec 2037. Quotes HP-UX getdate documentation (seen in search results).
  19. The last supported version of HP-UX is no more — The Register, 2026-01-05 (seen in search results).
  20. FILETIME structure — Microsoft Learn.
  21. time, _time32, _time64 — Microsoft Learn and Python patch note on the MSVC++ 2005 time_t change — python.org, 2006-03.
  22. 32-bit app compatibility with macOS — Apple Support.
  23. Technical Note TN1150: HFS Plus Volume Format — Apple Developer.
  24. Apple reminds developers that all Mac and iOS 11 apps must support 64-bit — Neowin, 2017 (seen in search results).
  25. 32-bit ABI bugs (bionic docs) — Android Open Source Project.
  26. Back to the Future and the Year 2038 Problem — Wind River blog, 2025-08-27.
  27. What time is it? — QNX OS 8.0 Programmer's Guide.
  28. FreeRTOS Community Forums: 2038 thread, 2023-12.
  29. Zephyr 3.5.0 release notes — Zephyr Project and picolibc sys/_types.h — GitHub.
  30. System Time — ESP-IDF Programming Guide — Espressif.