Glossary
In brief: This is a plain-language dictionary of the terms used across this wiki. Each entry gives a short definition, explains why the term matters for the Year 2038 problem, and links to the wiki page that covers it in depth. You don't need a technical background to use it.
| Risk level | n/a (reference page) |
| Status | Maintained alongside the wiki |
| Last reviewed | 2026-10-21 |
Overview
Entries are alphabetical. Numbers in square brackets point to the References at the bottom.
Terms
ABI (Application Binary Interface): The low-level contract between compiled programs and libraries or the kernel: sizes of types, layout of structures and calling conventions. Changing time_t from 32 to 64 bits breaks the ABI, so old and new binaries cannot be mixed safely. Debian therefore renamed hundreds of libraries with a t64 suffix [1][2]. See Remediation-Guide, OS-Linux.
abi-compliance-checker: A tool that compares two builds of a library and reports ABI differences. Debian used it to find which libraries changed when built with 64-bit time [1]. See Testing-and-Detection.
Billennium: The moment Unix time reached 1,000,000,000, on 2001-09-09 01:46:40 UTC. It caused minor bugs in software that assumed nine-digit timestamps [3]. See Known-2038-Incidents, Related-Date-Bugs.
Clamping (saturation): Limiting a value to the largest one a type can hold instead of letting it wrap around. OpenSSH clamps displayed dates at 2038-01-19T03:14:07 [4]. Clamping is safer than wrapping, but it still gives wrong answers. See Remediation-Guide.
CLOCK_REALTIME / CLOCK_MONOTONIC: Linux clocks. Realtime is calendar ("wall clock") time and can jump. Monotonic only moves forward and suits timeouts. Linux time namespaces can shift monotonic and boot-time clocks but not the realtime clock [5]. See Testing-and-Detection.
CWE-190: The Common Weakness Enumeration entry for "Integer Overflow or Wraparound". Year 2038 CVEs published by CISA and CERT@VDE use it [6][7]. See Known-2038-Incidents.
Epoch: The fixed starting instant from which a system counts time. Unix uses 1970-01-01 00:00:00 UTC, NTP uses 1900-01-01 [8], Windows FILETIME uses 1601-01-01 [9] and GPS uses 1980-01-06 [3]. See Year-2038-Problem.
Epoch shifting: A workaround that moves a counter's epoch to a later date so that a 32-bit field lasts longer. It is dangerous because the numbers look like Unix time but are not. See Remediation-Guide.
Epochalypse / Y2K38 / Y2038: Informal names for the Year 2038 problem [10]. See Year-2038-Problem.
Era (NTP era): NTP's 32-bit seconds field wraps every 2³² seconds (about 136 years). Each wrap starts a new era. Era 0 ends and era 1 begins on 2036-02-07 [8]. See NTP-Era-2036.
FILETIME: Windows' 64-bit count of 100-nanosecond intervals since 1601-01-01 UTC [9]. It is not affected by 2038, but converting it to and from 32-bit Unix time can be. See OS-Windows, Lang-DotNet.
GPS week (week number rollover): Legacy GPS broadcasts the week number in 10 bits, so it rolls over every 1,024 weeks. Rollovers happened in 1999 and 2019, and the next is on 2038-11-20. Modernised signals use 13 bits [3]. See GPS-Week-Rollover.
ILP32 / LP64 / LLP64: Data models that name which C types are 32 or 64 bits wide.
- ILP32 (most 32-bit systems):
int,longand pointers are all 32 bits. - LP64 (64-bit Linux, macOS, BSD):
longand pointers are 64 bits. - LLP64 (64-bit Windows):
longstays 32 bits.
On LLP64, code that stores time in a long is still 2038-unsafe even on a 64-bit machine. The y2k38-checker tool flags time_t→long casts for this reason [11]. See Lang-C-and-CPP.
Integer overflow / wraparound: What happens when a calculation produces a number too large for its type. In signed 32-bit arithmetic, 2,147,483,647 + 1 wraps to −2,147,483,648. See Year-2038-Problem.
LFS (Large File Support): The _FILE_OFFSET_BITS=64 option for 64-bit file sizes on 32-bit systems. glibc requires LFS whenever _TIME_BITS=64 is used [12]. See OS-Linux.
Leap second: A one-second adjustment to UTC that keeps it close to Earth's rotation. Unix time ignores leap seconds. See TAI/UTC below and Related-Date-Bugs.
NTP (Network Time Protocol): The protocol computers use to set their clocks over a network. Its 2036 era rollover comes before 2038 [8]. See NTP-Era-2036, Devices-Networking-and-IoT.
RTC (Real-Time Clock): The battery-backed clock chip that keeps time while a device is off. RTCs may store two-digit years, BCD fields or 32-bit counters. See Devices-and-Embedded-Systems.
Sentinel value: A special number used to mean "never" or "forever", such as 1,000,000,000 seconds. Adding one to "now" can overflow, as it did in AOLserver in 2006 [13]. See Known-2038-Incidents.
Signed vs unsigned integer: A signed 32-bit integer holds −2³¹ to 2³¹−1, and Unix time in this form ends on 2038-01-19 03:14:07 UTC. An unsigned one holds 0 to 2³²−1 and ends on 2106-02-07 06:28:15 UTC, but it cannot hold dates before 1970 [10]. See Year-2106-and-Beyond.
TAI / UTC: TAI (International Atomic Time) is a continuous atomic time scale. UTC is TAI adjusted by leap seconds to stay close to Earth's rotation. NIST lists TAI as 37 seconds ahead of UTC [14]. GPS time is also offset from both. See GPS-Week-Rollover.
time_t: The C and POSIX type that holds Unix time. Historically it was a signed 32-bit integer on 32-bit systems. POSIX now requires it to be at least 64 bits wide [15]. See Lang-C-and-CPP.
_TIME_BITS=64: A glibc feature macro (glibc ≥ 2.34) that makes time_t 64 bits on 32-bit Linux [12]. See Remediation-Guide.
time64 / t64: Shorthand for builds or packages that use 64-bit time_t on 32-bit platforms, as in Debian t64 packages and Gentoo time64 profiles [1][16]. See OS-Linux.
Time namespace: A Linux 5.6 feature that gives a group of processes their own offsets for the monotonic and boot-time clocks [5][17]. It cannot fake the calendar date. See Testing-and-Detection.
Two's complement: The way almost all computers represent signed integers. The top bit carries a negative weight, which is why 0x7FFFFFFF + 1 becomes 0x80000000 = −2,147,483,648, the date 1901-12-13 20:45:52 UTC. See Year-2038-Problem.
Unix time: The number of seconds since 1970-01-01 00:00:00 UTC, not counting leap seconds. See Year-2038-Problem.
Windowing: A Y2K-era workaround that guesses the century or era of an ambiguous value from a fixed or sliding window, for example "00–49 means 20xx". It is temporary by design. See Y2K-Remediation-and-Cost, Remediation-Guide.
Y2K (Year 2000 problem): The failure of software that stored years as two digits. It is the main historical precedent for 2038. See Year-2000-Problem, Y2K-Lessons-for-2038.
Year 2106 problem: The overflow of unsigned 32-bit Unix time on 2106-02-07. Many "fixes" for 2038 only postpone the problem to this date. See Year-2106-and-Beyond.
See also
- Home · Year-2038-Problem · Articles-and-Sources
- Testing-and-Detection · Remediation-Guide · Risk-Assessment-Checklist
References
- ReleaseGoals/64bit-time — Debian Wiki — t64 renaming and ABI analysis.
- Debian looks forward to 2038 — LWN, 2023-07-17 — ABI break and library renaming.
- Time formatting and storage bugs — Wikipedia — billennium, GPS rollover dates and bit widths.
- OpenSSH Bug 3329 — openssh-bugs, 2021-07-02 — INT_MAX clamping.
- time_namespaces(7) — man7.org — virtualised clocks.
- ICSA-25-296-03 — CISA, 2025-10-23 — CWE-190 2038 CVE.
- VDE-2025-007 — CERT@VDE — CWE-190 2038 CVE.
- The NTP Era and Era Numbering — D. L. Mills — NTP epoch and eras.
- File Times — Microsoft Learn — FILETIME definition.
- Year 2038 problem — Wikipedia — names, limits, 2106.
- y2k38-checker — cysec-lab, GitHub —
time_t→longdowncast check. - GNU C Library 2.34 released — LWN, 2021-08-01 —
_TIME_BITS=64and LFS. - AOLserver Y2038 bug — Justin Mason, 2006-07-20 — sentinel overflow.
- Leap Seconds — NIST Time and Frequency Division — TAI−UTC offset (seen in search results).
- Austin Group issue 0001462 — 64-bit
time_trequirement. - The perils of transition to 64-bit time_t — Michał Górny, 2024-09-28 — Gentoo time64.
- Linux 5.6 — KernelNewbies — time namespaces introduced.