De la recherche

Quand l’écologie inspire de nouvelles manières de fabriquer des logiciels

Si au lieu de distribuer des millions de copies identiques, les fabricants de logiciels avaient la possibilité de distribuer des variantes, et que ces variantes avaient la possibilité de s’adapter à leur environnement, ces « écosystèmes logiciels » ne pourraient-ils pas renforcer la résistance de tous les services qui nous accompagnent au quotidien ?

Regarder un film, rester en contact avec mes amis, consulter mon compte en banque ou connaître l’état du trafic routier, tout ça quand je veux et où je veux. Rien de plus banal. Notre vie quotidienne a parfaitement intégré ces services et leur disponibilité permanente nous apparaît parfaitement évidente. Cette évidence pourrait presque nous faire oublier que les logiciels qui fournissent ces services en continu sont tout sauf ordinaires.

Tout d’abord, ces objets massivement utilisés à travers le monde sont complexes. Prenons par exemple une application aussi banale qu’un navigateur Web : le navigateur Firefox inclut plus de 13 millions de lignes de code écrites dans 35 langages différents (un volume de texte comparable à celui d’une encyclopédie dont les articles seraient écrits dans différents dialectes en fonction du sujet).

Ces produits logiciels sont sollicités de manière massive : par exemple, Firefox est téléchargé plus d’un million de fois chaque jour, le moteur de recherche Google répond à des millions de requêtes chaque seconde et Netflix diffuse 10 milliards d’heures de vidéo chaque mois. Ces logiciels sont tous issus d’un intense travail collectif et de constantes évolutions : plus de 3000 personnes contribuent à Firefox, l’effort cumulé depuis la création du navigateur en 2002 est estimé à 4200 années de travail et une centaine de changements sont introduits chaque jour. Ces logiciels ont des capacités d’adaptation et de résistance exceptionnelles : ils doivent pouvoir tolérer de nombreux usages différents, s’exécuter sur de nombreux types d’appareils et doivent faire face aux constantes perturbations auxquelles ils sont soumis (panne matériel, réseau saturé, attaques, etc.).

Ces dimensions hors du commun doivent être prises en compte dans la fabrication et l’évolution permanente de ces logiciels. En particulier, les développeurs de ces systèmes ne peuvent pas et ne doivent pas chercher à construire un logiciel parfait. Tout d’abord, la validité d’un logiciel ne peut être vérifiée que sous certaines conditions (par exemple une connexion Internet est disponible), mais il est impossible de prévoir toutes les conditions dans lesquelles ces systèmes s’exécutent. Plus généralement, le souhait d’éliminer le plus d’erreurs possibles distrait le processus de développement logiciel, gaspille des ressources d’ingénierie et produit du logiciel fragile, puisqu’il sera incapable de faire face aux défauts qui seront inévitablement présents dans son environnement. Enfin, pour ces logiciels, la notion de perfection ne recouvre pas celle de qualité, elle contient une part de subjectivité et peut varier considérablement d’un usager à l’autre (par exemple, qui peut dire quelle est la réponse parfaite quand on saisit une requête dans un moteur de recherche ?).

Ainsi, les développeurs de ces logiciels doivent sans cesse faire des compromis : compromis entre la qualité du rendu et la qualité du réseau disponible, entre la facilité d’utilisation et la sécurité, entre l’énergie consommée et la précision de l’affichage, etc. C’est bien la possibilité de modifier ces compromis au cours de la vie du logiciel qui permettra un fonctionnement en continu, même si c’est parfois dans un mode imparfait. Autrement dit, la robustesse et la résilience de ces logiciels sur le long terme requièrent que ces logiciels existent dans de nombreuses variations qui permettent au système de s’adapter.

Mais la production de toutes ces variations est extrêmement coûteuse et ne peut être faite manuellement. Dans le projet européen DIVERSIFY, nous étudions la manière dont la biodiversité émerge dans les écosystèmes, afin de concevoir de nouvelles façons de fabriquer ces logiciels particuliers : nous visons à faire émerger, spontanément, une grande diversité logicielle qui révèle des compromis entre toutes les facettes d’un logiciel (qualité du service rendu, rapidité, efficacité énergétique, utilisabilité, sécurité, etc.). En effet, les écosystèmes sont d’immenses systèmes, extraordinairement riches et qui perdurent depuis des millénaires. La diversité (qui prend elle-même de très nombreuses formes, de la diversité génétique à la diversité des paysages en passant par la diversité des espèces) est une caractéristique essentielle de ces systèmes, fondamentale pour assurer leur robustesse et leur capacité d’adaptation face à de nombreuses perturbations.

L’intuition du projet DIVERSIFY est donc la suivante : si au lieu de distribuer des millions de copies identiques, les fabricants de logiciels avaient la possibilité de distribuer des variantes, et que ces variantes avaient elles-mêmes la possibilité de s’adapter à leur environnement, les « écosystèmes logiciels » s’enrichiraient rapidement et pourraient renforcer la résistance de tous ces services qui nous accompagnent au quotidien.

 

Les enjeux de la diversification dans les systèmes logiciels. 
Visionner la vidéo - Réalisation Version originale : Andrew McKelvey - Adaptation française : Pierre-Olivier Gaumin et Aurélien Poirier - Durée : 3 min 40 s.

Niveau de lecture

Aidez-nous à évaluer le niveau de lecture de ce document.

Il vous semble :

Si vous souhaitez expliquer votre choix, vous pouvez ajouter un commentaire (qui ne sera pas publié).