Formation

Autre jour autre formation.

Pour le reste de la semaine, je donne une formation à des professionnels. C’est un cours catalogue, celui qui s’appelle « Linux Administration Avancée » (celui tout en bas de la page https://rougy.net/formationsnix/).

Les formations à distance, c’est toujours un peu compliqué, mais cette fois j’ai de la chance. L’ensemble des participants ont une bonne connexion Internet, et ils arrivent tous à accéder aux machines d’exercices à distance. Ça me simplifie vraiment la vie.

Les bibliothèques dynamiques

Du coup, j’en profite pour faire un peu de vulgarisations en parallèle avec le cours ! J’ai fini la journée en parlant des bibliothèques dynamiques sous Linux. Alors, qu’est-ce que c’est ?

Quand un développeur écrit un logiciel, il l’écrit dans un langage dit de haut niveau. Sous-entendu, de haut niveau d’abstraction. Ce n’est pas un langage que la machine va comprendre, elle ne comprends que le code machine. Il va donc falloir traduire ce langage de haut niveau dans un langage machine.

Le langage de haut niveau est construit à partir de mots clés. Et on va avoir une petite moulinette qui va convertir le langage de haut niveau en langage machine. Je simplifie pas mal, mais le principe est là. La moulinette est souvent appelée un compilateur. Elle va lire les mots clés du langage, et séquentiellement les traduire en langage machine.

Power Innovation GIF by Siemens

Le problème est que le langage de haut niveau n’a qu’un nombre limité de mots clés. Et pour mon exemple, je peux supposer que mon langage n’a pas de mot clé pour faire une opération de racine carrée. Du coup, si j’écris un programme qui veut faire une racine carrée, il faut que je retrouve la formule et l’algorithme qui permet de faire la racine carrée à partir des opérations de base.

Cependant, il y a des personnes qui ont déjà fait ce boulot là et qui donnent accès à leur calcul de la racine carrée. Avec des versions qui ont été vérifées, qui peuvent être optimisées par exemple. Ils donnent leur algorithme sous la forme d’une bibliothèque partagée. Ça veut dire que quand j’écris mon programme dans le langage de haut niveau, j’indique que je vais utiliser les routines de la bibliothèque de Pierre par exemple.

 

Le compilateur va alors créer le langage machine, mais quand il verra qu’on doit utiliser la routine de Pierre, il va mettre dans le programme une information disant qu’on doit aller chercher la routine dans le fichier langage machine de la bibliothèque de Pierre. Il y a donc une référence à la bibliothèque de Pierre dans mon fichier machine.

Lorsque le programme va s’exécuter, il va rechercher la bibliothèque de Pierre, et utiliser les routines présentes dedans, pour calculer la racine carrée.Ce principe de bibliothèques dynamiques est utilisée dans tous les systèmes d’exploitations: les fichier .so sous Linux, les fichier DLL sous Windows, et les fichiers .dynlib sous MacOS.