Code. | Chris Ried via Unsplash
Code. | Chris Ried via Unsplash

Ces lignes de code qui ont tout changé (1968-1993)

Apollo 11, le JPEG, le premier pop-up et 33 autres morceaux de code qui ont transformé notre monde.

Ceci est le deuxième épisode de notre série «Le code, c'est la vie». Retrouvez le premier épisode ici.

1968 – L'algorithme des rondes policières

Les prémices de la police prédictive moderne... et du profilage racial informatisé.

Lorsque le président américain Lyndon Johnson monta sa commission sur l'application des lois et l'administration de la justice, en 1965, il lui demanda d'examiner de quelle manière les ordinateurs pourraient permettre de résoudre le «problème de criminalité» de son pays (problème que lui-même ainsi que la commission en question qualifiaient à l'époque de «noir» et «urbain»).

La réponse à cette demande fut le Police Beat Algorithm (PBA), ou «algorithme des rondes policières», destiné à résoudre les problèmes de planification policière (savoir combien envoyer d'agents dans une zone donnée, etc.).

Combiner le PBA avec une base de données criminelle permettait aux autorités policières de faire ressortir automatiquement des profils de suspects, établis en fonction des données démographiques raciales des rondes de police, et de déployer des ressources (agents, armes et autres matériels) en conséquence. Avant même que toute infraction à la loi n'ait été commise.

Aujourd'hui, les pratiques de police prédictive criminalisent de façon disproportionnée les personnes de couleur. Comme nous le rappelle l'histoire du PBA, il ne s'agit pas d'un pépin technologique arrivé inopinément, mais du résultat du perfectionnement d'une technologie conçue il y a cinquante ans.

—Charlton McIlwain, auteur de Black Software: The Internet & Racial Justice, From the Afronet to Black Lives Matter

1969 – Le code BAILOUT du module lunaire d'Apollo 11

Le code qui a permis à l'ordinateur du module lunaire de ne pas manquer d'espace... dans l'espace.

POODOO INHINT
CA Q
TS ALMCADR

TC BANKCALL
CADR VAC5STOR # STORE ERASABLES FOR DEBUGGING PURPOSES.

INDEX ALMCADR
CAF 0
ABORT2 TC BORTENT

OCT77770 OCT 77770 # DONT MOVE
CA V37FLBIT # IS AVERAGE G ON
MASK FLAGWRD7
CCS A
TC WHIMPER -1 # YES. DONT DO POODOO. DO BAILOUT.

TC DOWNFLAG
ADRES STATEFLG

TC DOWNFLAG
ADRES REINTFLG

TC DOWNFLAG
ADRES NODOFLAG

TC BANKCALL
CADR MR.KLEAN
TC WHIMPER

Numérisé par Virtual AGC et le MIT Museum. | National Air & Space Museum de la Smithsonian Institution

L'ordinateur de guidage d'Apollo (Appolo Guidance Computer, AGC) était une vraie petite merveille: comme me l'a expliqué Poppy Northcutt, qui était chargée du calcul des trajectoires de retour vers la Terre de la mission, l'AGC avait une puissance de calcul moindre que les cartes de vœux que l'on utilise aujourd'hui pour enregistrer des messages personnalisés. Mais ça a tout de même marché.

Cette puissance et cet espace de stockage limités imposaient que les tâches soient exécutées de telle manière que l'AGC se concentre en permanence sur ce qu'il y avait de plus important à faire. S'il venait à manquer de place, cela ne serait plus possible. L'équipe logicielle de l'AGC savait qu'il y aurait des imprévus. C'est pourquoi elle créa la commande BAILOUT [à l'origine, un terme de marine qui signifie «écopage», ndt]. Lorsque l'ordinateur commençait à manquer d'espace, l'AGC déclenchait le BAILOUT afin de remettre à plus tard les opérations les moins importantes et de se concentrer sur celles qui étaient vitales au bon déroulement de la mission.

Alors que le module Eagle descendait vers la surface de la Lune, à 9.000 mètres, l'AGC annonça une alerte «1202», que ni Neil Armstrong, ni le contrôleur à Houston, ne reconnurent immédiatement. En moins de trente secondes, les informaticiens du centre de contrôle de mission rapportèrent que le logiciel de l'AGC faisait exactement ce qu'il était censé faire: abandonner les tâches secondaires et recommencer les tâches prioritaires (mais si rapidement que cela était invisible pour l'équipage). Armstrong et Buzz Aldrin pouvaient donc continuer à obtenir de l'AGC exactement ce dont ils avaient besoin pour maintenir le cap jusqu'à la Lune.

Trois autres alertes en «débordement» se firent entendre avant l'annonce de l'alunissage par Armstrong, mais à chaque fois pour dire que tout avait fonctionné correctement. Si le «bailout» annonce en général l'échec d'une mission, celui-ci a permis à l'humanité de réaliser l'un de ses rêves les plus anciens.

—Ellen Stofan, directrice John and Adrienne Mars du National Air & Space Museum de la Smithsonian Institution

1972 – Hello, World! (Bonjour le monde)

La phrase qui a permis à des générations entières de découvrir le code.

main( ) { printf("hello, world\n"); }

Lorsque l'on commence à apprendre un nouveau langage de programmation, la première tâche que le tutoriel vous demande de réaliser est de faire afficher à l'ordinateur la phrase «Hello, World!» (parfois traduite littéralement en «Bonjour le monde!»).

L'exemple historique le plus célèbre vient peut-être d'un mémo de Bell Laboratories baptisé «Programming in C—A Tutorial» («Programmer en Ctutoriel»), datant de 1974, mais l'on trouve aussi la phrase dans le manuel d'un autre langage, B, datant de 1972, et elle pourrait même être encore antérieure à cela.

Hello, World! est un merveilleux exemple de pédagogie. C'est une petite tâche simple, qui donne rapidement la satisfaction d'avoir réalisé quelque chose, mais c'est aussi devenu un standard qui permet d'illustrer les différences entre les langages de programmation. En outre, c'est un moyen rapide et facile pour les programmeurs et programmeuses chevronné·es de s'assurer que tout fonctionne correctement lors de l'installation d'un nouvel environnement (parfois, les pros utilisent même le temps mis pour afficher «hello world» comme un test de vitesse permettant de comparer différents langages et environnements).

Enfin et surtout, «Bonjour le monde» est un message sympathique qui donne au nouveau programmeur une idée de l'échelle à laquelle son code peut avoir un effet (le monde!).

—Chris Noessel, responsable I.A. chez IBM. Vous pouvez aussi lire, en anglais, le texte de Clive Thompson sur la puissance de «Hello, World!».

1972 – La chaîne à terminaison nulle

L'erreur de conception la plus catastrophique de l'histoire de l'informatique.

char yellow[26] = {'y', 'e', 'l', 'l', 'o', 'w', '\0'};

The GNU C reference manual

En 1972, Dennis Ritchie prit une décision catastrophique: représenter le texte de son nouveau langage par ce qui s'appelle une chaîne à terminaison nulle. Le concept existait déjà auparavant, mais il l'intégra entièrement dans son nouveau langage, qu'il baptisa C, et les conséquences de cette décision nous poursuivent encore aujourd'hui.

Il existe deux manières primaires, pour les langages de programmation, de représenter un morceau de texte: il peut être d'une longueur intrinsèque —«Je contiens exactement dix caractères et pas un de plus»— ou il peut être à terminaison nulle —«Voici un ensemble de caractères, vous repérerez la fin parce qu'il y aura un zéro. Bonne chance!»

Une erreur fréquemment commise avec le code C est de copier une chaîne longue dans une chaîne plus courte et de faire déborder la fin, ce qui implique de détruire les autres données qui se trouvaient à proximité. C'est comme écrire au-delà du bord d'un tableau blanc.

De telles erreurs peuvent non seulement entraîner des dysfonctionnements, mais elles peuvent en outre être exploitées pour modifier le comportement du programme en le convainquant d'écraser quelque chose avec des données spécifiques et méticuleusement rédigées. Il s'agit des attaques par débordement de tampon (en anglais, buffer overflow) et c'est de là que sont parties presque toutes les exploitations de failles dont vous avez entendu parler, à commencer par le ver Morris en 1988 (abordé ci-dessous).

En faisant attention, il est possible de coder en C de manière à éviter ce type de problème, mais le langage même fait que ce type d'erreur est facile à commettre et difficile à détecter. La quasi-totalité des langages modernes évitent désormais les chaînes à terminaisons nulles, mais C et C++ continuent à dominer le monde, de votre routeur à vos ampoules intelligentes.

Près de cinquante ans plus tard, nous continuons donc à jouer avec le feu en perpétuant ce type d'erreurs.

—Jamie Zawinski, développeur de Netscape, fondateur de Mozilla.org, propriétaire de la boîte de nuit DNA Lounge, à San Francisco

1975 – Telenet

Le premier réseau public de données reposant sur la commutation de paquets, épine dorsale de l'internet d'aujourd'hui.

Avant internet, il y avait Arpanet, un réseau informatique utilisé par les chercheurs de l'Advanced Research Projects Agency (devenue aujourd'hui la Darpa) pour s'échanger des données entre machines. Constatant l'essor pris par Arpanet au sein des institutions, ses créateurs pensèrent qu'il serait intéressant de mettre cette technologie à disposition du grand public (et qu'il y aurait sans doute de l'argent à y gagner).

En août 1975, la version commerciale d'Arpanet, Telenet, fut déployée dans sept villes des États-Unis. Ainsi, les premiers clients (essentiellement des entreprises informatiques ou ayant à gérer d'importantes bases de données) pouvaient se connecter sur leur ligne téléphonique pour télécharger des données, comme des sortes de proto-mails, ou accéder à distance à des codes stockés sur un ordinateur central.

Bien qu'Arpanet soit souvent considéré comme la première version de l'internet moderne, il serait sans doute plus exact d'attribuer ce titre de précurseur à Telenet, qui était un service conçu pour le grand public. Pour tout dire, l'un des plus gros clients de Telenet dans les années 1980 était même Quantum Link (qui devint plus tard AOL).

—Jane C. Hu, rédactrice pour Future Tense

1982 – L'erreur d'arrondi de la bourse de Vancouver

Une différence de décimale au coût énorme.

- return floor(value)
+ return round(value)

Approximation du code utilisé par la bourse de Vancouver. | Chase Felker/Slate

Au début de l'année 1982, la bourse de Vancouver avait lancé un indice boursier électronique initialement fixé à une valeur de 1.000 points. En deux ans, il était tombé à la moitié de sa valeur initiale, ce qui était une tendance déroutante dans le marché haussier du début des années 1980.

Une enquête révéla que les calculs de l'indice étaient erronés à cause d'une simple commande, utilisant floor() au lieu de round(). Cela signifiait qu'au lieu d'être arrondie à la troisième décimale, la valeur était tronquée (les ordinateurs ont nécessairement une résolution finie, ce qui nécessite d'arrondir ou de tronquer). Ainsi, si l'indice était calculé à 532,7528, il était enregistré à 532,752 au lieu d'être arrondi à 532,753.

Le problème fut qu'à raison de plusieurs milliers de calculs par jour, cette différence d'apparence minime (il s'agissait essentiellement d'arrondis à la baisse) finit par entraîner une perte de valeur considérable. L'erreur de programmation fut finalement corrigée en novembre 1983, après une fermeture un vendredi avec un indice à environ 500. Lors de la réouverture, le lundi, il était à plus de 1.000, la valeur perdue ayant été rétablie.

—Lav Varshney, professeur adjoint à l'Université de l'Illinois à Urbana-Champaign

1985-1987 – Therac-25

A montré que l'excès de confiance peut tuer.

Lorsque l'affaire fut découverte, les journaux se lancèrent dans une série de mises en garde contre la modernité. «LES DÉFAILLANCES INFORMATIQUES MORTELLES D'UNE ÈRE COMPLEXE» titra le Los Angeles Times. Une machine destinée à traiter le cancer avait, dans plusieurs établissements médicaux, bombardé six patients avec des doses massives de radiations, tuant au moins trois d'entre eux.

Comme le découvrirent les enquêteurs, la programmation du Therac-25 permettait de commettre une erreur de manipulation très dangereuse et même mortelle. La machine permettait, en effet, deux types de traitements: l'un à faible énergie et l'autre d'une intensité si forte qu'il était nécessaire d'employer un appareil métallique pour filtrer le rayon. Malheureusement, en raison d'une erreur logicielle, l'opérateur pouvait régler accidentellement l'appareil sur le mode intensif sans mettre en place le filtre nécessaire.

Le Therac-25 avait été conçu comme une amélioration du Therac-20 et le logiciel était considéré comme assez sûr pour ne pas nécessiter de vérifications de sécurité externes. Résultat: plusieurs morts à mettre sur le compte d'ingénieurs trop confiants qui n'avaient pas pris en compte la possibilité d'une erreur.

—Molly Olmstead, Slate

1988 – Internet Relay Chat

Le premier chat online.

/join #cats

Internet Relay Chat, mieux connu par l'acronyme IRC, a vu le jour avant même que la plupart des gens n'entendent parler d'internet. Ce fut le premier moyen de converser en ligne en temps réel avec d'autres personnes. Les premiers individus à l'utiliser se connectaient pour échanger des informations, comme, par exemple, lors du blackout médiatique du coup d'État de 1991 en Union soviétique.

Le simple fait de chatter nécessitait lui-même de connaître un semblant de code: par exemple, pour rejoindre un canal de discussion, il fallait taper «/join #[nom du canal].» (aujourd'hui, cela semblera sans doute familier aux accros de Slack). Et si l'on souhaitait signaler quelque chose sur soi-même, on tapait, par exemple, la commande «/me est vraiment fatiguée» et le logiciel affichait votre nom précédé d'un astérisque et suivi des mots «est vraiment fatiguée».

C'était basique, mais pour beaucoup de personnes, c'était une première expérience des commandes informatiques. C'était le sésame pour rejoindre la conversation.

—April Glaser, Slate

1988 – Le ver Morris

Une prise de conscience douloureuse de l'ampleur d'internet.

checkother() /* 0x57d0 */
{
int s, l8, l12, l16, optval;
struct sockaddr_in sin; /* 16 bytes */

optval = 1;
if ((random() % 7) == 3)
return; /* 612 */

s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 0)
return;

Extrait d'une fonction clé du code du ver Morris. | Robert Morris via le Computer History Museum et Arialdo Martini

Internet et Robert Morris étaient encore tout jeunes lorsque ce dernier, étudiant de 23 ans à Cornell, lâcha son «ver Morris», lançant ce qui fut qualifié plus tard de «première grande attaque sur internet». Environ 10% des 60.000 ordinateurs reliés alors à internet furent touchés, ce qui engendra des millions de dollars de dégâts et conduisit le New York Times à parler pour la toute première fois d'internet.

Même les spécialistes de l'informatique furent surpris·es par la portée du ver. Morris, qui affirme n'avoir jamais eu l'intention de causer tant de dégâts, devint la première personne inculpée en vertu du Computer Fraud and Abuse Act. Condamné à trois ans de mise à l'épreuve, il finit par cofonder la célèbre pépinière d'entreprises Y Combinator et devint professeur adjoint en informatique au MIT.

—Elena Botella, Slate

1990 – Le virus en une seule ligne

La puissance d'une seule ligne de code —et la fragilité toujours étonnante des ordinateurs.

: ( ) { : | : & } ; :

N'essayez pas cela chez vous. | Chris Noessel

Ce que vous pouvez voir ci-dessus est une sorte de virus en une seule ligne baptisé fork bomb. Il a besoin de certaines conditions spécifiques pour fonctionner (notamment une version ancienne et vulnérable du système d'exploitation Unix), mais une fois ces dernières réunies, il suffit de taper cette commande en Bash pour qu'elle se réplique sans cesse jusqu'à saturer la mémoire disponible de l'ordinateur et le rendre impossible à utiliser.

Ce qui fait la beauté de ce virus n'est pas tant le danger qu'il représente par rapport à la taille qu'il prend, mais le fait qu'il utilise les deux points comme nom de fonction. La plupart des fonctions (soit des lignes de code réutilisables) sont nommées de manière descriptive (par exemple «Print» ou «isThisEmailValid»), mais rien ne dit qu'il faut obligatoirement que ce soit le cas. La plupart des langages informatiques interdisent d'utiliser les deux points comme nom de fonction, mais ce n'est pas le cas de Bash.

La première fois que j'ai vu cette ligne, c'était en 2002, lors d'une exposition d'art contemporain au Musée des arts appliqués de Francfort, en Allemagne. Un morceau de code exposé dans un musée, voilà qui n'était pas banal.

—Chris Noessel, responsable I.A. chez IBM

1990 – Le lien hypertexte HTML

L'outil qui nous a permis de relier tout à n'importe quoi, y compris à l'impensable.

<a href = "https://www.slate.com">Slate</a>

Tim Berners-Lee a véritablement changé le monde lorsqu'il a créé le lien hypertexte, bout de code qui permet à tout un chacun de surfer facilement sur le web. L'idée de lier les informations entre elles n'était pas particulièrement nouvelle.

La véritable nouveauté était d'avoir réussi à assembler une ponctuation à partir de diverses conventions informatiques pour parvenir au format deux points-slash-slash de l'URL, qui permettait de nommer tous ces éléments éloignés. Mais alors que Berners-Lee se préoccupait essentiellement de rétrocompatibilité, le concept de lien hypertexte ouvrait la voie vers l'avenir.

Le lien hypertexte de Berners-Lee pouvait devenir un bouton «acheter maintenant», un «j'aime», un vote, un retweet et bien d'autres choses encore. Ces exemples que personne n'avait prévus doivent nous rappeler que lorsque l'on est à l'aube d'une révolution technologique, le plus difficile est de voir ce qui va advenir ensuite.

—Charles Duan, directeur de la technologie et de l'innovation chez R Street

1992 – Le JPEG

A changé à jamais notre rapport à la photographie.

double *NaiveDct_transform(double vector[], size_t len) {
if (SIZE_MAX / sizeof(double) < len)
return NULL;
double *result = malloc(len * sizeof(double));
if (result == NULL)
return NULL;

double factor = M_PI / len;
for (size_t i = 0; i < len; i++) {
double sum = 0;
for (size_t j = 0; j < len; j++)
sum += vector[j] * cos((j + 0.5) * i * factor);
result[i] = sum;
}
return result;
}

La transformée en cosinus discrète, idée sous-jacente ayant permis le JPEG. | Project Nayuki

Nous tenons aujourd'hui pour acquis de pouvoir remplir nos appareils d'un nombre incroyable de photos, mais les images représentaient autrefois d'immenses quantités de données. En 1992, le Joint Photographic Experts Group publia les spécifications d'une norme, le JPEG, permettant d'alléger les fichiers images.

Même si d'autres formats de compression étaient déjà disponibles à l'époque, le JPEG devint la norme mondiale, en partie parce qu'il était libre de droits. Le JPEG tire parti de la compression à perte, procédé qui élimine certains aspects d'une image invisibles pour un œil humain, tels que de très légers changements de couleur. La compression à perte a aussi été essentielle pour une autre invention de 1992: le MP3, format de fichier audio rendu possible par l'élimination de morceaux de données indétectables à l'oreille.

—Aaron Mak, Slate

1993 – Le navigateur Mosaic

La naissance du web tel que nous le connaissons.

MakeImage(dsp, data, width, height, depth, img_info, clip)
Display *dsp;
unsigned char *data;
int width, height;
int depth;
ImageInfo *img_info;
int clip;
{
int linepad, shiftnum;
int shiftstart, shiftstop, shiftinc;
int bytesperline,bpp;
int temp;
int w, h;
XImage *newimage;
unsigned char *bit_data, *bitp, *datap;
Visual *theVisual;
int bmap_order;
unsigned long c;
int rshift, gshift, bshift;

#ifdef NEW
switch(bpp=bits_per_pixel(dsp,depth))
#else
switch(depth)

Portion de la version 2.7 du code. | NCSA Mosaic for the X Window System, Software Development Group, National Center for Supercomputing Applications

Les navigateurs précédents étaient des programmes assez mal fichus, qui rendaient correctement les textes, mais vous forçaient à voir les images dans une fenêtre séparée.

Menés par Marc Andreessen, les hackers de Mosaic souhaitaient créer un navigateur qui mette le texte et les images côte à côte. Ils donnèrent au web un aspect familier, une allure sympathique de journal ou de magazine.

Mosaic a aussi permis d'accélérer considérablement l'évolution des normes HTML car les webmasters du monde entier ont commencé à demander de plus en plus de balises pour améliorer l'aspect de leurs sites (à l'époque, mettre des cadres partout semblait être une super idée).

—Clive Thompson, auteur de Coders: The Making of a New Tribe and the Remaking of the World

1993 – Le pixel espion

Des images invisibles à l'origine de la collecte de données dont on parle tant aujourd'hui.

<img height="1" width="1" style="display:none"src="https://www.facebook.com/tr?id=166975463695820&amp;ev=PageView&amp;noscript=1"/>

Le pixel de suivi du nombre de vues d'une page Facebook. | Facebook

Ces petits bouts de code HTML ne paient pas de mine, mais ils sont la base même du marketing numérique et donc au cœur de nombreux problèmes actuels, de la surveillance généralisée à la concentration des médias, en passant par la désinformation de masse.

Dans les années 1990, les web designers utilisaient des images transparentes d'un seul pixel afin d'ajuster leurs mises en page. Les ordinateurs téléchargeant toutes les images des pages web (y compris lorsqu'il s'agit d'un pixel invisible), en 1993, des entreprises eurent l'idée d'en tirer profit: suivre les téléchargements de pixels leur permettait d'apprendre qui vous étiez et où vous vous trouviez. En outre, ils pouvaient déclencher le téléchargement d'un cookie dans votre navigateur afin de permettre aux annonceurs de vous suivre à travers les différents sites que vous visitiez.

Le succès du pixel espion conduisit directement au bouton «like» de Facebook, qui vous piste sur tous les sites où il est intégré. Cette collecte massive de données permit le ciblage extrême qui fit le succès des publicités de Facebook et fit que l'entreprise put retirer aux médias des milliards de dollars de bénéfices. Alors que le milieu du journalisme s'en émouvait, la désinformation ciblée prospérait —et les business models reposant sur la surveillance prospéraient (voir la notice sur le bouton «j'aime» au prochain épisode de cette série).

—Sara Wachter-Boettcher, autrice de Technically Wrong: Sexist Apps, Biased Algorithms, and Other Toxic Tech

À suivre...

En ce moment

Pour garder le contrôle d'un drone, une IA pourrait «tuer» son opérateur durant une simulation

Tech

Pour garder le contrôle d'un drone, une IA pourrait «tuer» son opérateur durant une simulation

Pas très rassurant.

Les aliens seraient déjà parmi nous, et ils nous observeraient

Tech

Les aliens seraient déjà parmi nous, et ils nous observeraient

Leurs atouts? Des drones et des IA.

Le premier filet de poisson imprimé en 3D a vu le jour

Tech

Le premier filet de poisson imprimé en 3D a vu le jour

Peut-on dire qu'il s'agit d'un plat de poisson pas né?