18 janeiro 2008

Bug de 2038

Quem não se lembra do tal Bug do Milênio (Year 2000 Bug ou simplesmente Y2K Bug)? Só pra dar uma refrescada na sua memória, esse bug estava relacionado à forma de representação das datas pelos computadores - que eram baseados em projetos de uma época onde bytes valiam ouro - na qual dois algarismos eram utilizados para representar os dias, dois eram para os meses e somente outros dois para os anos. As datas, então, ficavam assim: 02/10/98, 10/04/97. Então, para representar a data por completo, algum grande sábio teve a brilhante de fixar um “19” antes dos dois dígitos do ano; esse tipo de solução é conhecida hoje por ATE* ou gambiarra mesmo. Assim, se a data fosse 09/01/84, ela seria mostrada como 09/01/1984. Agora já fica fácil imaginar o que aconteceu depois de 31/12/99, não é**? Bem, menos de dez anos após o tal Y2K Bug os profissionais da computação já estão antenados em um outro, agora para 2038!

Desta vez o problema é um pouco mais sério, já que a maioria dos computadores de hoje são baseados em uma arquitetura de 32 bits, ou seja, os seus dados são representados na memória como seqüências de 32 dígitos binários, mais ou menos assim: 10101010 11001100 11110000 10100101. Desta maneira, o maior número que pode ser representado utilizando a base binária é 01111111 11111111 11111111 11111111***. Isso na base decimal corresponde a 2147483647 e, isso, convertido em data, corresponde a 19 de janeiro de 2038, pra ser mais preciso, exatamente às 03:14:10 h.

Porém, é quase certo que até 2038 o padrão da arquitetura já tenha sido migrado por completo para 64 bits, que permitirá representar datas por cerca de, aproximadamente, 300 bilhões de anos.

* ATE: acrônimo para Adaptação Técnica Emergencial.
** depois de 31/12/1999 os computadores assumiriam a data como sendo 01/01/1900.
*** o primeiro dígito (do tipo signed) é utilizado para indicar se o número é positivo ou negativo. Por exemplo: 0 para positivo e 1 para negativo. Então, na verdade, a data é representada por 31 bits.

Nenhum comentário: