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:
- Kernel: can it keep and expose time beyond 2038? All maintained 64-bit kernels can. 32-bit Linux needs ≥ 5.6.
- C library and ABI: is
time_t64-bit for the programs actually running? On 32-bit systems this requires a deliberate ABI transition and a rebuild of all userland. - 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
- Ownership: the OS vendor owns the kernel and libc. The product owner owns application rebuilds, data formats and device firmware.
- What to inventory: for each system, record the architecture (32/64), OS and version, libc and version,
sizeof(time_t)for each deployed binary, the file-system timestamp range, and the expected retirement date. Use Risk-Assessment-Checklist. - Retirement date is the key field. Anything expected to run past 2037 needs a verified 64-bit time path, or it needs to be replaced.
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
- Year-2038-Problem
- OS-Linux · OS-BSD-and-Unix · OS-Windows · OS-macOS-and-iOS · OS-Android · OS-Embedded-and-RTOS
- Programming-Languages · Devices-and-Embedded-Systems · File-Systems
References
- [GIT PULL] y2038: core, driver and file system changes — Arnd Bergmann, LKML, 2020-01-29. Linux 5.6 readiness; 5.1 time64 syscalls.
- glibc NEWS (mirror of glibc.git) — GNU C Library. 2.34
_TIME_BITS=64. - musl 1.2.0 released — musl list (Openwall), 2020-02-20.
- ReleaseGoals/64bit-time — Debian Wiki. Transition timeline and the i386 exclusion.
- Debian 13 "trixie" release notes §2.2.6 — Debian.
- Ubuntu 24.04 LTS release notes — Canonical.
- Changes/RetireARMv7 — Fedora Project Wiki.
- Project:Toolchain/time64 migration — Gentoo Wiki and Gentoo Council summary 2024-10-13.
- Release 4.3 (nanbield) migration guide — Yocto Project.
- MISC-TN-033: How to cope with Y2038 problem — DAVE Embedded Systems wiki. Buildroot
BR2_TIME_BITS_64. - Announcing NetBSD 6.0 — The NetBSD Project, 2012.
- OpenBSD 5.5 — OpenBSD, 2014-05-01.
- arch(7) — FreeBSD Manual Pages.
- FreeBSD 15.0-RELEASE Release Notes — FreeBSD Project.
- IPD 14: illumos and Y2038 — illumos (GitHub).
- OS-8097: 64-bit userspace for SmartOS — SmartOS. Links Oracle's Solaris 11.4 LP64 conversion blog.
- IBM APAR IV92515 — IBM Support. istat fix; JFS 32-bit timestamp limitation (seen in search results).
- HPE Community: how to set date beyond 31st Dec 2037. Quotes HP-UX getdate documentation (seen in search results).
- The last supported version of HP-UX is no more — The Register, 2026-01-05 (seen in search results).
- FILETIME structure — Microsoft Learn.
- time, _time32, _time64 — Microsoft Learn and Python patch note on the MSVC++ 2005 time_t change — python.org, 2006-03.
- 32-bit app compatibility with macOS — Apple Support.
- Technical Note TN1150: HFS Plus Volume Format — Apple Developer.
- Apple reminds developers that all Mac and iOS 11 apps must support 64-bit — Neowin, 2017 (seen in search results).
- 32-bit ABI bugs (bionic docs) — Android Open Source Project.
- Back to the Future and the Year 2038 Problem — Wind River blog, 2025-08-27.
- What time is it? — QNX OS 8.0 Programmer's Guide.
- FreeRTOS Community Forums: 2038 thread, 2023-12.
- Zephyr 3.5.0 release notes — Zephyr Project and picolibc sys/_types.h — GitHub.
- System Time — ESP-IDF Programming Guide — Espressif.