On 7/5/21 7:32 AM, Florian Weimer wrote:
I assume GNU clisp (at least in a full build) need to link to some system libraries which are not dual ABI (and probably never will be). If gnulib forces the use of time64 mode, then it creates a push towards time64 mode in those libraries, too.
Only in libraries that expose time_t (or time_t-dependent types like struct timespec and struct stat) directly to their users, right? For example, libselinux is unaffected by this issue even though it calls 'lstat' internally, because its user-side ABI is unaffected by time_t width.
I take your point, though, that there will be a hassle with libraries whose user-side ABIs depend on time_t width. I expect distros will migrate these libraries and their users to _TIME_BITS=64 in an all-or-nothing way.
But again, this is not strictly a Gnulib issue. Apps like Coreutils should be fine even with the new Gnulib, as Coreutils doesn't use any of the problematic libraries. Conversely, apps that '#define _TIME_BITS 64' directly and use GLib (or whatever) can have the problem, even if they don't use Gnulib.
It is not, gnulib is pushing things in one particular direction, a direction that not everyone working on the GNU toolchain agrees with.
That's OK; we needn't have universal agreement on this point, which is a good thing because it'd be impractical to insist on universal agreement. There is a way to build with 32-bit time_t even in Gnulib-using apps, so distros wanting to stick with 32-bit time_t can build Gnulib-using apps with the appropriate flags so that they're still living in the 32-bit time_t world for now.
There are some major differences to _FILE_OFFSET_BITS=64: There weren't 20+ years of backwards compatibility in 2005
Not on Linux-based platforms of course, but there were on BSD-based platforms with 20+ years of backwards compatibility back then (SunOS comes to mind). Admittedly there were fewer computers back then but the compatibility issues were quite extensive.
64-bit file offsets enabled real use cases.
Designing devices now, that will be used past 2038, is a real use case.