Terça, 25 de Junho de 2024
Tecnologia TECNOLOGIA

Você já ouviu falar do Bug do Milênio?

Vamos lá que vou explicar como ele funciona e porque ele ocorre e também porque ele também ocorrerá em 2038

09/10/2023 às 14h20
Por: Miguel Toledo
Compartilhe:
Você já ouviu falar do Bug do Milênio?

Em meados dos anos 2000, exatamente no dia 01/01/2000, ocorreu o famoso Bug do Milênio, deixando muitos sistemas inoperantes ou com erros graves, impedindo muitas vezes que os usássemos. Na época, quando ainda estava na área de Arquitetura e Urbanismo, em entrega final de semestre na faculdade, esbarramos no aplicativo de design Corel Draw não iniciando de jeito nenhum. Ao final do dia já havíamos conseguido um patch de correção.

Hoje, analisando com a cabeça de “gente da TI”, consigo entender perfeitamente o que aconteceu. Segue o fluxo aí:

Apesar da computação ser um “mundo livre”, onde temos várias possibilidades, uma infinita gama de coisas a serem exploradas, por trás tudo é parametrizado. Quando digo parametrizado significa que existe algo que controla tudo para aquela tecnologia funcionar. Um exemplo: não conseguimos adicionar uma palavra dentro de um lugar no sistema onde ele quer que você insira uma data, como na hora de fazer um pix no aplicativo do banco. Essa funcionalidade é uma barreira planejada para prevenir erros. Da mesma forma, outras coisas são parametrizadas, mas que possuem um maior impacto na operação desse sistema. Uma delas é o sistema de gravação de datas.

Dentro da parametrização de datas estabeleceu-se que o “ano 0” dos sistemas era 01/01/1900 e por padrão ela era armazenada no formato dd/mm/yy, ou seja, usando dia, mês e os últimos dois dígitos do ano.

É no ano que tá o problema todo: quando 1999 virou pra 2000, no dia 01/01/2020 ao invés dos aplicativos entenderem que era 01/01/2000, acabaram por entender que era 01/01/1900, pois os últimos dois dígitos dos anos são iguais:

 

Mas porque isso foi adotado? Simples: economia. Lá nos fundamentos da computação, na década de 60 os computadores ainda não eram nem acessíveis à nós e possuíam recursos semelhantes à de uma calculadora comum (um disco armazenava 180kbytes na época e uma foto sua de 15 megabytes usaria quase 86 discos par ser mantida guardada). Com isso, era necessário que ele fosse o mais enxuto possível. Na computação usamos a unidade de medida bytes, assim como no dia a dia usamos quilogramas, gramas, metro e outros. Com base nesse raciocínio se estabeleceu que as datas seriam armazenadas em 6 bytes, 2 para o dia, 2 para o mês e 2 para o ano ao invés de usar 2 para o dia, 2 para o mês e 4 bytes para o ano:

Mas porque agora vai acontecer um novo erro em 2038? Bom, pelo mesmo motivo: tamanho da data, só que um pouco mais complexo. Nos padrões de data definido em vários sistemas é usado o tamanho de 32bits (equivalente a 4 bytes) para armazenar essa informação.

“Mas Miguel, tu não disse que precisa de 1 byte pra cada dígito?”

Depende da forma como a linguagem foi construída. Na representação do tipo POSIX, essa que o Bug 2038 afetará, não é baseada em cada byte armazenar um dígito e sim um byte armazenar um índice que aponta para uma data e hora.

“Mas que diabos é isso?”

Bom, funciona assim:

Imagina um restaurante. Você tem 32 pratos (32 bits) no cardápio para analisar e escolhe o “Fritas com Bacon e Cheddar”. Quando você fala pro atendente o pedido, ele vai lá na cozinha e grita: “Saindo um Fritas com Bacon e Cheddar!”. O chefe vai lá e tira um prato de fritas com cheddar e bacon pronto da geladeira, esquenta e entrega? Não! O chefe vai buscar no livro de receitas ou na própria memória os ingredientes do prato e ai sim vai preparar. No fim você tem um belo lanche.

Quando falamos de índice e apontamento, é a mesma coisa. O índice é o menu, onde tem todos os registros dos possíveis pratos. Quando o índice é “gritado” (acessado) ele “faz o pedido” (requisição) do dado real (ingredientes) e assim entrega o valor solicitado (prato pronto). O primeiro item do nosso menu foi adotado como sendo o dia 01/01/1970 às 00:00:00. O computador só entende 0 ou 1 (depois podemos falar sobre isso em outro artigo), então considerando 32 bits que citei acima, temos um índice de 32 dígitos, ou seja, o primeiro índice é o 00000000 00000000 00000000 00000000 que é essa data inicial. Depois dele vem o 00000000 00000000 00000000 00000001 marcando 01/01/1970 às 00:00:01, 00000000 00000000 00000000 00000010 marcando 01/01/1970 às 00:00:02 e assim sucessivamente.

Bom, o limite desse sistema é quando o marcador atinge o índice 10000000 00000000 00000000 00000000, porque no próximo segundo ele volta a zero, reiniciando a sequência.

Essa data de reinicio da sequência é a de 19/01/2038 as 03:14:08, data do próximo Bug do Milênio.

“Mas Miguel, eles já estão trabalhando nisso?”

Para os sistemas de 32 bits, a resposta é sim. Grande parte deles já estão trabalhando em cálculos para “adaptar” seus aplicativos para o bug.

“Tem outro tipo?”

Sim, a arquitetura dos novos sistemas atualmente trabalha com 64 bits (lembra de um técnico de TI te perguntar se o seu Windows era 32 ou 64 bits?). Então temos mais espaço ao representar uma data.

E sabe em que ano, depois do de 2038, ocorrerá um novo bug?

Num belo domingo, 4 de dezembro do ano de 292.277.026.596.

* O conteúdo de cada comentário é de responsabilidade de quem realizá-lo. Nos reservamos ao direito de reprovar ou eliminar comentários em desacordo com o propósito do site ou que contenham palavras ofensivas.
500 caracteres restantes.
Comentar
Mostrar mais comentários
Ele1 - Criar site de notícias