~ / at-risk
$./check-2038 --at-risk-first

2038 Risk Register

97 systems, products, formats and practices, with the ones that will break listed first. Confirmed means there is a vendor advisory, a CVE, a documented limit or a demonstrated failure. Likely is a judgement about a whole class of device (typical software and lifetimes) where no specific product has failed in public yet. Each entry links to the page that carries its sources.

57At risk49 confirmed · 8 likely 12Dependson version, build or setting 8Different deadline2036, 2040, 2106, 2107… 20Not affectedand why

At risk 57

Fails at or before its deadline unless something is changed. Ordered by impact, with confirmed items first.

Devices & embedded 15

At riskConfirmedDevices & embedded › Industrial & energy

Veeder-Root TLS4B automatic tank gauge (CVE-2025-55067)

deadline 2038-01-19 03:14:07 UTC

Why: CISA ICSA-25-296-03. At 2038-01-19 the clock "resets to December 13, 1901", disrupting login, history and leak-detection functions. The failure can be triggered early by time manipulation.

What to do: Apply the vendor fix when released (pending at publication, 2025-10-23), and restrict network access to time settings.

Details & sources →
At riskConfirmedDevices & embedded › Industrial & energy

WAGO controllers, firmware before 4.10.0 (CVE-2025-0101)

deadline 2038-01-19 03:14:07 UTC

Why: CERT@VDE advisory VDE-2025-007. A low-privileged user can set the date past the 32-bit limit, and functions may misbehave or stop.

What to do: Update to firmware 4.10.0 (FW32).

Details & sources →
At riskLikelyDevices & embedded › Industrial & energy

Energy and grid equipment (protection relays, substation gateways, smart meters)

deadline 2038-01-19 03:14:07 UTC

Why: These have 15–20+ year lifetimes. IEC 61850 Edition 1 timestamps are signed 32-bit, and GPS/PTP timing chains add separate rollover risks.

What to do: Check IEC 61850 edition support and firmware, and include GPS-disciplined clocks in the inventory.

Details & sources →
At riskLikelyDevices & embedded › Industrial & energy

Industrial controllers, PLCs, HMIs and RTUs on 32-bit firmware

deadline 2038-01-19 03:14:07 UTC

Why: Typical service life is 15–30 years, and many run 32-bit RTOS or Linux firmware. Researchers have triggered 2038 failures early in real ICS devices by manipulating NTP or GPS time.

What to do: Inventory firmware and OS versions, ask vendors for a written 2038 statement, and plan replacement where no fix exists.

Details & sources →
At riskLikelyDevices & embedded › Medical

Medical devices (implants, infusion pumps, imaging, lab systems)

deadline 2038-01-19 03:14:07 UTC

Why: These have 10–15+ year lives, and firmware changes need re-certification. No FDA 2038-specific guidance was found.

What to do: Add 2038 to procurement and lifecycle reviews, and ask manufacturers for statements early because fixes take years.

Details & sources →
At riskLikelyDevices & embedded › Networking & telecom

Telecom access and timing equipment (DSLAMs, aggregation nodes, timing cards)

deadline 2038-01-19 03:14:07 UTC

Why: These have 10–20 year lifetimes, legacy embedded stacks and NTP/PTP/GNSS timing chains. A wrong date on one timing card spread across Telstra's network in 2026.

What to do: Assign an owner to the timing chain, monitor time sources around the clock, and get vendor statements.

Details & sources →
At riskConfirmedDevices & embedded › Networking & telecom

Home and small-office routers (OpenWrt 21.02 and earlier, vendor uClibc SDKs)

deadline 2038-01-19 03:14:07 UTC

Why: These are 32-bit MIPS/ARM systems with C libraries that have a 32-bit time_t.

What to do: Move to OpenWrt 22.03 or later, or vendor firmware built on musl 1.2+ or another time64 C library. Otherwise replace.

Details & sources →
At riskConfirmedDevices & embedded › Networking & telecom

Public NTP servers running 32-bit operating systems

deadline 2038-01-19 03:14:07 UTC

Why: Bitsight found that about 60% of public NTP servers revealing their OS ran old 32-bit systems. A wrong time from a server spreads to every client.

What to do: Use maintained time sources on 64-bit systems, and configure several independent servers.

Details & sources →
At riskConfirmedDevices & embedded › Networking & telecom

WAGO managed switches, all firmware (CVE-2025-1235)

deadline 2038-01-19 03:14:07 UTC

Why: CERT@VDE advisory VDE-2025-020. Setting the date to 2038-01-19 resets system time to 1970 and corrupts log timestamps. The advisory states no fix.

What to do: Restrict who can set the time, and follow the vendor advisory for updates.

Details & sources →
At riskLikelyDevices & embedded › Consumer & retail

IP cameras, DVRs and NVRs

deadline 2038-01-19 03:14:07 UTC

Why: These typically use 32-bit SoCs with BusyBox and old embedded web servers such as Boa, and rarely get updates.

What to do: Check for firmware updates, or plan replacement.

Details & sources →
At riskLikelyDevices & embedded › Consumer & retail

Payment terminals and transport ticket gates

deadline 2038-01-19 03:14:07 UTC

Why: These have long-lived embedded firmware with certificate checks, and Kaspersky names them as an at-risk class.

What to do: Ask vendors for 2038 statements, and test certificate handling with post-2038 dates.

Details & sources →
At riskLikelyDevices & embedded › Vehicles & aviation

Vehicles (ECUs, 32-bit Android head units, telematics, EV chargers)

deadline 2038-01-19 03:14:07 UTC

Why: Vehicles have 150–300 ECUs from multi-tier suppliers and 15–20 year lifetimes. 32-bit Android head units have a 32-bit time_t, and ISO 15118 charging depends on certificate time checks. No public 2038 recall has been found.

What to do: Fleet operators should ask OEMs and charger vendors for 2038 statements.

Details & sources →
At riskConfirmedDevices & embedded › Enterprise software

Oracle Access Manager 10.1.4.3 (Windows)

already failed 2022-03-17

Why: This already failed in March 2022. A cookie set about 500 million seconds ahead pushed dates past 2038, and some searches threw exceptions. This is reported by a secondary source only.

What to do: Apply Oracle patch 33983548.

Details & sources →
At riskLikelyDevices & embedded › Consumer & retail

Smart TVs and set-top boxes with 32-bit software

deadline 2038-01-19 03:14:07 UTC

Why: These run 32-bit Android or vendor Linux, where bionic's 32-bit time_t will not be changed.

What to do: Use devices with 64-bit userspace, or plan replacement.

Details & sources →

Operating systems 18

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 →

Languages & runtimes 10

At riskConfirmedLanguages & runtimes › .NET

.NET (int) casts and int columns holding epoch seconds

deadline 2038-01-19 03:14:07 UTC

Why: Application-level truncation to Int32 overflows in 2038.

What to do: Use long or DateTimeOffset end to end.

Details & sources →
At riskConfirmedLanguages & runtimes › Any language

Application code that stores Unix time in a 32-bit integer (int, int32, DWORD, 32-bit long)

deadline 2038-01-19 03:14:07 UTC

Why: This is the most common pattern in every language. A 64-bit OS doesn't help if the program truncates time to 32 bits, and it wraps silently.

What to do: Search code for 32-bit casts and fields around time values, and widen them to 64-bit or native time types.

Details & sources →
At riskConfirmedLanguages & runtimes › Java & JVM

Java int seconds and (int)(currentTimeMillis()/1000)

deadline 2038-01-19 03:14:07 UTC

Why: The JVM's own time types are safe, but application int fields wrap silently.

What to do: Use long or java.time.Instant.

Details & sources →
At riskConfirmedLanguages & runtimes › PHP

PHP 32-bit builds (incl. PHP 5 on Windows x64 and 32-bit dev stacks)

deadline 2038-01-19 03:14:07 UTC

Why: When PHP_INT_SIZE is 4, timestamps are limited to 1901–2038.

What to do: Use a 64-bit PHP 7+ build.

Details & sources →
At riskConfirmedLanguages & runtimes › Perl, Ruby & Erlang

Binary formats written with 32-bit pack codes (Perl/Ruby pack 'l', 'N')

deadline 2038-01-19 03:14:07 UTC

Why: These write 32-bit fields regardless of the language's internal range.

What to do: Use 64-bit pack codes and version the file format.

Details & sources →
At riskConfirmedLanguages & runtimes › Python

CPython 32-bit on glibc without _TIME_BITS=64

deadline 2038-01-19 03:14:07 UTC

Why: time and datetime C conversions raise OverflowError after 2038-01-19. Pure-Python arithmetic is fine.

What to do: Use a 64-bit or time64 build of Python.

Details & sources →
At riskConfirmedLanguages & runtimes › Go

Go syscall / x/sys/unix on 32-bit Linux

deadline 2038-01-19 03:14:07 UTC

Why: Timespec and Timeval are 32-bit on linux/386, arm and mips. The fix (Go issue

What to do: Avoid raw syscalls on 32-bit targets, and use the time package.

Details & sources →
At riskConfirmedLanguages & runtimes › JavaScript

JavaScript bitwise ops (|0, >>0), Int32Array, Buffer.writeInt32 on seconds

deadline 2038-01-19 03:14:07 UTC

Why: These coerce values to signed 32-bit, so epoch seconds wrap in 2038.

What to do: Use Math.floor or Math.trunc, and Float64Array, BigInt64Array or readBigInt64LE for stored times.

Details & sources →
At riskConfirmedLanguages & runtimes › .NET

SQL Server 2017–2022 DATEADD(second, epoch, '1970-01-01')

deadline 2038-01-19 03:14:07 UTC

Why: DATEADD takes an int argument, so epoch seconds past 2038 overflow. SQL Server 2025 and Azure accept bigint.

What to do: Upgrade to SQL Server 2025 or Azure SQL (bigint argument), or convert epoch values in application code.

Details & sources →
At riskConfirmedLanguages & runtimes › COBOL, Fortran, Lua & tools

GNU Fortran TIME(), Lua with LUA_32BITS, 32-bit date/gawk builds

deadline 2038-01-19 03:14:07 UTC

Why: Each returns or stores a 32-bit time value.

What to do: Use TIME8(), default 64-bit Lua integers, or time64 builds.

Details & sources →

Databases 4

At riskConfirmedDatabases › Your schema (epoch columns)

Integer columns holding epoch seconds (INT, INTEGER)

deadline 2038-01-19 03:14:07 UTC

Why: A signed 32-bit column overflows at the same moment as time_t, in any database.

What to do: Migrate to BIGINT or a native timestamp type.

Details & sources →
At riskConfirmedDatabases › MySQL & MariaDB

MariaDB TIMESTAMP before 11.5

deadline 2038-01-19 03:14:07 UTC

Why: These use 4-byte signed epoch seconds.

What to do: Upgrade to 11.8 LTS or later on 64-bit, allowing time for system-versioned tables to be rewritten.

Details & sources →
At riskConfirmedDatabases › MySQL & MariaDB

MySQL TIMESTAMP columns (all versions)

deadline 2038-01-19 03:14:07 UTC

Why: TIMESTAMP is stored as 4-byte epoch seconds and ends at 2038-01-19 03:14:07 UTC, regardless of platform. MySQL has not extended it.

What to do: Migrate to DATETIME, storing UTC explicitly because DATETIME has no implicit time-zone conversion.

Details & sources →
At riskConfirmedDatabases › MySQL & MariaDB

MySQL UNIX_TIMESTAMP / FROM_UNIXTIME before 8.0.28, or on 32-bit

deadline 2038-01-19 03:14:07 UTC

Why: These functions were 32-bit until 8.0.28, which made them 64-bit on 64-bit platforms.

What to do: Upgrade to 8.0.28 or later on a 64-bit platform.

Details & sources →

File systems & storage 3

At riskConfirmedFile systems & storage › Linux (ext, XFS, Btrfs, ZFS)

ext2 / ext3 file systems

deadline 2038-01-19 03:14:07 UTC

Why: These use a fixed 128-byte inode with 32-bit signed seconds.

What to do: Reformat as ext4 with 256-byte inodes.

Details & sources →
At riskConfirmedFile systems & storage › Linux (ext, XFS, Btrfs, ZFS)

ext4 created with 128-byte inodes

deadline 2038-01-19 03:14:07 UTC

Why: There is no room for the extra epoch bits. This is common in small and embedded images and older mke2fs profiles.

What to do: Check with tune2fs -l. Back up, recreate with mkfs.ext4 -I 256, and restore.

Details & sources →
At riskConfirmedFile systems & storage › Linux (ext, XFS, Btrfs, ZFS)

XFS without the bigtime feature

deadline 2038-01-19 03:14:07 UTC

Why: The classic on-disk format ends in January 2038. Volumes made with older xfsprogs lack bigtime.

What to do: Upgrade offline with xfs_admin -O bigtime=1 (kernel 5.10+).

Details & sources →

File formats & protocols 4

At riskConfirmedFile formats & protocols › Industrial protocols

IEC 61850 Edition 1 (substation automation)

deadline 2038-01-19 03:14:07 UTC

Why: SecondSinceEpoch is a signed 32-bit INT32 in Edition 1.

What to do: Move to Edition 2, which uses unsigned INT32U and reaches 2106.

Details & sources →
At riskConfirmedFile formats & protocols › Security & certificates

TLS / X.509 certificate checks on 32-bit time_t (OpenSSL, GnuTLS, embedded TLS)

deadline 2038-01-19 03:14:07 UTC

Why: Certificates already carry expiry dates past 2038. Validators on 32-bit time_t misread them, and failures have been seen in OpenSSL, GnuTLS and Tor.

What to do: Use 64-bit time_t builds and current libraries, and test with certificates expiring after 2038 and after 2050.

Details & sources →
At riskConfirmedFile formats & protocols › Archives & file formats

cpio old binary format

deadline 2038-01-19 03:14:07 UTC

Why: This format uses a 32-bit mtime, ending in 2038 or 2106 depending on signedness.

What to do: Use newc, odc or pax formats.

Details & sources →
At riskConfirmedFile formats & protocols › Archives & file formats

ZIP extended-timestamp field (0x5455)

deadline 2038-01-19 03:14:07 UTC

Why: This field uses 4-byte signed Unix times.

What to do: Write the NTFS extra field (0x000a), which has 64-bit times.

Details & sources →

Time sources (NTP, GPS) 3

At riskConfirmedTime sources (NTP, GPS) › NTP & SNTP

SNTP clients without a battery-backed clock (routers, cameras, PLCs, IoT)

deadline 2036-02-07

Why: NTP's 32-bit seconds field wraps on 2036-02-07, two years before 2038. Devices that boot without a real-time clock can't tell which era they are in, and may jump to 1900 or the wrong era.

What to do: Use era-aware NTP software, add an RTC or a firmware time floor, and test boot behaviour after 2036.

Details & sources →
At riskConfirmedTime sources (NTP, GPS) › GPS

GPS receivers that decode only the legacy (LNAV) week number

deadline 2038-11-20

Why: The 10-bit week number rolls over on 2038-11-20/21. Receivers with stale pivot dates can fail earlier, on any weekend.

What to do: Record each receiver's firmware date, test with a GPS simulator, and prefer CNAV or multi-GNSS receivers.

Details & sources →
At riskConfirmedTime sources (NTP, GPS) › NTP & SNTP · GPS · PTP

GPS-disciplined NTP/PTP grandmasters and telecom timing cards

deadline 2038-11-20

Why: A wrong date at the source spreads to every client, as in the Telstra outage in July 2026.

What to do: Cross-check against independent time sources, and alarm on large jumps around the clock.

Details & sources →

Depends on version or configuration 12

Safe only with a particular version, build or setting. Check yours.

Devices & embedded 3

DependsLikelyDevices & embedded › Vehicles & aviation

Avionics and aviation ground systems

deadline 2038-01-19 03:14:07 UTC

Why: These run certified software with 25–40 year lives that is hard to change. Counter overflows have already grounded aircraft, such as the Boeing 787 248-day bug, though that was not a 2038 issue.

What to do: Raise 2038 with OEMs and include it in airworthiness and ground-system reviews.

Details & sources →
DependsDevices & embedded › Networking & telecom

Enterprise switches, routers and printers

deadline 2038-01-19 03:14:07 UTC

Why: These run vendor network operating systems or embedded RTOS/Linux, and exposure is vendor-specific.

What to do: Get a vendor statement, and check SNMP, syslog and certificate handling.

Details & sources →
DependsDevices & embedded › Networking & telecom

NAS appliances

deadline 2038-01-19 03:14:07 UTC

Why: These usually run Linux. They are exposed through old ext3, 128-byte-inode ext4 or non-bigtime XFS volumes, and NFSv3 to 2106.

What to do: Check kernel and C library versions and file-system settings, and reformat or convert old volumes.

Details & sources →

Operating systems 3

DependsOperating systems › Linux

Buildroot and Yocto 32-bit images

deadline 2038-01-19 03:14:07 UTC

Why: Yocto 4.3+ builds 32-bit targets with 64-bit time_t and ships a 32bit-time QA check. Buildroot glibc toolchains need BR2_TIME_BITS_64. musl toolchains need nothing.

What to do: Use Yocto 4.3+, or enable BR2_TIME_BITS_64, and run the QA checks.

Details & sources →
DependsOperating systems › Embedded & RTOS

FreeRTOS and Zephyr application code

deadline 2038-01-19 03:14:07 UTC

Why: The FreeRTOS kernel itself is not affected, but coreSNTP and libc-based application code may be. Zephyr 3.5+ with picolibc is 64-bit, and other libc configurations need checking.

What to do: Check the C library configuration and any SNTP and time-conversion code.

Details & sources →
DependsOperating systems › Embedded & RTOS

QNX 6.x / 7.x

deadline 2038-01-19 03:14:07 UTC

Why: time_t is unsigned 32-bit, which reaches about 2106, but code that casts it to a signed type breaks in 2038. QNX SDP 8.0 uses signed 64-bit.

What to do: Audit signed casts, or move to SDP 8.0.

Details & sources →

Languages & runtimes 3

DependsLanguages & runtimes › Java & JVM

32-bit HotSpot JVM on glibc armhf / i386

deadline 2038-01-19 03:14:07 UTC

Why: Native calls use the platform's time_t, and JDK-8279444 is still open.

What to do: Run 64-bit JVMs where possible, and test on the target platform.

Details & sources →
DependsLanguages & runtimes › COBOL, Fortran, Lua & tools

COBOL systems that receive Unix time

deadline 2038-01-19 03:14:07 UTC

Why: COBOL rarely uses Unix time internally, but PIC S9(9) COMP fields fed by other systems are 32-bit.

What to do: Check interface fields that carry epoch seconds.

Details & sources →
DependsLanguages & runtimes › Rust

Rust on 32-bit targets via the libc crate

deadline 2038-01-19 03:14:07 UTC

Why: libc 0.2.178 and earlier use a 32-bit time_t on 32-bit glibc and musl. 0.2.179+ has an unstable 64-bit opt-in.

What to do: Track the libc crate's time64 support, and test on target.

Details & sources →

File formats & protocols 2

DependsFile formats & protocols › Security & certificates · Archives & file formats

cpio newc (initramfs), MIT krb5 API timestamps

deadline 2038-01-19 03:14:07 UTC

Why: These are 32-bit fields. They are fine to 2106 when read as unsigned, but break in 2038 if code treats them as signed.

What to do: Check readers treat the field as unsigned. For krb5, cast with (time_t)(uint32_t) as MIT documents.

Details & sources →
DependsFile formats & protocols › Security & certificates

DNSSEC signatures and JWT tokens

deadline 2038-01-19 03:14:07 UTC

Why: DNSSEC uses uint32 with serial arithmetic (a ±68-year window), and JWT numbers are bounded only by the parser.

What to do: Use RFC 1982 comparisons and 64-bit parsing.

Details & sources →

Time sources (NTP, GPS) 1

DependsTime sources (NTP, GPS) › PTP

PTP (IEEE 1588)

deadline 2038-01-19 03:14:07 UTC

Why: The protocol uses 48-bit TAI seconds, but 32-bit implementations must handle all 48 bits.

What to do: Check embedded PTP stacks.

Details & sources →
Not affected by 2038: show 28 items, and why 20 not affected · 8 with a different deadline

Different deadline 8

Not hit in 2038, but has another date limit. These are worth knowing about when you plan ahead.

Databases 2

Different deadlineDatabases › MySQL & MariaDB · Your schema (epoch columns)

MariaDB TIMESTAMP 11.5+ (64-bit) and INT UNSIGNED epoch columns

deadline 2106-02-07

Why: These use an unsigned 32-bit range. They are safe for 2038 but end on 2106-02-07.

What to do: Prefer BIGINT or native types for new schemas.

Details & sources →
Different deadlineDatabases › MongoDB & Redis

MongoDB ObjectId timestamps and Redis legacy RDB expiry (0xFD)

deadline 2106-02-07

Why: These are 32-bit fields read as unsigned. Drivers that read the ObjectId as signed show 1901 dates after 2038.

What to do: Check that drivers treat the field as unsigned.

Details & sources →

File systems & storage 3

Different deadlineFile systems & storage › Windows & Apple (NTFS, APFS, HFS+)

HFS+ and classic Mac OS volumes

deadline 2040-02-06

Why: These use unsigned 32-bit seconds since 1904, ending 2040-02-06 06:28:15 GMT.

What to do: Migrate to APFS.

Details & sources →
Different deadlineFile systems & storage › Network (NFS)

NFSv3

deadline 2106-02-07

Why: The protocol carries unsigned 32-bit seconds.

What to do: Use NFSv4, which has 64-bit seconds.

Details & sources →
Different deadlineFile systems & storage › Removable media (FAT)

FAT12/16/32 and ZIP core-header dates

deadline 2107-12-31

Why: These store a 7-bit year offset from 1980.

What to do: Use the ZIP NTFS extra field, or a modern file system.

Details & sources →

File formats & protocols 2

Different deadlineFile formats & protocols › Security & certificates · Archives & file formats

gzip MTIME, PE/COFF TimeDateStamp, TLS 1.2 gmt_unix_time

deadline 2106-02-07

Why: These are unsigned 32-bit seconds. They are informational, and they wrap in 2106.

What to do: Treat them as opaque or unsigned.

Details & sources →
Different deadlineFile formats & protocols › Network management

SNMP sysUpTime

Why: A 32-bit count of hundredths of a second, which wraps about every 497 days. This is a recurring uptime wrap, not a calendar limit.

What to do: Handle the wrap in monitoring tools.

Details & sources →

Time sources (NTP, GPS) 1

Different deadlineTime sources (NTP, GPS) › GPS

GPS receivers that decode the modern CNAV week number

deadline 2137-01-01

Why: The 13-bit week number lasts about 157 years, so the first CNAV rollover is in 2137.

Details & sources →

Not affected, and why 20

Not affected by the 2038 overflow. The reason is given. "Not affected" applies to the platform or type itself. Application code built on it can still store time in 32 bits.

Operating systems 8

Not affectedOperating systems › Android

64-bit Android devices running 64-bit apps

Why it's not affected: The 64-bit bionic ABI has a 64-bit time_t.

Details & sources →
Not affectedOperating systems › Linux

64-bit Linux (kernel and C library)

Why it's not affected: 64-bit Linux has used a 64-bit time_t since those ports began. The kernel, glibc and musl all agree.

What to do: Still check file systems, login records and application data formats.

Details & sources →
Not affectedOperating systems › Linux

Debian 13 and Ubuntu 24.04+ on 32-bit ARM

Why it's not affected: Rebuilt in 2024–2025 with a 64-bit time_t, using the t64 library transition.

What to do: Rebuild any third-party armhf binaries. Debian warns of possible silent data loss otherwise.

Details & sources →
Not affectedOperating systems › macOS & iOS

iOS 11 and later

Why it's not affected: 64-bit only since iOS 11. 32-bit apps no longer launch.

Details & sources →
Not affectedOperating systems › macOS & iOS

macOS 10.15 and later

Why it's not affected: Catalina and later run only 64-bit apps, so time_t is 64-bit throughout.

Details & sources →
Not affectedOperating systems › BSD & Unix

OpenBSD 5.5+, NetBSD 6.0+, FreeBSD on 64-bit and ARM/PowerPC

Why it's not affected: The BSDs moved to 64-bit time_t on these platforms between 2012 and 2014, or used it from the start. Some fields are unsigned 32-bit and last to 2106.

Details & sources →
Not affectedOperating systems › Windows

Programs built with Visual Studio 2005 or later (default settings)

Why it's not affected: In the modern CRT, time_t is 64-bit by default and valid to 3000-12-31.

Details & sources →
Not affectedOperating systems › Windows

Windows NT kernel, NTFS and Win32 time APIs (FILETIME, SYSTEMTIME)

Why it's not affected: Windows stores time as a 64-bit count of 100-nanosecond intervals since 1601, which lasts to about the year 30,828.

Details & sources →

Languages & runtimes 8

Not affectedLanguages & runtimes › .NET

.NET DateTime, DateTimeOffset and ToUnixTimeSeconds

Why it's not affected: These use 64-bit 100-ns ticks from year 1 to 9999. Unix-time helpers return Int64.

Details & sources →
Not affectedLanguages & runtimes › Go

Go time package

Why it's not affected: Time.Unix() returns int64, valid for billions of years. UnixNano() alone is limited to 1678–2262.

Details & sources →
Not affectedLanguages & runtimes › Java & JVM

Java Date, currentTimeMillis and java.time.Instant

Why it's not affected: These are 64-bit millisecond or second counts, good for hundreds of millions of years.

Details & sources →
Not affectedLanguages & runtimes › JavaScript

JavaScript Date and Temporal.Instant

Why it's not affected: Date uses double-precision milliseconds, valid to the year 275760.

Details & sources →
Not affectedLanguages & runtimes › Perl, Ruby & Erlang

Perl 5.12+, Ruby 1.9.2+, Erlang/Elixir

Why it's not affected: Perl 5.12 and Ruby 1.9.2 (both 2010) moved to 64-bit or arbitrary-precision internal time, even on 32-bit machines. Erlang integers grow as needed.

What to do: Still check pack('l'), XS modules and fixed-width binary matches.

Details & sources →
Not affectedLanguages & runtimes › PHP

PHP 7+ 64-bit builds

Why it's not affected: PHP_INT_SIZE is 8, so timestamps are effectively unlimited.

What to do: Still check database columns and pack() formats.

Details & sources →
Not affectedLanguages & runtimes › Python

Python on 64-bit systems, 32-bit Windows, or musl 1.2+

Why it's not affected: time and datetime conversions use a 64-bit time_t on these builds.

Details & sources →
Not affectedLanguages & runtimes › Swift & Objective-C

Swift / Objective-C Date

Why it's not affected: A Double count of seconds since 2001.

What to do: Watch integer conversions such as Int32(timeIntervalSince1970).

Details & sources →

Databases 1

Not affectedDatabases › MongoDB & Redis · PostgreSQL, Oracle, SQL Server & SQLite

PostgreSQL, Oracle, SQL Server datetime/datetime2, SQLite, MongoDB BSON Date

Why it's not affected: Native date types are 7–8 bytes or text. PostgreSQL reaches 294276 AD, and the others 9999 or beyond.

What to do: The engines are safe, but check application columns and client conversions.

Details & sources →

File systems & storage 1

Not affectedFile systems & storage › Linux (ext, XFS, Btrfs, ZFS) · Windows & Apple (NTFS, APFS, HFS+)

ext4 (256-byte inodes), XFS bigtime, Btrfs, ZFS, NTFS, APFS

Why it's not affected: Each has 64-bit or extended timestamps. ext4 lasts to 2446 and XFS bigtime to 2486. Btrfs, ZFS, NTFS and APFS last centuries or more.

Details & sources →

File formats & protocols 1

Not affectedFile formats & protocols › Security & certificates · Archives & file formats · Industrial protocols

tar (pax and ustar), Kerberos wire format, X.509 encoding, DNP3, PNG

Why it's not affected: These use text or wide fields. pax is unbounded, ustar lasts to 2242, X.509 and Kerberos use GeneralizedTime to 9999, and DNP3 counts milliseconds since 1970 far into the future.

Details & sources →

Time sources (NTP, GPS) 1

Not affectedTime sources (NTP, GPS) › NTP & SNTP

Full NTP daemons (ntpd, NTPsec, chrony) with a working clock

Why it's not affected: They resolve the era from the system clock or build date, and ntp.org has tested the 2036 transition.

What to do: On 32-bit systems they still depend on a 64-bit time_t for 2038.

Details & sources →

Missing something, or have evidence that changes a status? Email info@epoch2038.com. Register last reviewed 2026-10-21.