Il existe des histoires dans le monde de l'informatique qui sont incroyables à découvrir, et il n'y a pas forcément besoin que le protagoniste soit de la trempe de Steve Jobs ou encore Bill Gates.

L'histoire que vous allez découvrir ci-dessous, est certainement l'une de mes préférées, elle n'est pas de moi, mais de Trey Harris et sa version originale (en anglais) est disponible sur son blog : https://www.ibiblio.org/harris/500milemail.html

J'ai décidé de traduire cette histoire car je pense qu'elle peut intéresser beaucoup de développeurs de la communauté francophone, autant que la version originale a pu m'intéresser quand je l'ai découverte.

Ce que vous allez lire juste après est un e-mail groupé envoyé par Trey Harris d'après un sujet intitulé "Votre tâche impossible favorite ?" le 24 Novembre 2002.


En voilà un problème qui était *à première vue* impossible... Je regrette presque de partager cette histoire avec une large audience, parce que c'est une super épopée à raconter dans les conférences autour d'un verre :-)  L'histoire a été légèrement altérée afin de protéger le coupable, pour éluder les détails insignifiant et ennuyeux, et plus généralement pour rendre la chose plus divertissante.

Il y a quelques années, je travaillais à un poste où mon rôle était de gérer le système d'e-mail du campus lorsque je reçu un appel du président du département de statistique de l'université.

"Nous avons des problèmes pour envoyer des e-mails en dehors du département."

"Quel est le problème ?" demandais-je.

"On ne peut pas envoyer d'e-mail à plus de 500 miles (NdT: environs 800km)" m'a alors expliqué le président.

C'est là que je me suis étouffé avec mon latté. "Redîtes-moi ça ?"

"On ne peut pas envoyer des e-mails plus loin qu'à 500 miles d'ici," me répéta-t'il. "Un tout petit peu plus, en fait. Disons 520 miles. Mais pas plus loin."

"Um... Les e-mails ne marchent pas vraiment comme ça, enfin généralement" lui ai-je répondu, en essayant de dissimiler toute panique dans ma voix. On ne montre aucun signe de panique lorsqu'on parle à un président de département, mais pour un département relativement appauvri comme les statistiques. "Qu'est-ce qu'il vous fait penser qu'on ne peut pas envoyer d'e-mail à plus de 500 miles ?"

"Ce n'est pas ce que je *pense*", me répondit le président irrité. "Vous voyez, quand nous découvert ce phénomène, il y a quelques jours--"

"Vous avez attendu quelques JOURS ?" L'interrompis-je, des tremblements dans la voix. "Et vous n'étiez pas en mesure d'envoyer des e-mails pendant tout ce temps ?"

"On pouvait envoyer des e-mails. Simplement pas à plus de--"

"--500 miles, oui," complétais-je, "Ça j'ai compris. Mais pourquoi vous n'avez pas appelé plus tôt ?"

"Et bien, nous n'avions pas encore récolté suffisamment de données pour être sûr de ce qui se passait réellement jusqu'à maintenant."  Logique. C'est le président des *statistiques* après tout. "De toute façon, j'ai demandé à l'une de nos géostatisticiennes d'y jeter un oeil--"

"Géostatisticiennes..."

"--oui, et elle a généré une carte montrant le rayon à l'intérieur duquel nous pouvions envoyer des e-mails, qui s'est avéré faire légèrement plus de 500 miles. Il y a un certains nombre des destinations à l'intérieur de ce rayon que nous ne pouvons quand même pas atteindre, ou alors de façon sporadique, mais nous ne pouvons jamais rien envoyer au delà de ce rayon."

"Je vois," dis-je, en me prenant la tête. "Quand est-ce que ça a commencé ? Vous avez dit il y a quelques jours, mais est-ce que quelque chose a changé dans vos systèmes depuis ce moment-là ?"

"Et bien, le consultant est venu, il a patché notre serveur et la relancé. Mais je l'ai appelé, et il a dit ne pas avoir touché au système d'e-mails."

"Ok, laissez-moi y jeter un œil, et je vous rappellerai plus tard," dis-je, n'y croyant qu'à moitié. Ce n'était pas le premier Avril. J'essayais de me rappeler si quelqu'un me devait une farce technique.

Je me suis connecté sur le serveur du département, et j'ai envoyé quelques e-mails de test. J'étais alors dans le "Research Triangle" de la Caroline du Nord, et un e-mail de test vers mon compte personnel s'est envoyé sans accroc. Même chose pour un envoyé vers Richmond, et Atlanta, et Washington. Un autre vers Princeton (400 miles) a aussi fonctionné.

Mais j'ai ensuite essayé d'envoyer un e-mail à Memphis (600 miles). Ça a échoué. Boston, échoué. Detroit, échoué. J'ai alors sorti mon carnet d'adresses pour commencer à affiner tout ça. New York (420 miles) a fonctionné, mais Providence (580 miles) a échoué.

J'ai alors commencé à croire que j'avais perdu ma santé mentale. J'ai alors essayé d'envoyer un e-mail à un ami vivant en Caroline du Nord, mais dont le fournisseur d'accès était à Seattle. Heureusement, ça a échoué. Si le problème était lié à la localisation géographique du destinataire, et pas de son serveur d'e-mails, je crois que j'aurais fondu en larmes.

Après avoir établi, --qu'aussi invraisemblable que cela puisse paraitre– le problème remonté était vrai, et répétable, j'ai alors jeté un œil au fichier sendmail.cf. Il avait l'air plutôt normal. En fait il avait même l'air comme d'habitude.

Je l'ai alors comparé au sendmail.cf de mon répertoire home. Il n'avait pas été modifié--c'était le sendmail.cf que j'avais écrit. Et j'étais plutôt certains de ne pas avoir activé l'option "FAIL_MAIL_OVER_500_MILES". En vain, j'ai lancé une connexion telnet sur le port SMTP. Le server m'a alors joyeusement répondu avec une bannière SunOS sendmail.

Une minute... une bannière SunOS sendmail ? À cette époque, Sun déployait toujours Sendmail 5 avec son système d'exploitation, même si Sendmail 8 était déjà plutôt mature. En tant que bon administrateur système, j'avais standardisé Sendmail 8. Et toujours en bon administrateur système, j'avais écrit un sendmail.cf qui utilisait des noms de variables longs et intuitifs disponibles dans Sendmail 8 en comparaison aux signes de ponctuations cryptiques utilisés dans Sendmail 5.

Tout était devenu plus clair, subitement, et je m'étouffais à nouveau avec le fond de mon latté déjà-froid. Lorsque le consultat a "patché le serveur", il avait apparemment mis à jour la version de SunOS, et par la même occasion *rétrogradé* la version de Sendmail. La mise a jour avait tout de même laissé le sendmail.cf intact, même si c'était désormais la mauvaise version.

Il apparaissait que Sendmail 5--du moins, la version que Sun avait déployé, et qui avait quelques ajustements--pouvais fonctionner avec un sendmail.cf venant de Sendmail 8, comme la plupart des règles n'avait pas été altérées. Sauf les nouvelles longues et belles options de configuration--celles qu'il avait traitées comme des anomalies, avait été ignorées. Et le binaire de sendmail n'avait aucune valeur par défaut compilées pour la plupart de ces configurations-là, donc, à défaut d'en trouver dans les paramètres du fichier sendmail.cf, elle sont initialisées à 0.

L'un des paramètres qui avait été mis à zéro était le temps d'attente maximal pour se connecter au serveur SMTP distant. Quelques expérimentations avait établi qu'avec cette machine en particulier, et avec sa charge usuelle, un temps d'attente à zéro annulerait la connexion au bout d'environs 3 millisecondes.

Une particularité étrange du réseau de notre campus à l'époque était qu'il fonctionnait à 100% sur des switch. Un paquet sortant n'induirait un délai routeur qu'après avoir atteint le POP (point d'accès à internet) touché un routeur de l'autre côté. Donc le délai pour se connecter à un hôte distant peu chargé sur un réseau proche était grossièrement gouverné par la distance parcourue à la vitesse de la lumière jusqu'à la destination, plutôt que par de'accessoires délais routeur.

Me sentant légèrement étourdi, j'ai alors tapé dans mon shell :

$ units 
> 1311 units, 63 prefixes
> You have: 3 millilightseconds
> You want: miles
> * 558.84719
> / 0.0017893979

"500 miles, ou un petit peu plus."
Trey Harris


N'hésitez pas à me partager vos histoires les plus folles de remontées de bugs directement en commentaires ou sur les réseaux sociaux.

Pour les plus sceptiques sur la véracité du récit, Trey a justement créé une FAQ avec toutes les infos qui concerne son histoire, désormais célèbre : https://www.ibiblio.org/harris/500milemail-faq.html

J'espère que cet article vous aura plu, et je vous dis à bientôt sur le blog !

À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage de d'expériences et de connaissances.

Aujourd'hui je suis aussi coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !


Photo par Liam Truong sur Unsplash