L'ingénierie logicielle pourrait-elle utilement s'inspirer de la façon dont fonctionnent les systèmes biologiques? Une équipe scientifique pluridisciplinaire vient de passer trois ans à explorer cette piste dans le cadre de Diversify, un projet européen dirigé par le chercheur Inria Benoît Baudry. Résultat : les expériences menées montrent qu'à l'instar de la biodiversité, la diversité logicielle constitue un avantage considérable en termes de robustesse et d'adaptabilité aux changements.
7 avril 2014. Journée chargée pour les opérateurs systèmes partout sur la planète. Un bug de sécurité est dévoilé dans la librairie de chiffrement OpenSSL. Cette révélation intervient simultanément avec la publication d'un patch à installer de toute urgence. Il s'agit de la plus grande faille sur Internet en vingt ans d'histoire. Son nom : Heartbleed. Pas moins de 17% des serveurs utilisant des certificats numériques sont considérés comme à risque. Soit un demi-million de plates-formes utilisées par plusieurs milliards d'internautes, ceux-ci étant priés de changer tous leurs mots de passe sur-le-champ.
« Le problème en lui-même, ce n'est pas qu'il y ait un bug dans une librairie, mais plutôt qu'un tel nombre de serveurs et d'applications utilisent cette librairie , explique Benoît Baudry . Autrement dit, c'est la monoculture logicielle qui se trouve en cause. Dans les couches basses, il s'agit d'un phénomène massif. Un très petit nombre d'applications fait fonctionner les serveurs, les bases de données et les routeurs. Mais cette monoculture logicielle gagne du terrain dans les couches hautes, c'est-à-dire les couches applicatives. »
Exemple? « WordPress. Cet outil de gestion de contenu est utilisé pour la fabrication de 20% des 500 000 principaux sites web. Et dans 64% des cas, la version de WordPress utilise Askimet, qui est un plugin très populaire. Donc, dans le fond, nous utilisons tous les mêmes clones de logiciels. Certes, cela présente des avantages. Les systèmes homogènes sont moins chers, plus faciles à entretenir et plus interopérables. Mais l'uniformité engendre aussi une faiblesse intrinsèque car un seul bug peut entraîner la panne de tout un système. C'est pour cette raison qu'il faut explorer l'idée de diversification logicielle comme moyen d'accroître la robustesse. »
S'adapter aux changements
L'idée clé du projet européen Diversify consistait à « travailler avec des écologues, utiliser ce qu'ils ont appris du fonctionnement des systèmes écologiques et s'appuyer sur cette connaissance pour concevoir des logiciels plus résistants. »
De fait, les écosystèmes s'avèrent infiniment plus endurants que les systèmes logiciels car, grâce à leur diversité, ils peuvent s'adapter aux changements. « Prenez les abeilles et les fleurs. Les abeilles peuvent polliniser plusieurs espèces de fleurs. De la même façon, beaucoup de fleurs peuvent être pollinisées par différents insectes pollinisateurs.» Du coup, l'extinction d'une espèce n'entraîne pas systématiquement la disparition d'une autre.
Habituellement, les écologues quantifient la robustesse au moyen de graphes bipartites qui codifient les interactions entre espèces : un point représente n'importe quelle entité, un lien représente l'interaction entre deux points. « Dans nos travaux, nous reprenons le principe de ces graphes écologiques bipartites pour les appliquer à un système logiciel. » Ici pas de pollen, mais « des utilisateurs qui accèdent à des informations stockées sur des serveurs centraux. Dans les deux cas, ce sont les interactions qui constituent l'ingrédient essentiel faisant fonctionner ces systèmes. Et l'on peut les représenter avec les mêmes structures mathématiques. »
Forte augmentation de la robustesse
À partir de là, l'un des défis du projet consistait ensuite à « adapter les processus pour créer une diversité logicielle qui répondrait à des graphes identifiés comme présentant une plus forte résistance aux perturbations. »
Pour ce faire, les scientifiques ont conçu un modèle qui définit une nouvelle relation entre deux éléments principaux d'un système d'applications web : les fournisseurs de services (disons les fleurs) et les consommateurs (les abeilles). Ce que l'on entend ici par "consommateur", c'est en fait une application qui agrège des microservices distants pour offrir ensuite des services globaux à leurs clients. Par exemple un site de voyage qui récupère au préalable des prévisions météo.
Dans ce modèle, de temps à autre, le fournisseur choisit d'ajouter ou de retirer certains de ses services. Il le fait soit au hasard, soit en fonction de la popularité d'un service. De la même façon, les consommateurs, eux, changent certains des liens à partir desquels ils agrègent des microservices. À nouveau, cela se fait au hasard ou alors pour établir une équité entre les différents services auxquels ils recourent.
Et là, les choses deviennent magiques : « Quand on injecte des bugs et des perturbations dans ce système diversifié, il survit beaucoup plus longtemps que les autres, remarque Benoît Baudry. À travers une série de décisions locales, nous augmentons considérablement la robustesse globale du système. » Ces expérimentations in silico confirment ainsi l'intuition de départ. Elles ouvrent aussi la porte à de nouvelles recherches. Prochaine étape ? « La suite logique serait de collaborer sur ces travaux avec un laboratoire de recherche industrielle. »