O bug do ano 2038: o sucessor silencioso do Y2K hoje
Marque na agenda: às 03h14min07s UTC de 19 de janeiro de 2038, uma boa quantidade de sistemas baseados em Unix vai virar o relógio para 1901. O motivo é um contador de 32 bits que está prestes a estourar — e que já tem nome, o “problema do ano 2038” ou Y2K38.
Por que o tempo do computador começa em 1970
O Unix mede o tempo em segundos contados a partir de 1º de janeiro de 1970, 00h00 UTC — o chamado “epoch”. A data não tem nada de especial: segundo o próprio Dennis Ritchie, foi uma escolha arbitrária dos engenheiros do Bell Labs. A primeira versão do Unix, documentada em novembro de 1971, usava outro epoch — 1º de janeiro de 1971 — e contava o tempo em sexagésimos de segundo, no ritmo de 60 Hz da rede elétrica americana. Só que um contador de 32 bits nesse ritmo estourava em pouco mais de dois anos. A solução, registrada no segundo manual do Unix em junho de 1972, foi passar a contar segundos inteiros e recuar o epoch para 1970 — uma data redonda e recente, que empurrava o problema décadas para a frente.
O que estoura em 2038
Empurrar não é resolver. Um inteiro de 32 bits com sinal guarda no máximo 2.147.483.647 segundos a partir do epoch — exatamente até 03h14min07s UTC de 19 de janeiro de 2038. No segundo seguinte, o bit de sinal vira e o número passa a ser lido como negativo, o que os sistemas afetados interpretam como 20h45min52s de 13 de dezembro de 1901. Não é uma falha de exibição, como no Y2K, em que só o ano de dois dígitos virava errado: aqui o próprio contador de tempo interno passa a mentir, o que derruba autenticação, agendamento, expiração de certificados e qualquer lógica que dependa de comparar datas.
Quem ainda corre risco
Servidores e desktops modernos, com kernel de 64 bits, não sentem nada — um contador de 64 bits dura cerca de 292 bilhões de anos. O risco fica concentrado em sistemas de 32 bits que sobreviveram: firmware de equipamento industrial, roteadores antigos, terminais de pagamento, sistemas embarcados e bancos de dados legados. O kernel Linux passou a suportar time_t de 64 bits em plataformas de 32 bits a partir da versão 5.6, em março de 2020, e a glibc seguiu o mesmo caminho na versão 2.34, em agosto de 2021 — mas os dois exigem recompilar o software que roda por cima. Em infraestrutura que ninguém recompila há uma década, o contador de 32 bits continua rodando.
Por que isso importa agora
Faltam pouco mais de onze anos para 2038, prazo curto para quem administra equipamento industrial ou embarcado com ciclo de vida de vinte anos ou mais. Diferente do Y2K, que teve campanha global e orçamento dedicado, a correção do Y2K38 está acontecendo aos poucos, distribuída entre atualizações de kernel, bibliotecas e firmware — sem alarde. Vale conferir hoje se os sistemas mais antigos do parque, sobretudo os que ficam fora do ciclo normal de patch, já rodam com contador de tempo de 64 bits.