O defeito

A divisão no primeiro Pentium usava o algoritmo Sweeney-Robertson-Tocher, que funciona consultando quocientes parciais numa tabela. A tabela era implementada como um arranjo lógico programável de 2.048 células, das quais 1.066 precisavam conter um de cinco valores: menos dois, menos um, zero, mais um, mais dois.

Por causa de um erro no script que carregava o arranjo, cinco entradas ficaram de fora. Quando o hardware de divisão indexava uma dessas células, lia zero em vez de mais dois, e a resposta saía errada - por um erro relativo de até cerca de seis partes em cem mil.

É essa a falha de engenharia inteira. Um script, cinco células, uma resposta errada no quinto algarismo significativo. Versões posteriores carregaram a tabela completa e o problema sumiu.

A estatística, e por que era a errada

A posição da Intel era que a falha era desprezível, e a empresa publicou um estudo para sustentar isso: Statistical Analysis of Floating Point Flaw in the Pentium Processor, que estimava que um usuário típico encontraria um erro mais ou menos uma vez a cada muitos milhares de anos de computação comum. Em divisões aleatórias de 64 bits a taxa é de cerca de uma em nove bilhões.

A aritmética está correta e a conclusão não se segue, por uma razão que vale internalizar porque se repete o tempo todo em trabalho de segurança e de confiabilidade.

A falha era determinística. Para um par específico de operandos ela não falhava raramente; falhava toda vez. Um número de uma em nove bilhões descreve o que acontece quando as entradas são sorteadas ao acaso, e computações reais não sorteiam. Elas rodam a mesma fórmula sobre os mesmos dados repetidamente, num laço, numa planilha, num lote noturno. Um usuário cujo trabalho por acaso tocasse um par afetado encontraria o erro em toda execução e jamais veria um resultado correto - enquanto a média populacional dizia que o problema praticamente não existia.

Média sobre a população é a estatística certa para estimar o total de incidentes. É a estatística errada para dizer a um indivíduo se ele está afetado, e a Intel a usou para responder à segunda pergunta. Todo argumento de risco na forma "a probabilidade é minúscula" merece a pergunta seguinte: minúscula em relação a quê, e a falha é independente ou determinística para uma dada entrada?

A cronologia, que é a história de verdade

Maio ou junho de 1994. Os testes da própria Intel acham o defeito. Os relatos divergem sobre quem e exatamente quando, e uma reconstrução detalhada sugere que provavelmente foi achado mais de uma vez internamente e mantido em silêncio a cada vez. A avaliação interna, citada nesse relato, era que aquilo não qualificava sequer como errata. A empresa revisou a circuitaria em silêncio, não divulgou nada e não recolheu nada.

13 de junho de 1994. Thomas Nicely, professor de matemática no Lynchburg College calculando somas sobre primos e primos gêmeos, nota inconsistências pouco depois de acrescentar um Pentium às suas máquinas. Passa quatro meses eliminando outras explicações - o próprio código, a placa-mãe, o chipset - porque a primeira suposição de um profissional é que o erro é dele.

19 de outubro. Ele tem certeza de que o processador está errado. As máquinas antigas dão a resposta certa; três sistemas Pentium diferentes dão a mesma resposta errada.

24 de outubro. Ele reporta à Intel.

1º de novembro. A Intel responde que verificações preliminares não acharam problema.

30 de outubro, e depois. Nicely manda e-mail a contatos acadêmicos descrevendo o defeito e pedindo que testem as próprias máquinas. A verificação volta rápido, e a história se espalha pela internet jovem numa velocidade que a empresa não previra.

E então a posição que quebrou tudo. A Intel ofereceu troca apenas a clientes que demonstrassem estar afetados - um ônus quase impossível de cumprir, já que estabelecer que seus cálculos tocavam uma das entradas faltantes exigia saber quais entradas faltavam, coisa que a Intel não publicara. Pediu-se prova de dano justamente a quem não podia produzi-la.

20 de dezembro de 1994. A Intel voltou atrás: troca sob pedido, sem perguntas, com lançamento contra os resultados do quarto trimestre. O valor foi de cerca de 475 milhões de dólares. O relatório anual da empresa se descreveu como tendo sido engolfada por uma controvérsia.

O que um profissional deve tirar disso

O defeito era barato e o tratamento foi caro. Havia outra sequência disponível em cada passo: publicar a errata em maio, descrever as operações afetadas, lançar a correção, oferecer troca a quem fizesse trabalho numérico. Esse caminho custa uma semana ruim e algum silício. O caminho tomado custou quase meio bilhão de dólares e trinta anos sendo o exemplo. É o argumento de que não existe código perfeito aplicado ao hardware: a falha não foi de engenharia, foi no intervalo entre saber e dizer.

"Consertamos em silêncio" é uma decisão com prazo de validade. A Intel corrigiu a circuitaria sem dizer nada, o que funciona só enquanto ninguém de fora acha o original. Alguém sempre acha - e quando acha, o fato de você já saber vira a história, substituindo o defeito por completo. A DigiNotar revogou certificados por um mês em silêncio e foi descoberta por um cidadão comum; o formato é idêntico.

Pedir ao cliente que prove o dano inverte a relação. Na prática, diz a ele que é ele quem está sob suspeita, no momento em que mais precisa ser acreditado - o oposto do que o registro do Therac-25 ensina sobre relatos que não se consegue explicar de imediato. Onde um defeito é determinístico e as entradas afetadas são conhecidas do fabricante e não do usuário, o ônus não pode honestamente ficar com o usuário.

E quem achou era um estranho fazendo o próprio trabalho. Nicely não estava auditando a Intel. Estava contando primos, notou que seus números estavam errados, e passou quatro meses suspeitando de si mesmo antes de suspeitar do chip. Quase todo caso deste catálogo tem alguém como ele: Kaminsky com o DNS, um usuário de Gmail em Teerã com a DigiNotar, um departamento de estatística com um mapa. O relato que chega de fora, sobre algo que não deveria ser possível, é a entrada mais valiosa que um fabricante recebe e a que mais provavelmente será descartada.

Fontes