Différence entre un fichier exécutable autonome et un exécutable installé ?

J’ai remarqué sous Windows, du moins, que vous pouvez télécharger un fichier exécutable direct, lié statiquement, et le lancer directement, ou écrire votre propre programme et l’exécuter (même dynamiquement) sans avoir à l’installer.

Cela m’amène à mon point principal… quel est le but du processus d’installation ? Je veux dire, outre peut-être le registre Windows. Cependant, en termes de praticité et d’utilisation, il est possible d’avoir un programme unique, indépendant et autonome qui peut être exécuté, stocké sur un support non volatile, et accessible via le système de fichiers de n’importe quel périphérique sur lequel il se trouve, et exécuté sur le système d’exploitation. Alors quel est le problème avec tout ce “installez ceci” si de nombreux excellents programmes de pratiquement n’importe quelle envergure peuvent fonctionner parfaitement sans passer par une configuration d’installation ? Cela me perplexe un peu, et mis à part une base de données ou d’autres systèmes de configuration de métadonnées/accès, quelle est la vraie différence ici si le second (un exécutable installé) fonctionne de la même manière qu’un autonome ?

Y a-t-il une différence ici dont je n’ai pas connaissance entre un programme non installé et un programme installé ?

PS : Cela ne s’applique pas uniquement aux systèmes d’exploitation Windows, mais à tout système qui implémente une fonction similaire.

Il y a plusieurs raisons pour lesquelles les programmes sont fournis sous forme d’installateurs plutôt que d’exécutables autonomes :

Préoccupations de taille de fichier

Les programmes avec de nombreuses dépendances volumineuses peuvent fournir des installateurs web qui téléchargent les dépendances et les placent dans un emplacement commun, afin qu’elles puissent être partagées par plusieurs programmes. Par exemple, DirectX est une bibliothèque très volumineuse. Si chaque programme de votre système qui dépend de DirectX regroupait simplement l’ensemble du runtime DirectX avec lui, cela consommerait beaucoup d’espace. Cela peut sembler sans importance à l’ère des disques durs de 4 To, mais considérez que les SSD sont considérablement plus petits en capacité, et qu’ils sont de plus en plus utilisés sur les ultrabooks, certains avec aussi peu que 64 Go de stockage. Et bien sûr il y a de nombreuses autres bibliothèques partagées en dehors de DirectX.

Les programmes qui sont à la fois très volumineux et continuellement mis à jour sont mieux distribués sous forme d’une collection de nombreux petits fichiers, accompagnés d’un lanceur ou d’un programme de mise à jour qui vérifie Internet pour une mise à jour, et si une mise à jour existe, ne télécharge que les modifications nécessaires. Si tous les gros programmes étaient livrés comme un seul exécutable monolithique, il est très probable que le processus de correctif nécessiterait le retéléchargement de l’exécutable entier, car patcher le fichier exécutable en cours d’exécution sur le disque est quasiment impossible en raison des verrous de fichiers. De plus, comme le programme de mise à jour doit savoir où se trouvent ses fichiers, il stocke souvent ce chemin de répertoire dans un emplacement connu du registre.

Préoccupations de confort utilisateur

Les installateurs pour de très gros programmes, comme Visual Studio et Microsoft Office, permettent à l’utilisateur de désélectionner l’installation de certaines fonctionnalités, si l’utilisateur sait qu’il n’en aura jamais besoin. Cela a 3 avantages potentiels : cela réduit la consommation d’espace disque ; cela peut réduire le temps de téléchargement et la consommation de bande passante si l’installateur est un téléchargeur web ; et cela peut réduire l’encombrement sur la machine de l’utilisateur, moins d’éléments dans le menu Démarrer / raccourcis bureau, moins de programmes au démarrage, etc.

Les installateurs pour des programmes complexes sont souvent accompagnés d’options de configuration que l’utilisateur peut paramétrer en utilisant une interface graphique conviviale dans le cadre de l’installateur. Voyez par exemple les installateurs de MySQL ou SQL Server, qui peuvent vous guider à travers tout le processus de mise en route de votre serveur de base de données avant même que vous ne cliquiez sur “Terminer” dans l’installateur.

Les installateurs peuvent demander à l’utilisateur des informations requises, comme des clés de licence, qui n’ont besoin d’être saisies qu’une seule fois. Cela peut simplifier la conception du programme lui-même, et réduire le nombre de choses qu’il doit faire et vérifier au démarrage. Cela donne également à l’utilisateur la confiance que, une fois le programme installé avec succès, il devrait “fonctionner tout simplement” – il n’y a plus de “pièges” dans le programme qui pourraient les empêcher de l’utiliser.

Préoccupations de compatibilité

Certains programmes entrent en conflit avec d’autres programmes. C’est un fait simple et malheureux de l’ingénierie logicielle. Avant d’installer un programme qui a des conflits connus avec d’autres programmes, il est souvent utile de vérifier d’abord le système pour voir si un programme incompatible est installé. L’utilisateur peut alors être alerté le cas échéant. Par exemple, il y a une incompatibilité potentiellement très dangereuse dans les anciennes versions de VMware et VirtualBox, qui provoquait un Écran Bleu de la Mort, car un programme essayait d’utiliser une instruction spéciale de virtualisation du processeur après qu’elle ait déjà été réservée par l’autre produit. Si vous fournissiez simplement le produit final à l’utilisateur sans installateur, vous pourriez devoir vérifier la présence de produits incompatibles à chaque démarrage de votre programme, ce qui pourrait ralentir le démarrage du programme.

Les programmes peuvent avoir des dépendances sur d’autres composants système qui ne peuvent être installés qu’au niveau du système, pas au niveau de l’utilisateur. Pour installer ces composants système spéciaux, des privilèges administratifs sont généralement nécessaires, et un installateur doit généralement être exécuté.

Privilèges élevés et services spéciaux

  • Certains programmes dépendent de modifications du système d’exploitation pour leur fonctionnalité, et ces modifications ne peuvent pas être facilement implémentées sans une sorte d’installateur pour s’en occuper avec des privilèges administratifs. Par exemple, les programmes qui installent des pilotes ou des modules noyau, comme Wireshark, ne peuvent pas simplement être exécutés, car vous devez absolument fournir les composants en mode noyau dans des fichiers séparés. Dans le meilleur des cas absolu, vous pourriez encore devoir demander à l’utilisateur de décompresser manuellement une archive, puis d’exécuter une sorte d’installateur pour le pilote de périphérique. Les services sont un autre exemple de quelque chose qui nécessite des privilèges administratifs pour être installé. Les logiciels d’installation sont particulièrement bons pour obtenir les droits d’administrateur de manière élégante, sans exiger que le programme principal lui-même demande des droits d’administrateur à chaque exécution (ce serait une exposition de sécurité inutile dans de nombreux cas).

Après avoir donné toutes ces raisons pour lesquelles les installateurs sont utiles, voici quelques observations de l’autre côté :

De nombreux programmes, même ceux qui ne sont disponibles au téléchargement que sous forme d’installateur nécessitant des droits d’administrateur, peuvent être “décompressés” de force depuis leurs installateurs et exécutés directement sans les installer. D’autres programmes, en particulier les logiciels open source, sont reconditionnés en exécutables autonomes par PortableApps. Il est à noter que certains programmes, lorsqu’ils sont décompressés de leur installateur, auront des fonctionnalités réduites, présenteront des erreurs ou d’autres problèmes.

Sur les systèmes d’exploitation autres que Windows, il est presque toujours possible de simplement télécharger (ou compiler) des programmes et de les exécuter en tant qu’utilisateur normal, sans obtenir les droits root. Il y a quelques exceptions concernant les paquets qui font partie intégrante du système d’exploitation, mais pour la plupart des applications utilisateur, vous pouvez l’exécuter dans votre répertoire personnel sans l’installer au niveau du système en utilisant le gestionnaire de paquets. Windows est un cas un peu spécial car la plupart des programmes de bureau sous Windows ont un installateur, et ne peuvent généralement pas être installés autrement.

Même sur les plateformes non-Windows, les programmes qui ont besoin de la capacité de charger un module noyau sont accompagnés d’une sorte d’installateur, qui compile le module noyau et l’installe dans le bon répertoire. Vous pouvez également vous attendre à voir un installateur dans le cas où le programme est un daemon qui sera démarré à l’aide d’un script de service système, par ex. dans /etc/init.d. Ce type de “binaire empaqueté” est une méthode de distribution moins courante sur GNU/Linux, mais la plupart des distributions Linux fournissent encore la plupart des logiciels sous forme de paquets installables, chacun nécessitant un accès root (accès administrateur) pour être installé.

Conclusions

Vous avez demandé pourquoi nous avons besoin d’installateurs. La réponse courte est que nous n’en avons pas besoin – pas strictement parlant, en tout cas. Il y a de très rares exemples d’applications qui ne peuvent pas, en principe, être regroupées dans un seul exécutable autonome sans ressources, sans installateur, etc. Même quelque chose d’aussi complexe que VMware Workstation pourrait automatiquement obtenir les privilèges d’administrateur, écrire le module noyau de l’hyperviseur dans un fichier sur disque, et l’installer dynamiquement au démarrage du programme, et fournir toutes ses ressources (images, sons, etc.) regroupées dans la section de données de l’exécutable.

Utiliser un installateur ou non est un choix que les producteurs de logiciels doivent faire. Il y a des avantages et des inconvénients à utiliser un installateur. De nombreux éditeurs choisissent de distribuer leurs logiciels à la fois sous forme d’installateur et de binaire autonome, ou au moins sous forme de fichier ZIP qui peut simplement être décompressé et exécuté. Pour les logiciels qui ne nécessitent pas absolument un installateur, c’est une approche très pragmatique qui satisfait tout le monde. Habituellement, les logiciels qui ne sont livrés sous aucune autre forme qu’avec un installateur sont des logiciels qui nécessitent des privilèges administratifs pour installer un composant d’eux-mêmes, puisque l’installateur est le moyen le plus élégant d’obtenir les privilèges nécessaires.

Personnellement, je trouve les installateurs très agaçants dans mon travail quotidien, car parfois je veux exécuter un programme alors que je n’ai pas les droits administratifs sur l’ordinateur que j’utilise. J’ai beaucoup d’expérience dans le décompactage manuel d’installateurs pour extraire les fichiers de programme qu’ils contiennent, puis faire fonctionner ces fichiers correctement. Cependant, sur mon PC personnel à la maison où j’ai toujours un accès administratif, je trouve les installateurs bénéfiques et pratiques, car la plupart des installateurs me donnent des options utiles, comme la création d’un raccourci bureau, que j’aurais dû faire manuellement sinon.