Ce qui différencie un logiciel libre d'un logiciel propriétaire, c'est l'accès au code source du logiciel. Cela implique que les logiciels libres soient généralement distribués sous forme d'archives de fichiers sources. C'est assez déroutant pour le débutant, car l'utilisateur du logiciel doit compiler lui-même les sources du logiciel avant de pouvoir utiliser celui-ci.
Aujourd'hui, il existe des versions pré-compilées de la plupart des logiciels libres existants. L'utilisateur pressé n'a plus qu'à installer le binaire. Cependant, certains logiciels ou des versions plus récentes de ceux-ci n'existent pas (ou pas encore) sous cette forme. De plus, si vous utilisez un couple système d'exploitation / architecture complexe, beaucoup des logiciels libres qui vous intéresseraient ne sont pas encore pré-compilés. Par ailleurs, compiler soi-même ses logiciels permet de n'en conserver que des options particulières ou d'en étendre les fonctionnalités par le biais d'extensions ciblées, répondant parfaitement à ses besoins.
Pour installer un logiciel libre, vous aurez besoin :
d'un compilateur (généralement pour le langage C
), d'un
programme d'archivage (tar),
d'une connaissance générale du système d'exploitation que vous utilisez,
de quoi manger (dans le pire des cas, cela peut effectivement durer longtemps ; au fait, un vrai hacker mange des pizzas et pas des petits fours !),
de quoi boire (pour les mêmes raisons ; et un vrai informaticien boit des sodas... bourrés de caféine ; pas de pub clandestine !).
du numéro de téléphone de votre copain bidouilleur qui recompile son noyau toutes les semaines,
Compiler un logiciel libre ne présente généralement pas trop de problèmes, mais si vous n'êtes pas habitué, la moindre anicroche peut vous plonger dans la confusion. Nous allons donc ici vous montrer comment vous sortir, sans trop de bleus, de toutes les situations difficiles !
Pour passer d'une forme source à une forme
binaire, il est nécessaire d'effectuer une compilation. Cette
compilation est généralement effectuée sur des programmes
écrits en langage C
ou C++
(qui sont les plus
répandus dans la communauté du logiciel libre, notamment
dans le monde UNIX®). Certains logiciels libres sont
écrits dans des langages ayant nul besoin de compilation
(par exemple perl ou le shell), mais ils
doivent quand même être configurés.
La compilation
C
est assurée, très logiquement, par un compilateur qui est
généralement gcc, le compilateur libre écrit par le projet GNU. La compilation d'un
logiciel entier est une tâche complexe, qui passe par la compilation
successive de multiples fichiers sources (il est plus facile pour le
programmeur d'isoler les différentes parties de son travail dans des
fichiers distincts, pour diverses raisons). Afin de rendre cette tâche
plus aisée, ces opérations répétitives sont effectuées par un
utilitaire du nom de make.
Pour bien comprendre le mécanisme de la
compilation (et donc être à même de résoudre des problèmes
éventuels), il faut connaître les différentes
phases. L'objectif est de convertir progressivement un
fichier texte écrit en un langage compréhensible par un
humain entraîné (le langage C
par exemple) vers un
langage compréhensible par une machine (ou un humain
très entraîné dans quelques
cas). gcc exécutera l'un après l'autre quatre
programmes qui se chargeront chacun d'une étape
particulière :
cpp : la première étape consiste à remplacer des
directives (pré-processeur) par des instructions
C
. Typiquement, il s'agit d'insérer un fichier d'en-têtes
(#include
) ou de définir une macro-fonction
(#define
). À la fin de cette phase, un code purement
C
est engendré.
cc1 : cette étape
consiste à convertir du C
en langage
d'assemblage. Le code généré est dépendant de
l'architecture cible.
as : cette étape
consiste à générer du code objet (ou binaire) à partir du langage
d'assemblage. À la fin de cette phase, un fichier se terminant par
.o
est généré.
ld : cette
dernière étape (l'édition de liens,
en anglais « linkage ») assemble (ou lie) tous les fichiers
objets (.o
) et les bibliothèques associées, et
génère un exécutable.
Une distribution de logiciel libre correctement structurée est généralement organisée d'une manière bien précise :
un fichier INSTALL
, qui décrit la procédure d'installation
du logiciel,
un fichier
README
qui contient toutes les informations
générales relatives au programme (courte description, auteur, adresse
où le télécharger, documentation relative, pointeurs utiles, ...). Si
le fichier INSTALL
est absent, le fichier
README
contient généralement une procédure
d'installation succincte;
un fichier COPYING
qui contient la
licence ou décrit les conditions de distribution du logiciel.
Parfois, c'est un fichier appelé LICENSE
qui le
remplace;
un fichier
CONTRIB
ou CREDITS
qui
contient une liste de personnes ayant un rapport avec le logiciel
(participation active, remarques pertinentes, logiciels tiers,
etc.);
un fichier CHANGES
(ou, plus rarement, NEWS
),
qui contient les nouveautés de la version actuelle par rapport à la
version précédente et les corrections de bogues;
un fichier Makefile
(voir
Section 4.1, « Make »), qui permet de compiler le logiciel (c'est un
fichier nécessaire à make). Parfois, ce fichier n'existe pas
encore et sera généré lors du processus de configuration;
assez souvent, un fichier configure
ou
Imakefile
, qui permettra de générer un nouveau fichier
Makefile
adapté à un système donné (voir Section 3, « Configuration »);
un répertoire contenant les sources, qui sera généralement celui où le
binaire sera stocké une fois la compilation terminée; son nom est
généralement src
;
un répertoire contenant la documentation relative au programme
(généralement au format man ou Texinfo
), dont le nom est
généralement doc
;
éventuellement, un répertoire contenant des données propres au logiciel (typiquement, des fichiers de configuration, des exemples de données produites, ou des fichiers de ressources).