summaryrefslogtreecommitdiff
path: root/doc/year2038.texi
blob: d98753101ea64a82aa817e66099363068879ae1b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
@node Avoiding the year 2038 problem
@section Avoiding the year 2038 problem

The ``year 2038 problem'' denotes unpredictable behaviour that will
likely occur in the year 2038, for programs that use a 32-bit signed
integer @samp{time_t} type that cannot represent timestamps on or
after 2038-01-19 03:14:08 UTC@.  See
@url{https://en.wikipedia.org/wiki/Year_2038_problem, Year 2038
problem} for details.

The Gnulib module @samp{year2038-required} fixes this problem, by
making @code{time_t} wide enough to represent timestamps after 2038.
This has no effect on most current systems, which have timestamps that
are already wide enough.  However, @samp{year2038-required} arranges
for builds on legacy 32-bit x86 and ARM Linux kernels running glibc
2.34 and later to compile with @samp{_TIME_BITS=64} to get wider
timestamps.  On older platforms that do not support timestamps after
the year 2038, @samp{year2038-required} causes @command{configure} to
fail.

The Gnulib module @samp{year2038} is like @samp{year2038-required},
except that it causes @command{configure} to fail only when it appears
that the current system should support post-2038 timestamps but
something prevents that from working.  Also, @samp{year2038} gives
@command{configure} a @option{--disable-year2038} option, which
suppresses support for post-2038 timestamps.  This may be useful if
the package links to other libraries whose user-facing ABIs still
require @code{time_t} to be 32-bit on your platform.

The Gnulib module @samp{year2038-required} is
recommended for any package that might be used after the year 2038 on
32-bit platforms.  However, if your package needs to support
platforms that will not be used after the year 2038,
you can use the @samp{year2038} module instead.

If the Gnulib module @samp{largefile} is used but neither
@samp{year2038} nor @samp{year2038-required} is used,
@command{configure} will have an option @option{--enable-year2038}
that causes @code{configure} to behave as if @samp{year2038} was used.
This is for packages that have long used @samp{largefile} but have not
gotten around to upgrade their Gnulib module list to include
@samp{year2038-required} or @samp{year2038}.
@xref{Large File Support}.