Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web
O Canto do Cisne

O que é o BUG do Milênio? (Y2K)



Y2K é a sigla em Inglês da frase "Year 2000" , ou "ano 2000"

Se você se pergunta porque os computadores não podem compreender o ano 2000, acredite que não está sozinho. O fato é que os computadores SIM podem compreender o ano 2000. O problema está em que a maior parte destas máquinas aceitam as datas como "73" ou "99" em lugar de "1973" ou "1999". As máquinas foram programadas propositadamente para entender que "73" deve significar "1973" e "99" deve significar "1999". Provavelmente agora se pergunte: qual deve ser o significado de "00"? 1900 ou 2000? (a não ser o MS-DOS, se tentar entrar com esta data não poderá por que o MS-DOS acordou somente em 1 de Janeiro de 1980).
Para os computadores "00" significa "1900", e assim depois do 31 de Dezembro de 1999 às 23:59:59 virão as 0:00:00 do 1 de Janeiro de 1900, agora, como você bem pode supor, as pessoas gostariam que depois de 1999 viesse o ano 2000.

Que tipo de gente tomou uma decisão tão maluca?. Nenhum louco o fez, mas a decisão de cortar os dois primeiros dígitos do ano foi tomada por pessoas que estavam muito limitadas nos recursos computacionais.
Quando estas máquinas começaram a ser programadas comercialmente na década de 50 a) a gente estava na metade do século e b) a memória dos computadores era MUITO cara (sim, mesmo os discos magnéticos e as fitas eram muito caros).
Algumas palavras chave na historia da computação são: Babbage, Konrad Zuse, Ada Lovelace, Alan Turing, a máquina Enigma, Bentchley Park, a Máqina Diferencial, Museo Tecnológico de Munique, ENIAC, ILLIAC, MANIAC, MARK I, Projeto Manhatann, Von Neumann, Batman e Robin..

Na década de 50 a gente se perguntava muitas coisas, qual é a nova música de Elvis Presley?, os comunistas comem crianças?, e o mais importante: para que gastar valiosos recursos computacionais guardando uma quantidade de "19"?, depois de tudo (com exceção talvez dos japoneses), ninguém poupa dinheiro ou assina contratos com prazo daqui a 50 anos. Por outro lado, a maior parte das pessoas (importantes o suficiente como para ter registrados seus dados em computador) nasceram depois de 1900. A conclusão obvia foi assumir que o ano 00 = 1900, 01 = 1901... 73 = 1973 e 99 = 1999, poupando assim dois lugares (19) em cada ano, já que muito poucas datas se excederiam do século XX. Esta parece ser uma magra poupança, porém para as transações em registros e cartões perfurados da época significava uma poupança enorme. As pessoas nascidas depois que Bill Gates ganhou seu primeiro bilhão de Dólares pensam que os computadores sempre foram criados com CD-ROM 32X e placas SVGA de 8MB, mas eu juro que as máquinas da década de 50 NEM SEQUER tinham monitores e teclados, mas apenas fios de cobre para conversar com as CPU (logo a seguir vieram as máquinas teletipo). Uma GRANDE memória era considerada de 2 KB (sim, 2 KILO BYTES!, pequena demais como para escrever programas de "teletipo-savers" como as torradeiras voadoras, essa é a razão pela que nunca existiram programas para salvar teletipos naquela época).

E depois?, que aconteceria depois de 1999?

Não aconteceria nada, por que quando os "nerds" da época assistiram o filme de A. C. Clarke "2001" ficaram convencidos de que naquele distante e maravilhoso futuro (2000) seria suficiente com dizer para as máquinas: "por favor Sr. computador, agora é o ano 2000, o momento em que você deveria mudar sua maneira obsoleta e humana de pensar em datas..", e Mr. computador compreenderia nossas palavras e executaria as mudanças em todos os arquivos e programas enquanto resolvia conjeturas filosóficas. Ontem pedi para o meu Pentium corrigir os problemas do milênio mas ele se limitou a eructar um "general failure". Joguei uma aspirina e um copo de água pela fenda do diskette e parece que agora está um pouco melhor.

Mesmo visionários como A. C. Clarke jamais poderiam imaginar esta conversa: Dave - "Abra a porta HAL", HAL - "Abort?, Retry?, Fail?". Mesmo o esperto A. C. Clarke não poderia prever a quebra da PanAm, Bill Gates, General Failures, Windows, ou mesmo mouses e realidade virtual.
A maior parte do software produzido nos 60, 70 e 80 foram programas em "COBOL" (COmmon Business Oriented Language , ou linguagem comum orientado a negócios), talvez por que a parte do Leão na industria informática estava com as grandes corporações e agencias do governo. Não lembro alguma máquina pessoal IBM-360 ou uma portátil ENIAC à válvulas, assim que provavelmente não existiram depois de tudo. Mesmo agora com as linguagens de quarta geração, filosofia OOP, programação Visual e outras invenções maravilhosas e esbanjadoras de recursos, algo como 60 ou 70 por cento de todo o software comercial operando HOJE são estes velhos programas COBOL escritos nas décadas de 60 e 70. (Hoje existe também Visual Cobol, mas não sou precisamente um fã do COBOL).

Por que COBOL?, por que COBOL é uma linguagem (quase única nos 60) bem estruturada para trabalhar com arquivos da mesma forma que os homens de negócios fazem normalmente com fichas. COBOL foi a primeira linguagem preparada para manejar arquivos através de MÁSCARAS, ou seja, organizar a informação através de blocos de dados (uma facilidade mais tarde incorporada por C e Pascal). As linguagens computacionais anteriores ao COBOL (BASIC e FORTRAN) não tinham esta facilidade. COBOL podia gravar e recuperar conjuntos completos e bem estruturados de informações e maneja-los como se fossem fichas de dados, por exemplo:

Nome: xxxxxxxxxxxxxxxxx
data : xx/xx/xx
Ender.: xxxxxxxxxxxxxxxxxxxxx


Desta forma a gente podia programar as máquinas exatamente como fichas dentro do fichário, sem se preocupar com os detalhes internos sobre como gravar e ler as fichas.
Mas computadores SIM devem se preocupar com estes detalhes, e quando gravam informações, o fazem colocando um bloco (ou registro) após o outro, por exemplo:

PACO.RABA....090173Addison.Av....MARIA.INES...110386Rose.Street....
|_____ primeiro registro__________||_______ segundo registro __________|

Se presta atenção ao registro notará o número "090173" colado à "Addison Av.". Este número é provavelmente uma data que significa "9 de Janeiro de 1973", o mesmo que "110386" significamdo "11 de Março de 1986". Lembre este detalhe por que brevemente voltaremos aqui. Lembre também isto: grandes e medias empresas tem milhares (mesmo dezenas de milhares) de programas que lêem e atualizam estes registros, e também podem chegar a ter milhares de arquivos que guardam datas. Cada programa usa uma espécie de "gabarito" quando lê os registros. Voltando ao nosso exemplo, cada programa "sabe" que as primeiras 12 posições do registro significam "nome da pessoa", as 6 seguintes significam "data de nascimento" e as 14 seguintes "endereço", começando de novo com a seguinte pessoa.
Provavelmente você esta começando a compreender o inferno que será o dia em que alguém trate de "estender" os anos a 4 números. Para inserir 2 lugares a mais em cada registro os vizinhos terão que "correr" um pouco à direita, e esto poderia significar re-escrever totalmente os (milhares) de arquivos, alguns dos quais contendo centenas de milhões de registros. Quando a gente pensa que a maior parte dos programadores que criaram tudo isto estão atualmente aposentados, o problema cresce a níveis de pesadelo.

E por que não deixar as coisas como estão?, seria suficiente com ensinar aos computadores que agora "00" significa "2000", que "01" significa "2001" etc. até "50" significando "2050", e ensinando também que todos os números acima do 50 significam "1900", assim "51" significa "1951", "99" significa "1999" etc.
Esta *poderia* ser uma idéia excelente ou *poderia* ser um verdadeiro desastre, dependendo do tipo de aplicação que você executa. Suponha que você precisa um relatório ordenado por datas. Para isto os programadores reorganizam as datas como "aa/mm/dd" (ano/mês/dia) por que o ano é más importante que o mês para ordenar, o mês más importante que o dia, o dia que a hora... etc. Se você mantém os registros inalterados, o computador pensará que "01/01/01" está antes que "51/01/01", mas não tinha dito você que "51" era "1951" e "01" era "2001"?. Ok, você poderia ensinar aos computadores uma nova forma de ordenar datas... ou talvez fazer um processo intermediário para ordena-las corretamente, mas se você já tem 1000 processos de ordenação operando então necessitará de 1000 intermediários até o dia 31 de Dezembro de 1999... e assim a pesadelo se arrasta na sua empresa.

Se pode pensar em alguns "níveis de dificuldade" para resolver o problema do Bug do Milênio. Primeiro está o nível "fácil", logo o nível "pesadelo". Estos dois níveis existem por que existem muitos sistemas que não estão programados no velho COBOL (o algum outro tipo de linguagem duro como o RPG ou mesmo assembler). Estas novas linguagens são os dBase compatíveis, algumas versões de Pascal e C e qualquer outra linguagem proprietária que venha dentro de um SGBD (Sistema Gerenciador de Banco de Dados) como Clarion, Oracle, Acess, Dataflex etc., incluindo aqui as novas versões de COBOL. Estas linguagens novas armazenam as datas numa forma muito mais eficiente que os velhos programas COBOL, cortando os dois números do ano (quando desejado) apenas para mostra-los de forma mas legível, porém internamente guardando as datas completas com todos os 4 dígitos para o ano. Isto significa que as novas linguagens guardam as datas num formato próprio (e eficiente), não permitindo que os programadores decidam se colocam ou não dois dígitos no ano. Estas linguagens também cuidam de todas as tarefas que concernem as datas, como os anos bissextos, qual dia da semana cai em determinada data, e quando dadas duas datas calculam exatamente a quantidade de dias que ha entre as mesmas.
Estas operações são muito importantes para a comunidade financeira (bancos, bolsas, seguros, financeiras...) por que as taxas de juros, lucros, perdas e todo tipo de geringonça estão calculados dia a dia com muita precisão. Apenas um dia mal colocado representa uma tremenda dor de cabeça para estas organizações.

Simplificando: o nível fácil é quando os profissionais só precisam trocar a forma em que os computadores mostram e perguntam as datas, deixando os arquivos intocados. Normalmente as datas aparecem nos relatórios e telas como "dd/mm/aa" para poupar espaço. Esta é a forma em que as máquinas perguntam e mostram as datas, então para modifica-los você teria que programa-las para que as apresentem na forma de "dd/mm/aaaa".
Se sua empresa tem alguns milhares de programas que devem ser mudados (para mostrar AAAA em lugar de AA) por causa do Bug do Milênio, mesmo assim esta é a parte fácil da tarefa, já que você pode imaginar que quando alguém modifica a estrutura de um arquivo TODOS os programas que estão relacionados com este arquivo DEVERÃO ser alterados também, mesmo aqueles que nada tem a ver com o problema.
Suponha no exemplo anterior que você tem um programa que lê as datas de nascimento e MIL programas que não lêem a data de nascimento e sim o nome e endereço. Se você modifica o arquivo para colocar lugares extras para os anos então terá que modificar também 1001 programas, um por causa das datas e 1000 para colocar dentro deles a nova estrutura do arquivo. Você terá que alterar, compilar e testar 1001 programas em lugar de apenas um.
Por outro lado, se a data esta completa dentro do arquivo na forma de "dd/mm/aaaa" então você somente precisará trocar (e compilar e testar) apenas um programa, aquele que lida com as datas.

Muitas soluções intermediárias podem ser propostas para cada Centro de Processamento de dados (CPD), e aqui entram os consultores e gurus de todo tipo. Para CPDs que usam as novas linguagens, a solução cai no nível "fácil", ou seja, apenas basta modificar os programas, compila-los e testa-los novamente. Para outros CPDs a solução pode vir através de um mix de processos.
Não todas as linguagens COBOL são iguales, existem varias empresas que vendem compiladores COBOL (algumas já desaparecidas), existem muitas versões de COBOL, muitos "adendos", normas ISO, ANSI, exceções e padrões colocados a intervalos regulares começando nos anos 60. Seu CPD pode estar perdido em algum lugar dentro de este universo rodando um COBOL V7.34 Versão ac.8 ANSI X3.23a 1989 para JMB 361 sobre OS/3 ou hieroglífico similar.
Alguns compiladores COBOL guardam os números usando somente a metade direita de cada octeto (byte) por que cada número do 0 a 9 pode ser representado na sua forma binaria usando apenas 4 bits, então para alguns compiladores o armazenamento dos números sempre ocorre na forma 0n 0n (hexadecimal), e aqueles 4 bits não utilizados poderiam sê-lo para indicar que as datas pertencem ao ano 2000 ou ao ano 1900, deixando assim a estrutura dos arquivos inalterada em seu tamanho.
Se seu sistema é de "curto prazo" e não precisa de relatórios ordenados por data, pode adotar a solução de ensinar às máquinas que as datas inferiores a 50 significam "2000" e superiores a 50 significam "1900".

Uma boa regra para TODOS os sistemas é criar um "ambiente 2000", duplicando todos os programas e arquivos neste ambiente, colocar o relógio do computador nas 23:50:00 do 31 de Dezembro de 1999 e executar todas as tarefas possíveis e imagináveis neste ambiente, controlando cuidadosamente o que sucede no momento que o relógio muda para o novo milênio. Quando tudo parece estar funcionando bem, atrase novamente o relógio para as 23:50:00 do 31 de Dezembro e comece tudo novamente. Lembre algumas das leis de Murphy relativas a computadores: "Não existem bons ou maus programas, existem apenas programas bem testados ou mal testados" e "se o seu sistema passou em todos os testes, então não foi bem testado". O melhor é atrasar o relógio vários dias antes do 2000 e executar o sistema nestes dias.

E o que ha sobre aqueles pequenos microprocessadores que executam programas em assembler para controlar aeroportos, radares, aeronaves, maquinas de lavar e mísseis Tomahawk?. Este é um universo completamente diferente. Não existem aqui grandes arquivos nem sistemas, mas creio que continuarei esta novela mais tarde.

Se deseja ler o Kit de Primeiros Socorros para o Bug, tecle aqui.





Se deseja saber como serão os computadores no próximo milênio convido-lhe a ler O Canto do Cisne"

Você é a pessoa a visitar esta página