#acessibilidade Ilustração com circuitos integrados desenhados parecendo insetos, com suas conexões parecendo perninhas. Ao fundo há vários números desenhados.
Se você chegou até aqui, acho que primeiramente seria bom deixar claro o que chamamos de “bug”. No início da computação os computadores eram grandes máquinas com milhares de válvulas e relés, veja a foto do Eniac, por exemplo:
#acessibilidade Foto em preto e branco de Betty Jennings e Frances Bilas operando o ENIAC entre 1945 e 1947. O computador ocupava um grande galpão inteiro e pesava cerca de 30 toneladas.
De vez em quando uma válvula ou relé desses antigos computadores dava problema. Em muitos casos isso acontecia porque insetos (ou “bugs”) entravam no equipamento, assim, com o tempo qualquer problema em sistemas computacionais passou a ser chamado de bug. O termo já era amplamente usado na engenharia, mas na computação ele foi adotado na década de 40. Veja a foto do primeiro “bug” encontrado:
#acessibilidade Foto de uma mariposa colada com fita adesiva em uma folha de caderno. Na pagina diz que ela foi encontrada no relé 70, painel F do Mark II, computador construído na Universidade de Harvard nos EUA. Primeiro caso de um “bug” sendo encontrado em um computador e sendo “debugado”, datado de 1947.
Décadas depois chegamos ao famigerado “Bug do Milênio” ou “Problema do Ano 2000” ou mesmo “Y2K”. Talvez você ainda nem fosse nascido, mas na época a forma como os sistemas computacionais marcavam as datas era diferente de hoje. Resumidamente, cada elemento da data possuía 2 dígitos, por exemplo, a data em que a Seleção Brasileira de Futebol conquistou o Tetra seria mostrado como 17/07/94 e o sistema entenderia que o ano era 1994. Esse formato foi adotado a fim de economizar memória, já que esse era um recurso bastante valioso e cada bit importava.
Até que veio o ano 2000, dando origem ao “Bug do Milênio”. Acontece que ao fim de 31/12/99 os computadores mostrariam 01/01/00, que seria interpretado como primeiro de janeiro de mil e novecentos.
Nos anos que precederam o tal “bug” o público tomou conhecimento de que isso aconteceria e empresas chegaram a estimar o custo mundial para reparar o problema em 600 bilhões de dólares, mesmo ninguém sabendo exatamente quais danos ele poderia causar.
É claro que quando programadores se deparam com um problema logo correm para resolvê-lo, assim o “apocalipse” foi evitado, apenas pequenos problemas foram relatados ao redor do mundo (como alarmes em usinas nucleares sendo disparados, por exemplo) e mesmo eles foram rapidamente consertados.
Mas a história não acaba aí e um novo problema se aproxima e é potencialmente mais grave.
O Problema do Ano 2038
O “Problema do Ano 2038” ou “Y2K38” ou “Épocalipse” deve acontecer em sistemas 32 bits em 19 de janeiro de 2038, quando o relógio marcar 03:14:07 UTC, então voltaremos no tempo sem nem precisar de um DeLorean. Confuso? Vamos entender com calma.
O bit é um dígito binário. No sistema numérico que usamos normalmente, chamado de sistema de numeração decimal, temos 10 caracteres para representar os números, já no binário temos apenas dois, o 0 e o 1. Assim, se fôssemos contar de zero até dez em binário, a sequência seria:
0 → 1 → 10 → 11 → 100 → 101 → 110 → 111 → 1000 → 1001 → 1010
Parece complicado, mas se você reparar ele segue a mesma regra que você aprendeu na escola para o sistema decimal: quando você incrementa o maior dígito, no caso o 9, ele volta a ser o menor dígito, zero, e então “vai um”. Somando 1 ao número 99 ele se torna 100, o mesmo acontece em binário, mas como são só dois dígitos para representar os números, a sequência fica como mostrei acima.
Bom, mas como isso poderia causar outro “bug do milênio”?
Sistemas Unix usam uma data de referência chamada de “Unix Epoch” ou “Era Unix”: 01/01/1970 00:00:00 UTC. Esse momento é considerado o “zero” nesse caso e quaisquer outras datas podem ser representadas como números inteiros contando a quantidade de segundos desde a “Era Unix”. Ainda está abstrato?
Considere a hora em que este texto foi publicado: 18/10/2021 09:00:00 UTC (seis da manhã no horário de Brasília), seu equivalente em segundos, considerando 01/01/1970 00:00:00 UTC como zero, seria 1634547600 (um bilhão, seiscentos e trinta e quatro milhões, quinhentos e quarenta e sete mil e seiscentos segundos). Em binário ele seria representado como 1100001011011010011011110010000.
É aí que está o problema: em sistemas de 32 bits, quando todos esses dígitos binários forem 1 (o que acontecerá em 19/01/2038 00:14:07 UTC ou 2.147.483.648 segundos após a Era Unix), ao passar de 1 segundo todos se tornarão zero novamente e duas coisas poderão acontecer, a depender do sistema: ou o “vai um” será interpretado como uma mudança de sinal, tornando o número negativo e voltando para 13/12/1901 20:45:52 (2.147.483.648 segundos antes da Era Unix) ou voltará para 01/01/1970 00:00:00.
#acessibilidade Imagem animada que mostra os números em binário e decimal sendo incrementados até a data do “bug” de 2038, com a data voltando para 1901.
Esse problema poderá afetar sistemas embarcados, bancos de dados, dentre outros. Felizmente temos muito tempo até lá para evitar maiores problemas. Além disso, hoje em dia usamos muito mais sistemas de 64 bits e eles podem armazenar números um pouco maiores (algo como algumas vezes a idade do universo).
Mesmo com o mundo todo de sobreaviso e com precauções sendo tomadas eu não consigo deixar de pensar: o que será que vai acontecer? Vou até marcar na minha agenda para não esquecer.
Fontes:
Fonte da imagem destacada: Imagem de chenspec por Pixabay
Fonte da imagem 1: United States Army, Public domain, via Wikimedia Commons
Fonte da imagem 2: Courtesy of the Naval Surface Warfare Center, Dahlgren, VA., 1988., Public domain, via Wikimedia Commons
Fonte da imagem 3: Monaneko, Public domain, via Wikimedia Commons
https://www.hardware.com.br/guias/historia-informatica/eniac.html
https://www.computerworld.com/article/2515435/moth-in-the-machine–debugging-the-origins-of–bug-.html
https://www.congress.gov/105/crpt/hrpt827/CRPT-105hrpt827.pdf
http://news.bbc.co.uk/1/hi/sci/tech/586620.stm
https://www.tomsguide.com/us/2038-bug-bh2017,news-25551.html
SPINELLIS, Diomidis. Code quality: the open source perspective. Adobe Press, 2006.
Para saber mais:
https://www.epochconverter.com/
https://www.rapidtables.com/convert/number/decimal-to-binary.html
Outros divulgadores:
Vídeo O novo BUG do milênio – Y2K38 do canal Peixe Babel no YouTube