Problema do ano 2038
Este artigo ou seção é sobre um evento futuro. Editor: considere especificar o tema dentre os predefinidos. |
Ilustra o reinício da contagem da data às 03:14:08 do dia 19 de janeiro de 2038. | |
Outros nomes | problema Y2K38, efeito 2038, bug 2038, bug Y2K38 |
Projeção | Global |
Data | 19 de janeiro de 2038 |
O problema do ano 2038, efeito 2038, bug 2038, problema Y2K38 ou falha de Gangnam Style (em referência ao problema Y2K) refere-se ao problema previsto para ocorrer no ano de 2038 nos sistemas informatizados (programas de computador) que utilizam a representação de tempo no padrão POSIX/IEEE 1003, em que a data é calculada através do número de segundos ignorando os segundos bissextos desde 1 de janeiro de 1970.[1] [2]
A representação POSIX é de uso padrão nos sistemas operacionais do tipo Unix, afetando a maioria dos sistemas, pois grande parte deste software foi desenvolvido na linguagem C. Na maioria dos sistemas com processadores do tipo 32 bits, o tipo de dados time t
, utilizado para armazenar esta contagem de segundos, é um inteiro de 32 bits do tipo signed (considera o sinal). O último registro de tempo que pode ser representado por este formato no padrão POSIX, é 03:14:07 na terça-feira 19 de janeiro de 2038 (UTC).[3] Após este momento a data será representada por um número decimal negativo que, dependendo da implementação, corresponderá ao ano 1970 ou 1901 (prevê-se a data 13 de dezembro de 1901).[3] Este valor para a data corrente certamente resultará em erros de cálculo e de funcionamento na maior parte dos programas em execução pelo sistema presentes principalmente em instituições financeiras e governamentais.[3]
Solução
[editar | editar código-fonte]Não há maneira simples de resolver este problema para os sistemas existentes. Alterar a definição do time_t
para 64 bits pode quebrar a compatibilidade binária de softwares, dados persistidos e de qualquer sistema que manipule datas representadas no formato binário. Alterar o time_t
para um inteiro de 32 bits unsigned (não considera o sinal) pode alterar vários programas que trabalham com diferenças de tempo.
A maioria dos sistemas que suportam a arquitetura de 64 bits já suporta o time_t
de 64 bits. A migração para esta arquitetura já está em andamento e muitos esperam que ela esteja completa até 2038. Porém, milhões de sistemas de 32 bits foram instalados até o ano de 2006, muitos em sistemas embarcados, e é muito incerto se eles serão totalmente substituídos até 2038. Apesar de, normalmente, os sistemas serem atualizados num prazo de 18-24 meses, os sistemas embarcados podem operar sem alterações por toda a vida do sistema que controlam. A utilização do time_t
de 32 bits foi codificada em alguns formatos de arquivo, como o ZIP, o que significa que o problema pode permanecer por um longo período após a expiração da vida útil das máquinas envolvidas.
A utilização de valores de 64 bits introduz um novo "corte" na data em aproximadamente 290 bilhões de anos[nota 1], num domingo em 4 de dezembro de 292.277.026.596.[4] Claramente este problema não é uma questão imediata.[3]
Ver também
[editar | editar código-fonte]Notas
Referências
- ↑ «The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition (definition of epoch)». IEEE and The Open Group. The Open Group. 2004. Consultado em 30 de julho de 2010
- ↑ «Vídeo de Gangnam Style quebrou YouTube e obrigou Google a mudar sistema». TechTudo. 2014. Consultado em 4 de agosto de 2023
- ↑ a b c d «O que é o "efeito 2038" ou "efeito Y2K38"?». Target HD. Consultado em 10 de maio de 2021
- ↑ Diomidis Spinellis (2006). Code quality: the open source perspective. Col: Effective software development serie in Safari Books Online illustrated ed. [S.l.]: Adobe Press. p. 49. ISBN 0321166078
Ligações externas
[editar | editar código-fonte]- «The Open Group — Year 2000 :The Millennium Rollover» (em inglês). — Medidas para evitar o problema em implementações do padrão Unix.
- «The Open Group — FAQ - What about the Year 2000» (em inglês). — Resposta para pergunta sobre problemas relacionados ao ano 2000 e 2038 no padrão Unix.