Bug afeta todas as distros

Quer ver se o seu Linux tem o bug? Digite no terminal: "date -d 01/19/2038". Veja o resultado e depois digite: "date -d 01/20/2038". Quer concertar? Veja o artigo.

[ Hits: 19.277 ]

Por: M4iir1c10 em 04/03/2008 | Blog: https://github.com/mauricioph


Explicação



Eu estava brincando com o terminal e a função date, acabei descobrindo por acidente esse bug... esse é o mesmo caso que ouvimos falar em 1999 que no ano 2000 tudo ia parar e coisa do tipo, fazendo a Microsoft e outras empresas lucrar um pouco mais com os patches para consertar esse bug.

Bom, os comandos que retornam datas se baseiam em códigos binários para fazer os cálculos dos segundos etc. Quando o calendário do sistema POSIX foi iniciado, a data de início foi estipulada como 14/12/1901 (e a SCO teima que o Linux e UNIX, sendo que o UNIX começa em 19/01/1970)... bom essa data para o computador não é 14/12/1901 00:00:00 e sim 00000000 00000000 00000000 00000000.

Nos concentrando nos 3 primeiros zeros vamos contar até 5 em binários:

1 =000
2 =001
3 =010
4 =011
5 =101


Ao chegar em 19/01/2038 03:14:07 em binário será 01111111 11111111 11111111 11111111, após isso o computador vai entender como 13/12/1901 20:45:52.

Veja um exemplo do que eu estou falando:



Bom, graças a Deus não somos como os pessoal da M$ que só avisa em cima da hora para você ser obrigado a comprar o patch dos programas que eles criam... esse bug foi descoberto com 32 anos de antecedência e já tem um patch para consertá-lo. Veja o código na próxima página.

Caso você queira ler o artigo no qual eu baseei a pesquisa:
    Próxima página

Páginas do artigo
   1. Explicação
   2. A solução
Outros artigos deste autor

Aprendendo a melhorar os seus scripts

Servidor de Mídia com 128 MB de RAM

Máquina Enigma e encriptação em XOR

Raios de luz explodindo atrás do texto

Proteção de tela ou vídeo como papel de parede

Leitura recomendada

Estudando recursividade direta e indireta

Tratamento de exceções na linguagem C

Cuidado com números em Ponto Flutuante

GNA: um Coprocessador para Aceleração Neural

Mapear objetos em C

  
Comentários
[1] Comentário enviado por elgio em 04/03/2008 - 10:42h

Parabéns pela didática!
Excelente!

Me fez lembrar do bug que a primeira versão do NT tinha: eles usaram uma variável de 32 bits para contar o número de milisegundos que a máquina estava ligada. Em 49 dias esta variável entrava em overflow e o computador se resetava :-O

Mas não se preocupem, foi sem impacto. Ninguém conseguia ficar com um Windows tanto tempo ligado sem ter que reiniciá-lo por outros motivos :-D

hehehehe

[2] Comentário enviado por hellnux em 04/03/2008 - 10:47h

Opa,

Interessante o artigo. No BUG de 2000 nem conhecia Linux e nem windows direito.... e do NT nem sabia x]

Vi algo que pode estar errado, acho que seja assim:

0 = 000
1 = 001
2 = 010
3 = 011
4 = 100
5 = 101

[]´s

[3] Comentário enviado por hlegius em 04/03/2008 - 11:11h

Em 64bits parece que o erro não ocorre mais ...

[hlegius@Selene ~]$ date -d 01/19/2038
Ter Jan 19 00:00:00 BRST 2038
[hlegius@Selene ~]$ date -d 01/20/2038
Qua Jan 20 00:00:00 BRST 2038

Acho que a limitação está na plataforma 32bits...

[4] Comentário enviado por m4tri_x em 04/03/2008 - 11:15h

Valeuu...

[]´s

[5] Comentário enviado por M4iir1c10 em 04/03/2008 - 11:41h

Obrigado pela dica hlegius, eu esqueci de colocar esse detalhe no artigo o bug e em plataformas 32bits.

hellnux esse sitema binario e coisa de computador mesmo... olha so eu erei uma conta de 1 a 5, k-ra-k.... valeu pela correcao.

[6] Comentário enviado por removido em 04/03/2008 - 11:56h

gostei cara,
muito interessante !!!!!!!!!!!!!!!!!!

[7] Comentário enviado por Teixeira em 04/03/2008 - 13:19h

Valeu, muito bom o artigo.
O que eu iria comentar os colegas já comentaram.
( Tá passeando em Sydney? "Gudái, máite!..." Tem "snáiks" por aí?... hehehe!)

[8] Comentário enviado por removido em 04/03/2008 - 14:36h

só uma observação gramatical na introdução...

Seria Consertar, Concertar vêm de Concerto, de Orquestra, música e tal. =)

[9] Comentário enviado por removido em 04/03/2008 - 18:59h

Convenhamos, né cambada... A gente nem sabe se daqui a 32 anos a informática base-ar-se-á (gostaram ?????) em 111110000 e, então, sem exageros.....

Agora, que ficou um muuuuuuuust os códigos mudando constantemente na página, isso ficou..


Aaaaaaaaiiiiiiiiiiiiiii, gamei!!! ;-)

[10] Comentário enviado por M4iir1c10 em 05/03/2008 - 07:48h

Desculpe Rodrigo Campelini mais eu escrevi consertar ou concertar? Eu acho que foi com s e nao com c... qual eu devo usar ? Desculpem pelos erros ja tem um tempo que eu estou sem falar portugues, ai ja viu ne? o verbo to be em portugues "Eu estarei indo comprar chocolate"...rsrsrs


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts