On 2025-12-28 10:59, Paul Gilmartin via tz wrote:
ISTR on Linux long ago, a subdirectory,
/usr/share/zoneinfo/right,
which used arguments not POSIX time but TAI.
Was that a local hack, or was it removed,
possibly because of uncertainty of future
leap seconds?
It's still there, as a rarely-used option. By default current TZDB
installs two files for Los Angeles:
/usr/share/zoneinfo/America/Los_Angeles
/usr/share/zoneinfo-leaps/America/Los_Angeles
and the latter file uses TAI. You can change the installation default by
using 'make REDO=posix_only', 'make REDO=right_only', or 'make
REDO=right_posix'; see the Makefile.
Many platforms, like Debian, use an older directory organization, which
puts the two Los Angeles files here instead:
/usr/share/zoneinfo/America/Los_Angeles
/usr/share/zoneinfo/right/America/Los_Angeles
/usr/share/zoneinfo/posix/America/Los_Angeles
where the first two names resolve to the same file (or to files with
identical contents).
An advantage of the older approach is that one can use
'TZ="right/America/Los_Angeles" to get TAI. A disadvantage is that
functions like gmtime no longer work the way people expect; for example,
TZ='right/America/Los_Angeles' gets you localtime with leap seconds, but
gmtime without leap seconds, which leads to nonsense like this with GNU
date:
$ export TZ=right/America/Los_Angeles
$ format='%Y-%m-%d %H:%M:%S %::z (%Z)'
$ date "+$format"; date -u "+$format"
2025-12-28 18:04:48 -08:00:00 (PST)
2025-12-29 02:05:15 +00:00:00 (UTC)
so the timestamps make it look like Los Angeles is 8 hours and 27
seconds behind UTC, even though the difference is correctly reported to
be 8 hours exactly. This confusion breaks some applications.
This is why TZDB 1998e changed to something more like the current
approach; see commit 77e3dfe1a7b7e14e9f252fc628a5d405c35b6444 dated
1998-05-25 13:04:43 -0400 in the development repository. Effectively
this means the TAI TZif files are inaccessible unless you use full
pathnames in TZ, which I hope means you know the trouble you're getting
into.
Perhaps it is time to change the default REDO value in the Makefile to
REDO='posix_only', as REDO='posix_right' isn't being used much and when
it is used is probably being used incorrectly. Such a change to the
default wouldn't affect platforms like Debian that continue to use the
pre-1998 approach.