6 pontos por xguru 2021-12-30 | 1 comentários | Compartilhar no WhatsApp
  • Depois de 2038-01-09 3:14:07 UTC, o time_t de 32 bits sofre overflow

  • O kernel Linux trocou internamente para 64 bits há alguns anos, e o Alpine mudou para time_t de 64 bits desde a versão 3.13

  • A GNU glibc começou a oferecer suporte a time_t de 64 bits a partir da 2.34, mas a abordagem tecnicamente não é completa

  • O musl e outras implementações de biblioteca C para UNIX fazem com que time_t em código novo seja sempre de 64 bits, e fornecem stubs de compatibilidade para o código antigo de 32 bits

→ assim, com o tempo, a compatibilidade com Y2038 passa a vir automaticamente

  • A Microsoft foi além no msvcrt e usa time_t de 64 bits por padrão, permitindo acesso às funções antigas de 32 bits com a macro _USE_32BIT_TIME_T

  • A GNU glibc adota exatamente a abordagem oposta dessas duas opções

→ só é possível usar isso se for solicitado explicitamente com -D_TIME_BITS=64

⇨ de forma semelhante, ainda é preciso declarar explicitamente -D_FILE_OFFSET_BITS=64, necessário para lidar com arquivos maiores que 2GiB

→ além disso, em sistemas de 32 bits, não se deve compilar com -D_TIME_BITS=64 (ou seja, a compatibilidade com Y2038 é impossível)

1 comentários

 
xguru 2021-12-30

Ainda faltam cerca de 16 anos, mas como o Linux também está presente em muitos equipamentos que não são substituídos por muito tempo..