Mariner 1 est la première sonde du programme Mariner. Lancée le 22 juillet 1962 pour une mission de survol de Vénus, l'officier de sécurité de champ de tir commanda sa destruction 294,5 s après son lancement.
D'après le communiqué de la NASA :
« le booster fonctionna correctement jusqu'à ce qu'une déviation imprévue en lacet (vers le nord-est) fut détectée par l'officier de sécurité du pas de tir. Une défaillance des commandes de guidage rendit le pilotage impossible et conduisait le véhicule au crash, possiblement sur les couloirs de navigation de l'Atlantique nord ou une zone inhabitée. La commande de destruction fut envoyée 6 secondes avant la séparation, après laquelle la destruction du véhicule serait devenue impossible. La balise radio continua à transmettre son signal pendant 64 secondes après l'envoi de la commande de destruction. »
Le lancement de la sonde était inialement prévu la veille mais avait été reporté précisemment à cause d'un dysfonctionnement du système de commande de destruction du lanceur Atlas.
La NASA attribue à un fonctionnement incorrect des équipements radio embarqués de l'étage Atlas la perte d'un des signaux de guidage au sol, exposant le véhicule à une malfaçon du logiciel pilote. Le rôle de cette erreur logicielle dans l'échec du lancement reste assez mystérieux, noyé dans les ambiguïtés et contradictions des différents rapports et déclarations, officiels ou non.
La nature complexe du problème et les descriptions imprécises qui en ont été faites engendra toutes sortes de légendes urbaines. C'est notamment dans le folklore informatique et jusqu'à récemmment que persiste une croyance à propos du rôle suppposé d'une faute de frappe en Fortran.
La mission fut accomplie plus tard par Mariner 2, doublure de Mariner 1. Il était originalement prévu que ces deux sondes soient lancées à 24-27 jours d'intervalle pour survoler Vénus avec 3 à 14 jours d'écart.
L'explication la plus exacte fut celle la plus tardive : une erreur de transcription manuelle d'un symbole mathématique dans la spécification d'un programme, plus exactement une barre suscrite manquante.
Néanmoins, il persiste encore la version incriminant un trait d'union manquant dans les données ou le programme de l'ordinateur de bord, parfois même dans les équations. Plusieurs facteurs favorisèrent la longévité de cette mésinterprétation, même dans les rapports officiels de la NASA et du Jet Propulsion Laboratory. Les plus cités sont :
Le New York Times relatant les conclusions d'un comité, affirma que l'erreur provenait d'un trait d'union manquant dans « des données mathématiques ». Cependant, le même article dit que le symbole aurait du être fourni à l'ordinateur au sein « d'autres instructions mathématiques programmées ». Ce genre d'incohérence se retrouve dans de nombreuses variantes de l'histoire, officielles ou non.
Le 31 juillet 1962, un responsable de la NASA, Richard B. Morrison, témoigna devant le Congrès des États-Unis que ce trait d'union
(on remarquera que Morrison dit que la fusée s'est écrasée et non qu'elle fut détruite). Dans le rapport annuel que la NASA fournit au Congrès en 1963, le trait d'union est décrit manquant de deux façons différentes :
« Le comité NASA-JPL-USAF de debriefing post-vol Mariner R-1 a déterminé que l'omission d'un trait d'union dans le code informatique a transmis des signaux de guidage incorrects au véhicule Mariner propulsé par le lanceur Atlas-Agena depuis Cape Canaveral le 21 juillet. L'omission du trait d'union dans la saisie des données amena l'ordinateur à commander automatiquement des corrections de trajectoire inutiles qui mirent le véhicule hors course à tel point qu'il a fallu le détruire. »
Dans ce même rapport, le témoignage de Morrison de l'année précédente est restitué différemment : « Richard B. Morrison, directeur de la division lanceurs de la NASA, témoigna qu'une erreur dans les équations informatiques du lancement de la sonde Mariner 1 vers Vénus le 21 juillet mena à sa destruction quand elle vira hors course. »
En 1965, le rapport final de la mission Mariner-Vénus indique qu'après 4 minutes 25 secondes de vol, une « manoeuvre imprévue en lacet-tangage » se produit : « ... les commandes de pilotage étaient fournies, mais la mauvaise application des équations de guidage emmenèrent le véhicule hors trajectoire. »
On doit à Arthur C. Clarke le résumé de cette affaire par l'expression « détruite par le trait d'union le plus cher de l'histoire ».
Dans un ouvrage de 1985, Oran W. Nicks, directeur des programmes lunaires et planétaires de l'époque, donne une version encore différente mais toujours basée sur le mythe du trait d'union manquant :
« L'antenne de guidage de l'Atlas fonctionnait mal, en deçà de ses spécifications. Quand le signal reçu par la fusée devenait faible et bruité, elle perdait le signal de guidage du sol qui définissait les commandes de pilotage. Cette éventualité avait été envisagée et en l'occurrence l'ordinateur était supposé rejeter les signaux erronés et utiliser un programme interne, ce qui aurait dû faire réussir le lancement. Cependant, à ce point, un second défaut se manifesta. D'une manière ou d'une autre, un trait d'union fut oublié dans le programme de guidage de l'ordinateur embarqué, autorisant les signaux de guidage dégradés à commander le virage et la descente de la fusée. Ce trait d'union manquait aussi au cours des lancements d'Atlas réussis précédents, mais cette partie de l'équation n'était pas alors requise car il n'y avait pas de perte du signal de guidage. Ce qui permet de dire que le premier vol interplanétaire a échoué par absence d'un trait d'union. »
Enfin, le site web de la NASA explique aujourd'hui que le problème était :
« ... apparemment causé par la combinaison de deux facteurs. Le mauvais fonctionnement de l'équipement radio embarqué sur l'Atlas provoqua la perte prolongée du signal de vitesse. La balise embarquée servant à la mesure de cette vitesse a été inopérante pendant quatre périodes de durées allant de 1,5 à 61 secondes. Le comité de debriefing post-vol Mariner 1 détermina que l'omission d'un trait d'union dans les instructions du programme de saisie des données permit la transmission de signaux de guidage incorrects. Pendant les périodes où la balise ne fonctionnait pas, l'omission du trait d'union dans le programme de saisie de données amena l'ordinateur à accepter le balayage radio émis par le sol à la recherche du contact avec la balise, et à le combiner avec les autres signaux du système de guidage. L'ordinateur se mit alors à commander en saccades des corrections de trajectoire inutiles qui mirent finalement la fusée hors course. »
On prétend parfois que le bug provenait d'un point tapé à la place d'une virgule, causant l'instruction de boucle Fortan de la forme :
DO 17 I = 1, 10
à être interprêtée comme l'affectation :
DO17I = 1.10
(les caractères d'espace n'étant pas signifiants dans ce langage). Cependant, le Fortran n'a jamais été utilisé dans les programmes des lanceurs Atlas ou leurs systèmes de guidage. La raison pour laquelle cette variante s'est popularisée reste mystérieuse.
Il y a des rapports anecdotiques de la NASA faisant état de ce type de bug, mais dans le programme Mercury, pas Mariner, de plus l'erreur aurait été repérée et corrigée avant qu'elle n'ait pu avoir de conséquences sérieuses.
La défaillance provient d'une erreur de transcription manuelle dans la spécification du programme de guidage. Le rédacteur a oublié la barre suscrite dans la formule :
qui signifie « la n-ième valeur lissée de la dérivée de R dans le temps ». Sans le lissage spécifié par cette barre, le programme réagissait aux variations mineures de vélocité comme aux écarts importants. Les corrections erronées induites menèrent la fusée hors trajectoire, ce qui obligea l'officier de sécurité à commander sa destruction. Ce défaut de programmation datait du programme Ranger mais ne s'était jamais manifesté.