Entropie et éco-conception logicielle

Comment l'entropie gouverne l'éco-conception logicielle et comment en déduire des bonnes pratiques générales

L'éco-conception logicielle est une pratique de plus en plus courante. Elle repose sur des principes d'économie, de design technique, technologique et logiciel permettant de gagner en efficacité énergétique sans trop sacrifier la beauté du code.

A priori, l'éco-conception logicielle, lorsqu'elle est expliquée sous la forme d'une longue liste de bonnes pratiques, peut paraître rébarbative. Mais cette liste ne tombe pas du ciel. Intuitivement, si l'on comprend le principe thermodynamique de l'entropie, alors on peut en déduire assez aisément un certain nombre de bonnes pratiques d'éco-conception logicielle sans faire trop d'efforts de mémoire.

Qu'est-ce que l'entropie dans le monde de tous les jours ?

La définition usuelle de l'entropie est "le chaos". Plus l'entropie augmente, plus le chaos est important.

Mais quand on a dit ça, on n'est pas plus avancé. Qu'est-ce que le chaos ? À quoi ressemble-t-il ?

À ce stade, l'entropie reste difficile à se représenter concrètement ce que c'est et, surtout, à quoi ça sert parce que, sans application concrète, ça ne reste qu'un jeu pour les physiciens.

Pour bien comprendre l'entropie, il faut justement partir de la physique ou, plus précisément des équations physiques : si nous prenons les équations qui ont une dimension temporelle, elles peuvent toutes s'écrire dans les deux sens du défilement du temps. Il est ainsi aisé de calculer une trajectoire pour savoir où ira le véhicule ou, dans le sens inverse, d'où il venait. Ça ne semble pas difficile à réaliser ni à comprendre. Et rien, absolument rien, n'empêche théoriquement un phénomène physique obéissant à ces équations de s'exécuter dans un sens ou dans un autre.

Sauf que, dans la réalité, on remarque que certains événements s'effectuent toujours dans le même sens de temps, et jamais en sens inverse. C'est pourquoi l'entropie intervient afin d'expliquer ou de représenter ce sens temporel unique. Le principe est simple : l'entropie de l'univers est positif ou nul, mais jamais négatif. Ce qui signifie que le chaos entre un point de départ et un point d'arrivée est forcément plus grand à l'arrivée qu'au départ, identique au mieux, mais pas plus ordonné.

Prenons un exemple concret : cassons un œuf dans un bol afin de préparer une omelette et battons-le. Au départ, nous avions un blanc et un jaune bien séparés et, plus nous battons, plus nous nous retrouvons avec un mélange homogène jaunâtre.

En réalité, ce mélange n'est pas homogène. S'il l'était, il serait transparent. Il est opaque car il s'agit d'une émulsion de goutelettes de jaune d'œuf dans du blanc -- et inversement. D'un oeuf parfaitement ordonné -- le blanc d'un côté et le jaune de l'autre -- que nous pouvions décrire aisément -- ici le jaune et ici le blanc -- et même séparer comme on le fait souvent pour un nombre incalculable de recettes, nous nous retrouvons avec un mélange chaotique indescriptible. On peut juste dire un mélange homogène -- c'est-à-dire de mêmes propriétés dans toutes les directions -- mais ce n'est qu'une approximation visuelle.

Comme les équations physiques peuvent s'écrire dans les deux sens, ça voudrait dire -- sur le papier -- que nous pourrions reconstituer l'œuf et le remettre dans son état d'origine -- blanc et jaune bien distincts -- juste en effectuant les mouvements inverses, exactement les mêmes, avec le même angle, la même vitesse, la même force, etc.

Or, même si nous effectuions ces mouvements, nous ne reconstituerions pas l'œuf. Pis, les mouvements ne feraient que le battre encore plus.

Pourquoi ? Parce que l'entropie ne peut pas être négative, c'est-à-dire que le chaos de l'œuf ne peut pas diminuer; on ne peut donc pas le reconstituer… sauf en dépensant de l'énergie pour aller chercher chaque goutelette de jaune et de blanc et les rassembler pour les reconstituer. Et l'entropie dit que l'énergie nécessaire pour cette opération sera forcément plus grande que celle qui a été nécessaire pour battre l'œuf. Cette énergie proviendra d'un appareil qui détruira quelque chose pour produire de l'énergie -- dite utilisable -- , augmentant par cela le chaos, donc l'entropie. On ne peut donc pas reconstituer l'œuf à moins de dépenser au moins autant d'énergie qu'il a été nécessaire pour le « déconstituer ».

De l'entropie à l'information

Nous venons de voir à quoi correspond l'entropie dans notre environnement commun mais il s'agit là encore d'une description assez empirique. Et nous avons surtout survolé la notion de différence d'entropie, c'est-à-dire dans le cas du passage d'un état à un autre. Mais ce qui nous intéresse surtout et d'estimer l'entropie globale et absolue d'un système afin de mieux comprendre le phénomène. Dans ce cas, il faut comprendre que l'entropie est de l'information : Plus il faut d'informations pour décrire un système, plus l'entropie est grande. A contrario, plus nous pouvons factoriser l'information, plus le système est ordonné et -- donc -- plus l'entropie est faible.

Qu'est-ce que la factorisation ?

Une factorisation est une discription sous la forme de motifs.

Par exemple, si nous prenons une image de 1000 pixels sur 1000 pixels, entièrement composée de pixels noirs, il est aisé de décrire cette image en indiquant la couleur du pixel d'origine, ainsi que le nombre de fois qu'il faut le répéter en largeur et en hauteur. Cette image compressée occupera peu de place sur le disque et le taux de compression sera élevé car il n'y a qu'un seul motif simple. Il y a même un moyen simple de le décrire avec du vectoriel. La desctription vectorielle n'est qu'une méthode de factorisation.

En revanche, une image composée de points de couleur aléatoire à des positions aléatoires serait beaucoup plus difficile à décrire car il n'existerait aucun motif valable et donc aucune factorisation simple et efficace.

Un motif est, par exemple, une équation. Une trajectoire de véhicule peut être décrite de façon simple par un petit nombre de paramètres de l'état initial ou final ainsi qu'un petit nombre d'équations faisant intervenir la vitesse, l'effet de la gravité, la masse, etc.

Que ce soit un rocher qui tourne autour de la Lune, la Lune tournant autour de la Terre, la Terre tournant autour du Soleil, ou n'importe quelle autre lune ou planète tournant autour de n'importe quelle autre, les équations à appliquer sont les mêmes, seuls changeront quelques paramètres bien précis, comme la masse et la distance.

L'entropie étant positive ou nulle, elle prévoit donc que plus le temps va passer, plus le chaos va augmenter et plus les motifis seront brouillés et donc plus il faudra d'équations pour décrire précisément notre univers. Il y aura probablement un jour -- lointain -- où plus aucune équation ne fonctionnera.

L'entropie n'est jamais absolue

Il faut comprendre que l'entropie ne peut pas être déterminée de façon absolue, mais juste relativement, à partir de la plage de temps observable dont nous disposons.

Pour le comprendre, prenons l'exemple suivant : Un premier fichier de données de 2000 lignes généré à partir d'une requête donnant le résultat directement. Un second fichier de données de 2000 lignes, exactement les mêmes -- même condensat --, mais obtenu à partir d'une requête donnant d'abord 10000 lignes puis une seconde étape réduisant le nombre à 2000.

Si nous observons les fichiers depuis l'état final, ils sont identiques, pourtant leur entropie n'est pas du tout la même. En effet, le second fichier est passé par un état à 10000 lignes, donc avec un désordre plus grand -- car plus d'informations -- avant d'être réduit à 2000 par une autre opération qui à coûté de l'énergie et donc généré du désordre pour générer cette dernière version.

De façon assez simpliste, plus il y a d'opérations à réaliser, plus l'entropie est grande. À puissance processeur égale, plus le nombre d'opérations est faible, plus l'entropie est faible -- dans la plupart des cas.

Cependant, pour estimer l'entropie, disposer du système final n'est pas suffisant, il faut son historique car sans savoir qu'un fichier est passé avant par un état à 10000 lignes, il est impossible de différencier les deux a posteriori.

Mais les données des fichiers viennent aussi de quelque part, ce quelque part venant lui aussi de quelque part, et ainsi de suite. Remonter dans le temps dépend donc de beaucoup de choses.

Le temps et l'espace

Si nous comprenons aisément que plus le trajet à effectuer est long, plus il coûte en énergie, il est parfois plus difficile d'appréhender le temps.

Même si une information ne circule pas, le simple fait que la position ne change pas mais que le temps s'écoule suffit à augmenter l'entropie, ce qui n'est pas surprenant en soi si on se rappelle que l'entropie a été formalisée justement pour expliquer que le temps ne s'écoule toujours que dans un seul sens.

Donc, le simple fait que l'information soit stockée, sans bouger, génère de l'entropie, ne serait-ce que pour maintenair le système de stockage en l'état. Il faut considérer que le temps use le matériel et qu'il faut le remplacer régulièrement. Son inaction ralentit seulement son vieillissement, mais ne l'interrompt pas.

La quantité minimale d'information

Pour factoriser, il faut toutefois atteindre une quantité minimale d'information. Vous ne pouvez pas dessiner une ligne sans connaître au moins deux points. À partir de ces deux points, vous pouvez connaître l'équation qui permettra de tracer la droite -- et n'importe quelle autre droite, tout comme vous ne pourrez pas déterminer la longue d'onde d'une onde s'il n'y a pas au moins une bonne portion de cette onde, etc. Il n'y a pas de règle simple; cette quantité minimale d'information dépend du contexte. Tout dépendra de l'objectif à atteindre. Deux points pour tracer une droite, mais plus pour tracer un rectangle ou un octogone.

Trop peu d'information nécessitera des traitements ultérieurs coûteux pour acquérir les informations nécessaires et arriver à une factorisation efficace.

Trop d'information aboutira à un nettoyage de données pour filtrer afin de les factoriser et optimaliser leur consommation énergétique. Ce nettoyage est coûteux en énergie.

Qu'en déduire pour les développements ?

L'entropie est liée à l'énergie. Pour créer de l'énergie, il faut détruire quelque chose. Cette destruction entraîne une augmentation du désordre et donc de l'entropie. Plus l'entropie est grande, moins l'éco-conception logicielle est efficace.

Plus il y d'entropie, plus il faut et faudra d'énergie pour gérer l'information : il faut plus de mouvements sur le disque pour écrire un gros fichier qu'un petit, plus de paquets IP pour le transporter, etc.

Moins on a d'informations au départ plus l'entropie est basse. Mais en dessous d'une certaine quantité d'information, cette dernière reste non factorisable et contre-productive. Il faut donc dépenser un minimum d'énergie pour arriver à factoriser et exploiter au mieux une information.

L'entropie s'accumule tout au long de la vie de l'information et ne fait que croître, ne serait-ce que parce que l'ordinateur qui stocke cette information est allumé et consomme de l'énergie. À chaque transformation, même une qui diminue la quantité d'information, l'entropie croît. Elle croît cependant plus ou moins vite en fonction des choix qui sont faits et c'est tout l'enjeu de l'éco-conception logicielle.

N'utiliser que ce dont on a besoin, quand on en a besoin

Pour garder une entropie minimale, il faut minimiser l'entropie à chaque étape du cycle de vie de l'information. La meilleure façon de conserver l'entropie la plus basse possible et de n'utiliser que ce dont on a réellement besoin au moment où on en a réellement besoin.

Ainsi, la génération d'une page web par un CMS qui génère la structure complète de la page en même temps que les données peut être amélioré en ne générant que les données utiles et modifiées seulement, et en gardant intacte et en cache la structure statique de la page, ce qui limite les processus de génération et de transport.

Stocker les informations dans des structures adaptées et universelles

Il faut non seulement avoir le moins d'information possible, mais la stocker et la manipuler dans les structures permettant une factorisation élevée. Plus la factorisation est élevée, plus l'entropie est basse et/ou moins elle augmente vite. Une structure d'information universelle est le meilleur compromis car elle permet la transformation dans d'autres multiples formes. Dans le cas contraire, il faudra passer par des structures adaptées plus spécifiques. Chaque transformation coûtera en énergie.

Stocker des informations factorisées ou factorisables

L'exemple le plus commun est la base de données relationnelle qui stocke les données de façon non redondante, structurées  sous la forme des relations et des métadonnées qui sont associées -- nom et type des tables et champs qui contiennent les données. Et d'ailleurs, lorsqu'on est en face d'une base de données relationnelle, la notion d'ordre et de chaos prend tout son sens car si la base est bien pensée et représente bien l'univers du champ d'étude, alors elle est parfaitement ordonnée, donc son entropie est optimale.

Transformer l'information au plus tôt

Si une information a besoin d'être transformée ou travaillée pour être présentable, il faut la transformer le plus tôt possible. Cela permet de savoir si nous avons toutes les informations nécessaires pour les factoriser. Si ce n'est pas le cas, plus tôt nous effectuons les recherches pour les compléter, moins nous dépenserons d'énergie par la suite.

Un exemple concret qui a fait parlé de lui est la collecte des données par la NSA. Cette dernière collecte massivement une grande quantité de données et puise dadans lorsqu'elle en a besoin. De cette méthode, nous pouvons prévoir aisément que la quantité d'énergie nécessaire pour stocker ses données non nettoyées sur une durée indéterminée, coûtera toujours plus d'argent au contribuable et que la puissance nécessaire pour traiter les données en temps et en heure nécessitera une puissance processeur toujours plus grande, bien au-delà de la simple relation de proportionnalité quantité de données - temps de calcul.

Transformer l'information au plus près

L'entropie dépendant du temps et de l'espace, plus nous sommes en près géographiquement, moins nous dépensons d'énergie pour parcourir un trajet. Un site web est d'ailleurs fondé sur ce principe : la requête envoyée au serveur est de petite taille, la réponse est généralement plus grosse. Si nous faisions l'inverse, il faudrait d'abord copier tout le contenu d'un site web en local sur le client avant de l'interroger pour ne renvoyer qu'une seule page. Même si cette méthode est employée dans quelques rares cas  -- en mode déconnecté notamment -- nous comprenons inutuitivement qu'elle est plus coûteuse car il est probable de copier tout un contenu dont nous n'aurons probablement jamais l'utilité.

De cette règle découle une règle implicite qu'il est plus efficace d'effectuer des traitements au niveaux des données plutôt qu'à distance. Si les données sont stockées dans une base de données, il est énergétique plus favorable d'effectuer les traitements au niveau de la base de données elle-même plutôt que dans une couche applicative externe. Il est aussi énergétiquement plus favorable d'effectuer les calculs de rendu graphique au niveau du client, plutôt qu'au niveau du serveur et de transférer le résultat ensuite vers le client. C'est pour cette raison, par exemple, que le navigateur -- client -- garde les CSS en cache plutôt que de les télécharger à chaque affichage de page.

Supprimer les informations inutiles

Il faut préciser que l'entropie d'une information cesse de croître lorsque l'information est supprimée. Le meilleur moyen de ne plus générer d'entropie est donc de faire le nettoyage des informations inutiles lorsqu'on en a plus besoin.

Il s'agit de la conséquence de la règle "N'utiliser que ce dont on a besoin, quand on en a besoin" additionnée de la règle "Stocker des informations factorisées ou factorisables", une information atteignant la factorisation infinie lorsqu'elle n'existe plus -- puisque sa place occupée après traitement est nulle.

Attention : si l'information est supprimée, il faut garder à l'esprit que toute l'entropie générée au cours de son existence demeure. Cette dernière cesse juste de croître. Pour minimiser l'augmentation d'entropie, il faut donc appliquer "Transformer l'information au plus tôt", cette "transformation" étant une simple suppression. Sitôt que l'information n'est plus utile, il faut la supprimer et l'entropie cesse alors de croître pour cette information.

La question de l'entropie négative

Les néo-philosophes aiment à penser que le numérique permet d'obtenir une entropie négative car tout ce qui est fait dans le numérique peut être annulé par ctrl + z -- ou son équivalent.

Cette assertion est fausse, bien entendue, car le numérique obéit aux mêmes lois physiques que n'importe quel autre système. Ce n'est pas parce que c'est numérique que ça fonctionne par l'opération du Saint-Esprit.

Le crtl + z se programme. C'est un bout de code qui va capturer ce qui se passe et l'enregistrer afin de pouvoir revenir en arrière. Pas de code, pas d'annulation.

Et ce bout de code utilise du processeur, de la mémoire et de l'espace disque. Une annulation n'est pas réellement une annulation. C'est une création d'un état nouveau avec un air de déjà vu, ce qui n'est pas du tout la même chose qu'un retour en arrière.