the Year 2038 problem

termo

programaçãocultura de operações

O tempo Unix de 32 bits com sinal transborda às 03:14:07 UTC de 19 de janeiro de 2038, girando o relógio para dezembro de 1901. Diferente do Y2K, é um limite duro de representação, e não uma convenção de formato: não há contorno sem alargar o campo.

O Unix conta segundos desde 1970 no que historicamente era um inteiro de 32 bits com sinal. As plataformas modernas migraram o time_t para 64 bits há anos, e por isso o problema é dado como resolvido sem estar: ele sobrevive onde a largura é fixada por algo que não é o compilador - cabeçalhos de protocolo, registros em disco e firmware que nunca receberá outra versão.

QUATRO LUGARES PARA OLHAR, na ordem em que mordem.

Formatos de arquivo e de protocolo fixam a largura independentemente do host. Um timestamp de 32 bits num cabeçalho ou num registro em disco continua com 32 bits numa máquina de 64, então recompilar não muda nada.

Firmware de equipamentos é a maior exposição num parque de rede. Aparelhos com vida útil de dez a quinze anos comprados hoje ainda estarão em rack em 2038, e muitos jamais receberão outra versão.

Certificados e licenças falham antes, e não no dia, porque a data de validade é calculada para a frente. Um certificado de quinze anos emitido em 2024 já transborda numa pilha de 32 bits, e por isso as primeiras falhas reais chegam bem antes de 2038.

Bancos de dados e código carregam o problema em inteiros de época armazenados, em tipos de coluna e em qualquer aritmética que some um intervalo ao agora.

PLANEJAMENTO DE PREPARAÇÃO, que é a parte que ninguém faz.

Inventarie a largura, não a garantia do fabricante. O que armazena ou transmite um timestamp, em quantos bits, e de quem é. Um parque que não responde a isso ainda não começou.

Teste movendo o relógio, e não lendo datasheets. Ponha um sistema de laboratório depois da fronteira e observe. As falhas raramente são uma data errada na tela - são validação de certificado recusando, agendadores disparando sem parar e correlação de log reordenando em silêncio.

Ordene por ciclo de substituição, não por severidade. O que tiver vida útil cruzando 2038 precisa ser tratado na compra, porque a correção mais barata para um equipamento é não comprar o de 32 bits - e essa janela está aberta agora e se fecha progressivamente.

Torne isso requisito de aquisição. Pedir ao fabricante que declare a largura do time_t num edital não custa nada e transfere o problema a quem pode resolvê-lo.

E date o prazo com honestidade. Qualquer sistema que faça aritmética de data para a frente atinge a própria fronteira quando agora mais o intervalo cruza 2038. O prazo de engenharia não é janeiro de 2038; é 2038 menos o seu maior intervalo futuro.

Também conhecido como: y2038, y2k38, Y2K38, Unix epochalypse

Todos os verbetes do glossário