6 puntos por xguru 2021-12-30 | 1 comentarios | Compartir por WhatsApp
  • Después de 2038-01-09 3:14:07 UTC, time_t de 32 bits se desborda

  • El kernel de Linux lo cambió internamente a 64 bits hace algunos años, y Alpine lo cambió a time_t de 64 bits desde la 3.13

  • GNU glibc empezó a soportar time_t de 64 bits desde la 2.34, pero el enfoque no es técnicamente completo

  • musl y otras implementaciones de la biblioteca C de UNIX hacen que time_t sea siempre de 64 bits en código nuevo, y proporcionan stubs de compatibilidad para el código existente de 32 bits

→ con el tiempo, eso hace que automáticamente sea compatible con Y2038

  • Microsoft fue un paso más allá en msvcrt y usa time_t de 64 bits por defecto, y si se usa la macro _USE_32BIT_TIME_T se puede acceder a las funciones antiguas de 32 bits

  • GNU glibc toma exactamente el enfoque opuesto a esos dos casos

→ solo se puede usar si se solicita explícitamente con -D_TIME_BITS=64

→ quizá algún día ese valor por defecto cambie, pero hasta ahora no ha pasado en absoluto

⇨ de forma similar, todavía hay que especificar -D_FILE_OFFSET_BITS=64, necesario para manejar archivos de más de 2 GiB

→ además, en sistemas de 32 bits no se debe compilar usando -D_TIME_BITS=64 (es decir, la compatibilidad con Y2038 es imposible)

1 comentarios

 
xguru 2021-12-30

Todavía quedan unos 16 años, pero como Linux también se usa mucho en equipos que no se reemplazan por largo tiempo...