De nos jours, toutes nos actions quotidiennes impliquent des programmeurs, du simple fait de passer un appel sur téléphone au pilotage des avions de ligne. C’est pourquoi on a vu pas mal de fois des gens tués dans des accidents de voiture à cause de bogues de logiciels alors que d’autres ont péri dans des crashs d’avions pour la même raison.
Parfois même, des projets de grande envergure sont condamnés à l’échec à cause d’un simple dysfonctionnement informatique lié au codage, à l’image du tristement célèbre vol 501 du lanceur européen Ariane 5 qui a eu lieu le 4 juin 1996 et qui s’est soldé par un échec. Ou plus récemment la chute libre de l’atterrisseur Schiaparelli de l’ESA (Agence spatiale européenne) sur le sol de Mars à cause d’un bogue informatique.
Vous l’aurez compris, même les grands projets coûtant parfois des milliards et des années de travail se trouvent voués à l’échec à cause de simples lignes de code. Mais qu’en est-il d’un avion de ligne moderne comme le Boeing 787 ?
En 2015, il a été découvert qu’un bogue informatique pouvait empêcher les pilotes de garder le contrôle du Boeing 787, possiblement en plein vol, a informé la Federal Aviation Administration (FAA) dans une directive destinée à toutes les compagnies aériennes utilisant cet avion.
Le bogue qui n’est rien d’autre qu’un problème classique de débordement d’entier, est situé au niveau du contrôle des générateurs de l’avion. Le bogue rapporté par Boeing à la FAA est déclenché lorsque ces derniers sont laissés allumés durant 248 jours (8 mois). Le 787 a quatre de ces unités de contrôle des générateurs, qui allumées simultanément, peuvent s’arrêter en même temps et causer une interruption totale du système électrique.
Cette situation a poussé l’agence américaine de l’aviation civile à émettre une directive d’aéronavigabilité : « Nous avons émis cette directive pour éviter la perte de tout le courant électrique, ce qui pourrait causer une perte du contrôle de l’avion, » a écrit la FAA. « Si les quatre unités de contrôle des générateurs (associées aux générateurs du moteur) venaient d’être allumées simultanément, après 248 jours d’allumage, tous les générateurs entreront en mode sécurité-défaut, causant une perte de tout le courant électrique, quelle que soit la phase de vol. ».
Autrement dit, si l’échec du système électrique venait d’arriver durant une phase critique du vol comme le décollage ou l’atterrissage, ou bien lors d’une manœuvre en plein air, la perte du contrôle pourrait être catastrophique.
À l’époque, la FAA a considéré cette situation comme étant critique et a promulgué une nouvelle règle immédiate pour remédier à cette situation. En même temps, Boeing avait promis de publier un correctif.
« La directive résout un problème d’une condition qui a été observée dans un laboratoire. Des tests de simulation ont révélé que cette situation est possible dans des cas où l’énergie d’un avion est laissée allumée pendant plus de 8 mois continus. Aucun avion dans la flotte n’a connu une telle situation, » a informé un porte-parole de Boeing.
Selon les propres registres de Boeing à l’époque, tous les avions 787 en service ont été arrêtés et redémarrés dans le cadre de leur maintenance. Boeing avait informé que les opérateurs vont continuer à redémarrer leurs avions de façon périodique pendant des intervalles de temps déterminés jusqu’à la disponibilité d’un correctif logiciel.
La note de la FAA n’avait pas donné plus de détails sur ce bogue, mais il s’agirait d’un problème de débordement d’entier 32-bit déclenché après 2^31 centisecondes (248,55 jours) de fonctionnement continu. 2^31 étant le nombre de secondes dans 248 jours multipliés par 100 (un compteur en centièmes de seconde).
Pour implémenter un tel compteur, deux options peuvent être suivies, soit augmenter le nombre de bits utilisés, ce qui empêche le débordement, ou bien travailler avec l’arithmétique multiprécision. Certains commentateurs ont suggéré qu’il y a ici un besoin de passer à une architecture 64 bits puisqu’elle permet d’utiliser plus de registres (généraux et XMM), un meilleur support pour PIC (position-independent code), et en général une meilleure performance des instructions syscall/sysret du système. Et dans ce cas, la période nécessaire pour le redémarrage de l’avion passerait de 248 jours à 3 milliards d’années !
Un intéressant point rapporté par la FAA est qu’il faut presque une heure pour redémarrer les unités de contrôle des générateurs dans le 787, donc il n’y a pas un bouton de redémarrage comme un serveur par exemple.
Ce bogue montre juste comment l’immersion de l’informatique dans l’ingénierie rend la conception des systèmes embarqués de plus en plus complexe. Ainsi, l’Airbus A380, un avion dont la complexité est comparable à celle du Dreamliner, compte plus de 100 millions de lignes de code.
Source : The Guardian