• Aucun résultat trouvé

1 Unix et les logiciels libres

Sommaire

1.1 Avant-propos : la naissance d’un logiciel 1.2 Unix

1.3 Les logiciels libres 1.4 Le cas de Gnu/Linux

1.5 Quelques réflexions sur les logiciels libres 1.6 Actualité et avenir des logiciels libres

Les productions de génie et les moyens d’instruction sont la propriété commune ; ils doivent être répartis sur la surface de la France comme les réverbères dans une cité.

Grégoire (1837)1.

A

vantd’aborder l’étude du systèmeunix, nous allons, dans ce chapitre, définir quelques termes de manière à éclairer le lecteur novice. Les éclaircissements portent à la fois sur la famille de systèmes d’exploitation qu’est unix, et le type particulier de logiciel que sont les logiciels dits logiciels libres. De manière à posi-tionner clairementunixpar rapport aux logiciels libres, nous débutons ce chapitre par une présentation succincte de la naissance d’un logiciel. Vient ensuite un histo-rique d’unix, qui tente de montrer que même siunixest aujourd’hui un ensemble de logiciels propriétaires, sa naissance et ses évolutions de jeunesse constituent sans au-cun doute les prémices des logiciels libres. Nous nous livrerons en guise de deuxième partie de chapitre à une présentation de la philosophie des logiciels libres — prin-cipalement au travers deLINUX et du projetgnu— et de ses implications tant techniques que philosophiques.

1.1 Avant-propos : la naissance d’un logiciel

Pour se sensibiliser à la notion de logiciel libre et pour comprendre ce qu’est un système d’exploitation multi-plate-forme, il est impératif de saisir les différents outils et mécanismes qui entrent en jeu lors de la création d’un logiciel ainsi que lors de l’exécution d’un programme.

1.1.1 Du source

La conception d’un logiciel passe par différentes phases que l’on peut présenter de manière plus ou moins détaillée ; toujours est-il que ces phases s’articulent autour des étapes importantes suivantes :

1. L’abbé Grégoire est le fondateur du centre national des Arts et Métiers.

1

1

1 Unix et les logiciels libres

Sommaire

1.1 Avant-propos : la naissance d’un logiciel 1.2 Unix

1.3 Les logiciels libres 1.4 Le cas de Gnu/Linux

1.5 Quelques réflexions sur les logiciels libres 1.6 Actualité et avenir des logiciels libres

Les productions de génie et les moyens d’instruction sont la propriété commune ; ils doivent être répartis sur la surface de la France comme les réverbères dans une cité.

Grégoire (1837)1.

A

vantd’aborder l’étude du systèmeunix, nous allons, dans ce chapitre, définir quelques termes de manière à éclairer le lecteur novice. Les éclaircissements portent à la fois sur la famille de systèmes d’exploitation qu’estunix, et le type particulier de logiciel que sont les logiciels dits logiciels libres. De manière à posi-tionner clairementunixpar rapport aux logiciels libres, nous débutons ce chapitre par une présentation succincte de la naissance d’un logiciel. Vient ensuite un histo-rique d’unix, qui tente de montrer que même siunixest aujourd’hui un ensemble de logiciels propriétaires, sa naissance et ses évolutions de jeunesse constituent sans au-cun doute les prémices des logiciels libres. Nous nous livrerons en guise de deuxième partie de chapitre à une présentation de la philosophie des logiciels libres — prin-cipalement au travers deLINUX et du projetgnu— et de ses implications tant techniques que philosophiques.

1.1 Avant-propos : la naissance d’un logiciel

Pour se sensibiliser à la notion de logiciel libre et pour comprendre ce qu’est un système d’exploitation multi-plate-forme, il est impératif de saisir les différents outils et mécanismes qui entrent en jeu lors de la création d’un logiciel ainsi que lors de l’exécution d’un programme.

1.1.1 Du source

La conception d’un logiciel passe par différentes phases que l’on peut présenter de manière plus ou moins détaillée ; toujours est-il que ces phases s’articulent autour des étapes importantes suivantes :

1. L’abbé Grégoire est le fondateur du centre national des Arts et Métiers.

1

1

1. l’analyse du problème à résoudre ;

2. la conception d’un algorithme correspondant à cette analyse ;

3. la traduction de l’analyse dans un langage de programmation plus ou moins évolué ;

4. la compilation du programme en langage évolué, c’est-à-dire la traduction du langage évolué vers un langage moins expressif qu’est celui de la machine et plus précisément du processeur et du système d’exploitation ;

5. la phase de test qui permet de s’assurer que le programme répond aux besoins initiaux.

Le programme en langage évolué est appelé le langage source, le langage moins expressif le langage cible, et dans le cadre de la programmation avec un langage compilé, on nomme le programme cible :binaireouexécutable. Le programme binaire est une suite d’instructions destinées à être interprétées par un processeur particulier.

Un binaire est donc dédié à un processeur et un système d’exploitation d’un certain type, ce couple processeur/système est appeléplate-forme.

Le programme source est le programme qui reflète très exactement l’analyse et l’algorithme correspondant au problème à résoudre. On ne peut retrouver dans le binaire la complexité et la richesse de l’algorithme mis en œuvre qu’au prix d’un tra-vail surhumain. En effet la solution serait de « décompiler » le binaire. On peut tirer du binaire une liste d’instructions issues de la couche assembleur ; c’est parce que cette liste contient des instructions peu expressives par rapport aux instructions du langage évolué, qu’il est pratiquement impossible de retrouver l’architecture initiale de l’algorithme.

Pour comprendre ce principe — qui peut ne pas être clair pour le lecteur qui n’a pas une expérience de programmeur — on peut faire plusieurs analogies. La première est celle du cuisinier qui prépare un plat avec un certain nombre d’ingrédients. En goûtant le plat, un palais averti peut détecter quelques-uns de ces ingrédients. On peut même imaginer qu’un appareil puisse faire une analyse moléculaire et établir une liste précise des éléments qui composent le plat. Cependant, il semble difficile voire impossible, à partir du plat de savoir comment le chef a procédé pour mélanger les ingrédients, le temps de cuisson, les plats et les ustensiles qu’il a utilisés, etc.

Une autre analogie possible est celle de la conception d’une culasse automobile. On peut démonter une culasse, la mesurer, trouver l’alliage de métaux qui la compose, mais on ne peut à partir de ces données retrouver le modèle de thermodynamique et l’ensemble de calcul qui a mené à définir la forme particulière de cette culasse. Enfin, on peut toujours traduire un texte d’un grand philosophe en un texte composé de mots et phrases simples dans le but de le faire comprendre à un enfant de dix ans.

On ne pourra cependant pas retrouver le texte original à partir du texte traduit.

Les programmes sources constituent donc la seule information précise

concernant le fonctionnement d’un programme.

1.1.2 De la portablilité

Pour comprendre ce qu’implique la manipulation des programmes sources, nous allons expliciter dans ce paragraphe les notions :

1. d’exécution d’un programme ;

1

1. l’analyse du problème à résoudre ;

2. la conception d’un algorithme correspondant à cette analyse ;

3. la traduction de l’analyse dans un langage de programmation plus ou moins évolué ;

4. la compilation du programme en langage évolué, c’est-à-dire la traduction du langage évolué vers un langage moins expressif qu’est celui de la machine et plus précisément du processeur et du système d’exploitation ;

5. la phase de test qui permet de s’assurer que le programme répond aux besoins initiaux.

Le programme en langage évolué est appelé le langage source, le langage moins expressif le langagecible, et dans le cadre de la programmation avec un langage compilé, on nomme le programme cible :binaireouexécutable. Le programme binaire est une suite d’instructions destinées à être interprétées par un processeur particulier.

Un binaire est donc dédié à un processeur et un système d’exploitation d’un certain type, ce couple processeur/système est appeléplate-forme.

Le programme source est le programme qui reflète très exactement l’analyse et l’algorithme correspondant au problème à résoudre. On ne peut retrouver dans le binaire la complexité et la richesse de l’algorithme mis en œuvre qu’au prix d’un tra-vail surhumain. En effet la solution serait de « décompiler » le binaire. On peut tirer du binaire une liste d’instructions issues de la couche assembleur ; c’est parce que cette liste contient des instructions peu expressives par rapport aux instructions du langage évolué, qu’il est pratiquement impossible de retrouver l’architecture initiale de l’algorithme.

Pour comprendre ce principe — qui peut ne pas être clair pour le lecteur qui n’a pas une expérience de programmeur — on peut faire plusieurs analogies. La première est celle du cuisinier qui prépare un plat avec un certain nombre d’ingrédients. En goûtant le plat, un palais averti peut détecter quelques-uns de ces ingrédients. On peut même imaginer qu’un appareil puisse faire une analyse moléculaire et établir une liste précise des éléments qui composent le plat. Cependant, il semble difficile voire impossible, à partir du plat de savoir comment le chef a procédé pour mélanger les ingrédients, le temps de cuisson, les plats et les ustensiles qu’il a utilisés, etc.

Une autre analogie possible est celle de la conception d’une culasse automobile. On peut démonter une culasse, la mesurer, trouver l’alliage de métaux qui la compose, mais on ne peut à partir de ces données retrouver le modèle de thermodynamique et l’ensemble de calcul qui a mené à définir la forme particulière de cette culasse. Enfin, on peut toujours traduire un texte d’un grand philosophe en un texte composé de mots et phrases simples dans le but de le faire comprendre à un enfant de dix ans.

On ne pourra cependant pas retrouver le texte original à partir du texte traduit.

Les programmes sources constituent donc la seule information précise

concernant le fonctionnement d’un programme.

1.1.2 De la portablilité

Pour comprendre ce qu’implique la manipulation des programmes sources, nous allons expliciter dans ce paragraphe les notions :

1. d’exécution d’un programme ;

1

2. de compilation d’un programme source ; 3. d’interprétation d’un programme source.

Tout d’abord notons que Tanebaum (2001) a introduit un modèle de représenta-tion d’un ordinateur qui est un modèle en couches (cf. figure 1.12). Dans ce modèle, on représente la machine physique dans la première couche dite de bas niveau puis, en faisant intervenir des langages de programmation de plus en plus évolués, on dé-finit des couches de haut niveau. Celles-ci permettent de dialoguer avec la machine à l’aide de concepts de plus en plus abstraits et éloignés de l’architecture physique.

Couche machine couche système d’exploitation

couche assembleur couche langage d’application

Figure1.1: L’architecture en couches d’un ordinateur.

Exécution

Au niveau de la couche machine, lorsqu’un programme est en cours d’exécution, l’unité centrale passe le plus clair de son temps à transférer le code des instructions stockées en mémoire centrale pour les décoder et les exécuter. Le code de chacune de ces instructions correspond à un numéro identifiant une opération qu’est capable de réaliser le processeur utilisé. Le code des instructions est bien évidemment différent pour les processeurs fabriqués par Intel et Motorola pour ne citer que ceux-là. Par conséquent :

Le code en langage machine d’un programme donné n’est pas le même selon le processeur qui doit l’exécuter.

Compilation d’un source3

Avec un langage compilé, on dispose d’un outil logiciel particulier appelé compila-teurpour traduire le programme source en un programme exécutable par la machine 2. La couche machine physique est en réalité composée de trois couches : machine physique, couche micro-programmée, couche machine traditionnelle.

3. Il arrive que ces fainéants d’informaticiens disent « le source » qui est une contraction de « le fichier source »...

1

2. de compilation d’un programme source ; 3. d’interprétation d’un programme source.

Tout d’abord notons que Tanebaum (2001) a introduit un modèle de représenta-tion d’un ordinateur qui est un modèle en couches (cf. figure 1.12). Dans ce modèle, on représente la machine physique dans la première couche dite de bas niveau puis, en faisant intervenir des langages de programmation de plus en plus évolués, on dé-finit des couches de haut niveau. Celles-ci permettent de dialoguer avec la machine à l’aide de concepts de plus en plus abstraits et éloignés de l’architecture physique.

Couche machine couche système d’exploitation

couche assembleur couche langage d’application

Figure1.1: L’architecture en couches d’un ordinateur.

Exécution

Au niveau de la couche machine, lorsqu’un programme est en cours d’exécution, l’unité centrale passe le plus clair de son temps à transférer le code des instructions stockées en mémoire centrale pour les décoder et les exécuter. Le code de chacune de ces instructions correspond à un numéro identifiant une opération qu’est capable de réaliser le processeur utilisé. Le code des instructions est bien évidemment différent pour les processeurs fabriqués par Intel et Motorola pour ne citer que ceux-là. Par conséquent :

Le code en langage machine d’un programme donné n’est pas le même selon le processeur qui doit l’exécuter.

Compilation d’un source3

Avec un langage compilé, on dispose d’un outil logiciel particulier appelé compila-teurpour traduire le programme source en un programme exécutable par la machine 2. La couche machine physique est en réalité composée de trois couches : machine physique, couche micro-programmée, couche machine traditionnelle.

3. Il arrive que ces fainéants d’informaticiens disent « le source » qui est une contraction de « le fichier source »...

1

Ordinateur 1 Ordinateur 2 Ordinateur 3 Ordinateur 4

(a) Utilisation d’un programme interprété sur différents ordinateurs.

SE A

Ordinateur 1 Ordinateur 2 Ordinateur 3 Ordinateur 4

(b) Sources compilées sur différents ordinateurs.

Figure1.2: Portabilité de programmes écrits en langage compilé et interprété.

virtuelle de l’ordinateur hôte. On notera que contrairement au cas des langages in-terprétés, l’exécutable généré est autonome et à ce titre, peut être exécuté sur un ordinateur doté de la même machine virtuelle (c’est-à-dire doté du même système d’exploitation et de la même architecture). Dans le cas d’un ordinateur doté d’une machine virtuelle différente, l’exécutable est inutilisable, et il faudra disposer d’un compilateur pour la nouvelle plate-forme pour pouvoir produire un exécutable. À titre d’exemple, à la figure 1.2b, on notera que l’exécutable produit sur l’ordinateur 1 est utilisable sur l’ordinateur 2 doté de la même machine virtuelle. Par contre, cet exécutable n’est pas utilisable sur les ordinateurs 3 et 4, sur lesquels il est nécessaire de recompiler le source.

Interprétation d’un source

Dans le cadre des langages interprétés, le programme source est analysé par un programme particulier appeléinterpréteur; ce programme se charge d’exécuter chacune des instructions du programme source, les unes après les autres comme le montre la figure 1.2a. Pour pouvoir utiliser le logiciel produit sur un autre ordinateur, il faudra disposer de l’interpréteur sur cet ordinateur, et ceci, que la machine virtuelle de l’ordinateur cible soit différente ou non. En d’autres termes, pour interpréter un source en langage Perl (langage interprété), on devra disposer d’un interpréteur Perl pour Windows,LINUX, etc. en fonction du système installé sur l’ordinateur.

1

Ordinateur 1 Ordinateur 2 Ordinateur 3 Ordinateur 4

(a) Utilisation d’un programme interprété sur différents ordinateurs.

SE A

Ordinateur 1 Ordinateur 2 Ordinateur 3 Ordinateur 4

(b) Sources compilées sur différents ordinateurs.

Figure1.2: Portabilité de programmes écrits en langage compilé et interprété.

virtuelle de l’ordinateur hôte. On notera que contrairement au cas des langages in-terprétés, l’exécutable généré est autonome et à ce titre, peut être exécuté sur un ordinateur doté de la même machine virtuelle (c’est-à-dire doté du même système d’exploitation et de la même architecture). Dans le cas d’un ordinateur doté d’une machine virtuelle différente, l’exécutable est inutilisable, et il faudra disposer d’un compilateur pour la nouvelle plate-forme pour pouvoir produire un exécutable. À titre d’exemple, à la figure 1.2b, on notera que l’exécutable produit sur l’ordinateur 1 est utilisable sur l’ordinateur 2 doté de la même machine virtuelle. Par contre, cet exécutable n’est pas utilisable sur les ordinateurs 3 et 4, sur lesquels il est nécessaire de recompiler le source.

Interprétation d’un source

Dans le cadre des langages interprétés, le programme source est analysé par un programme particulier appeléinterpréteur; ce programme se charge d’exécuter chacune des instructions du programme source, les unes après les autres comme le montre la figure 1.2a. Pour pouvoir utiliser le logiciel produit sur un autre ordinateur, il faudra disposer de l’interpréteur sur cet ordinateur, et ceci, que la machine virtuelle de l’ordinateur cible soit différente ou non. En d’autres termes, pour interpréter un source en langage Perl (langage interprété), on devra disposer d’un interpréteur Perl pour Windows,LINUX, etc. en fonction du système installé sur l’ordinateur.