Pourquoi compiler ses programmes depuis les sources sur Linux

Pour installer une application sur Linux, on peut utiliser le système de paquets de sa distributions Linux.
Par exemple sur Debian, Ubuntu ou Debian, on a DPKG.
RPM est le système de paquet de Redhat, CentOS et Fedora.

Une autre méthode pour installer une application sur Linux est la compilation.
On part des sources de l'application pour créer les binaires et les installer dans Linux.
Grâce au compilateur gcc (GNU Compiler Collection) cela est possible avec n'importe quel programme libre.

Dans ce tutoriel, je vous explique pourquoi compiler ses application sur Linux.
Quels sont les avantages. Pourquoi dans certains cas, on est obligés de compiler une application.

Pourquoi compiler ses programmes depuis les sources sur Linux

Qu'est-ce que compiler ses programmes depuis les sources ?

Dans Linux, compiler une application consiste à partir des sources, souvent écrites en C pour créer les binaires et librairies.
Pour y parvenir, on utilise un compilateur comme GCC.

On récupère les sources depuis git ou le site du projet.
Les sources se présentent en général sous la forme de fichiers .c et fichiers .h pour les headers.
Puis on passe différentes commandes comme configure, make, make install pour compiler puis installe les binaires dans le système.

Pourquoi compiler ses programmes depuis les sources sur Linux

Installer des utilitaires non présent dans les dépôts

Bien que les dépôts des distributions Linux regroupent des milliers de paquets et logiciels, il arrive parfois qu'un logiciel ne soit pas présent.
C'est souvent le cas de projet présent sur Github dont les sources sont disponibles.
Dans ce cas là, il est obligatoire de compiler depuis les sources pour installer et exécuter le logiciel sur votre système.

Obtenir des versions plus récentes

Lorsque vous utilisez le système de paquets d'une distribution Linux.
Vous êtes bloqués sur la versions maintenues et proposées par la distributions.
Mais parfois, on peut avoir besoin d'installer une version plus récente.

Compiler vos propres packages vous permettra d'obtenir des versions hautement personnalisées de ces packages pour mieux répondre à vos besoins.
Par exemple, si vous installez un package de serveur Web comme Nginx à partir du référentiel principal, il installera une version générique préconfigurée de Nginx compatible avec votre distribution.

En compilant vous même Nginx, vous pouvez choisir la version à installer.
Toutefois, il n'est pas dit que vous puissiez installer la toute dernière version car l'application peut s'appuyer sur des librairies systèmes qui sont alors trop anciennes.

Sur les sites des projets libres, on trouve les sources pour chaque version.

Installer des versions personnalisées

Si vous compilez Nginx vous-même, vous pourrez non seulement le compiler avec vos propres indicateurs de configuration personnalisés selon vos besoins particuliers, mais vous pourrez également l'améliorer en ajoutant des modules spécialisés comme par exemple Pagespeed de Google.

En effet, lors de la compilation, vous configurez les modules à activer.
De plus vous pouvez très facilement ajouter des modules qui ne sont pas supportés par votre distributions Linux pour des raisons de licence.
Le module pagespeed de Google ne sera jamais proposé par Debian, car c'est un module propriétaire.

Ci-dessous les modules nginx disponibles en paquets sur Debian.

Les modules nginx sur Ubuntu.
La version Ubuntu étant plus récente, elle propose un peu plus de modules.

En compilant depuis les sources, vous pouvez activer des modules que vous n'avez pas forcément sous forme de paquet depuis les dépôts de votre distribution Linux.

Installer une version optimisée

Les fichiers de programme sont généralement créés pour pouvoir s'exécuter sur n'importe quel ordinateur compatible x86-64. Mais ils peuvent être optimisés pour un seul type de processeur, ce qui les rend plus rapides sur ce processeur.

Sans aucune option d'optimisation, le but du compilateur est de réduire le coût de compilation et de faire en sorte que le débogage produise les résultats attendus.
L'activation des indicateurs d'optimisation oblige le compilateur à tenter d'améliorer les performances et/ou la taille du code au détriment du temps de compilation et éventuellement de la capacité de déboguer le programme.
Le compilateur effectue une optimisation basée sur la connaissance qu'il a du programme. La compilation de plusieurs fichiers à la fois dans un seul mode de fichier de sortie permet au compilateur d'utiliser les informations obtenues à partir de tous les fichiers lors de la compilation de chacun d'eux.

Lors de la compilation, pour les meilleures performances, on peut optimiser les binaires en utilisant des paramètres comme CHOST, CFLAGS, CXXFLAGS.
GCC propose aussi des options pour optimiser qui commencent par -O, comme -O1,-O2 ou Os
Les options -O, de GCC active aussi des drapeaux d'optimisation.

Comment compiler un logiciel depuis les sources Linux ?

Depuis ce lien, vous trouverez les bases et les commandes (configure, make, gcc, ...) pour compiler un logiciel depuis les sources.

Tags: