Pourquoi les programmes ne sont-ils pas distribués au format compilé?


32

Mais ils donnent des instructions comme

cd downloaded_program
./configure
make install

Cela crée le fichier ELF nécessaire et probablement certains fichiers .so.

Pourquoi ne pas mettre ceux-ci dans un fichier zip pour le téléchargement, comme avec les applications Windows? Y a-t-il une raison pour laquelle ils doivent être compilés par l'utilisateur?


18
c'est ainsi que le code source est distribué. vous avez étiqueté ceci avec Ubuntu - avez-vous essayé le apttruc?
mikeserv

11
Ubuntu: 40.000 programmes les plus courants: $ sudo apt-get install [name]. Les logiciels les plus rares: Certains doivent être construits à partir des sources avec {cmake .. && make, ./configure && make, waf, scons, etc. ~ 10 options de construction}.
Knud Larsen

6
Vous avez trois versions de Windows © et ~ 100 versions "Linux OS". Impossible de maintenir et de stocker plus de programmes que les (40 000) les plus courants.
Knud Larsen

35
cette question est tout simplement fausse. la plupart des logiciels sont distribués au format binaire, généralement dans .rpmou .debou .tgzpaquets. Le source est également distribué pour ceux qui veulent le compiler eux-mêmes, l'examiner ou le modifier, ou le conditionner pour une ou plusieurs distributions. Personne ne l'utilise .zippour distribuer des fichiers binaires sous Linux car les fichiers .zip ne prennent pas en charge les informations essentielles telles que l'utilisateur, le groupe et les autorisations pour les fichiers qu'ils contiennent.
cas

2
Je n'ai pas encore besoin de compiler les programmes Linux que je voulais exécuter. Les exécutables ont toujours été disponibles ... jusqu'à présent.
user2338816

Réponses:


34

Analysons les facteurs ...

Analyse :

DÉPENDANCES EN FONCTION DE LA PLATE - FORME : Il existe certains problèmes dans un environnement où les développeurs créent et gèrent plusieurs variantes d’une application spécifique à l’architecture:

  • Un code source différent est requis pour différentes variantes - Différents systèmes d'exploitation basés sur UNIX peuvent utiliser différentes fonctions pour implémenter la même tâche (par exemple, strchr (3) ou index (3)). De même, il peut être nécessaire d'inclure différents fichiers d'en-tête pour différentes variantes (par exemple, string.h vs. strings.h).

  • Différentes procédures de construction sont requises pour différentes variantes - Les procédures de construction de différentes plates-formes varient. Les différences peuvent concerner des détails tels que les emplacements de compilateur, les options de compilateur et les bibliothèques.

  • Les constructions pour différentes variantes doivent être séparées - Comme il existe une seule arborescence source, vous devez veiller à ce que les modules d'objet et les exécutables d'une architecture ne soient pas confondus avec ceux d'autres architectures. Par exemple, l'éditeur de liens ne doit pas essayer de créer un exécutable IRIX – 5 à l'aide d'un module objet créé pour SunOS – 4.

  • Chaque système d'exploitation possède son propre système de gestion de liaison et doit préparer le fichier ELF (fichier exécutable et format de liaison) au besoin.

  • Le compilateur générera une construction qui est une séquence d' instructions , et des architectures distinctes signifient différents jeux d'instructions ( Comparaison des architectures de jeux d'instructions ). Ainsi, la sortie du compilateur est distincte pour chaque architecture (Ex: x86, x86-64, ARM, ARM64, IBM Power ISA, PowerPC, le Motorola 6800, le MOS T 6502, etc. ).

SECURITE :

  • Si vous téléchargez un fichier binaire, vous ne pouvez pas savoir s'il fait ce qu'il dit, mais vous pouvez essayer de vérifier le code source et d'utiliser un fichier binaire auto-compilé dans votre système. Malgré cela, l'utilisateur Techmag a bien fait valoir son point de vue: l'audit du code exige que des codeurs compétents et compétents évaluent le code et ne constituent pas une garantie de sécurité.

MARCHÉ : Dans cette section, il y a beaucoup de facteurs, mais je vais essayer de le résumer:

  • Toutes les entreprises ne visent pas toutes les plateformes, cela dépend du marché, de leur popularité et de ce qu'elles veulent vendre.

  • Les logiciels libres ont l’esprit de rendre les logiciels aussi largement disponibles que possible, mais cela ne signifie pas pour autant qu’ils sont conçus pour toutes les plateformes, cela dépend de la communauté qui les prend en charge.

Conclusion :

Tous les logiciels ne sont pas conçus pour chaque plate-forme. Fournir des fichiers binaires pour toutes les architectures et plates-formes implique de le compiler, de le tester et de le maintenir pour toutes les plates-formes. C’est davantage de travail parfois trop coûteux et qui peut être évité si l’utilisateur le compile sur sa propre plate-forme. En outre, l'utilisateur sera au courant de ce qu'il exécute.


1
Je pense que cette réponse pourrait être améliorée en étant un peu plus explicites sur les différences entre les modèles de processeur - et sur le fait qu’il ya environ 10 ans, chaque variante Unix avait fondamentalement la sienne. Linux n'était pas l'influence omniprésente d'aujourd'hui.
Sobrique

@Sobrique: Ou même mentionner les différences de modèles de processeur en soi - il y a 10 ans, il y en avait plus que les 2 types actuels et Linux fonctionnait presque tous (j'ai moi-même exécuté Linux sur PowerPC). C'est encore en partie pertinent aujourd'hui avec x86, AMD64 (autrement dit x86-64) et ARM. MIPS est encore très populaire aujourd'hui parmi les personnes qui peuvent fabriquer leurs propres puces, car il est désormais entièrement libre de tout brevet.
Slebetman

Désolé pour le retard! Merci à vous deux! J'ai ajouté quelques références aux architectures cpu, j'ai également ajouté un lien vers une liste de comparaison. Je ne veux pas que la réponse soit si grande. Mais oui, c'est très pertinent!
Facundo Victor

1
Le commentaire de sécurité implique que le lecteur / installateur sache lire et comprendre le code. Étant donné que la vulnérabilité des chocs a survécu pendant des décennies sans que je m'en aperçoive, je suggère respectueusement que cette croyance est quelque peu fausse. Cela permet aux codeurs compétents et compétents d'évaluer le code, mais ce n'est pas aussi efficace que la publicité. Cela pourrait en fait avoir l'effet inverse. L' Etat et le crime organisé pirates sont financés par le code contribuent probablement pour l' ensemble des bibliothèques manoir open source / projets ces jours -ci dans l'espoir de planter l'ouverture prochaine Shellshock ...
Techmag

Vous avez raison! J'ai modifié la réponse pour refléter cela. J'ai essayé de ne pas perdre de vue l'objectif principal de la réponse. Merci Techmag!
Facundo Victor

10

Il existe une variété de plates-formes et d'environnements logiciels * nix et autres , sur lesquels le logiciel peut être exécuté, vous permettant de créer une application (ou une bibliothèque à utiliser avec des applications) est le seul moyen réaliste de prendre en charge de nombreuses combinaisons de ces composants comme un "bon" élément logiciel. Bien sûr, les licences telles que la GPL exigent que le code source soit disponible - ainsi, même si le logiciel ne fonctionne pas correctement, il est généralement possible (bien qu'il puisse être difficile de comprendre ce qui ne va pas et de le réparer) pour l'utilisateur ou un tiers à plonger dedans et à le corriger même si le créateur n'existera pas / ne pourra plus exister pour le faire.

Distribuer un logiciel sous forme de code source permet également de vérifier de manière indépendante que le logiciel fait ce qu'il prétend et ne fait pas quelque chose de méchant à la place ou aussi bien - ce qui, malgré la réduction de la confiance que l'on doit avoir envers le créateur, l'améliore réellement!


8

Premièrement, votre question est basée sur une prémisse erronée. Les programmes sont distribués en format compilé!

La méthode normale pour installer un logiciel sur Ubuntu, comme sur la plupart des autres distributions Linux, et plus généralement sur la plupart des variantes Unix, consiste à installer un paquet. Sous Ubuntu, vous ouvrez le centre logiciel ou un autre gestionnaire de paquets et parcourez les logiciels disponibles. Lorsque vous sélectionnez un package pour l'installation, les fichiers binaires (si le package contient un programme) sont téléchargés et installés sur votre ordinateur.

Par défaut, le gestionnaire de paquets vous propose des paquets créés par les responsables de la distribution. Vous pouvez également trouver des sources tierces de paquets; Ubuntu propose PPA comme moyen standardisé pour les tiers de proposer des packages.

Le téléchargement du logiciel de l'auteur sous forme compilée est un dernier recours. Vous ne devez le faire que si le logiciel n’est pas assez populaire pour être empaqueté ou si vous avez absolument besoin de la dernière version qui n’a pas été empaquetée. La plupart des gens n'ont jamais besoin de faire ça.

Lorsqu'un logiciel n'est pas packagé pour une distribution, il est souvent distribué sous forme source plutôt que sous forme binaire. Cela se produit souvent dans le monde Linux pour deux raisons principales, mais rarement dans le monde Windows. Une des raisons est que la proportion de programmes open source sous Linux est beaucoup plus élevée. Évidemment, si le code source d'un programme n'est pas disponible, la seule forme de distribution est un fichier binaire. L'autre raison est que le monde Linux est beaucoup plus diversifié. Différents fichiers binaires sont nécessaires pour chaque ensemble de versions de bibliothèque incompatibles, ce qui signifie souvent des fichiers binaires différents pour chaque version de chaque distribution. Windows "résout" cela en demandant à chaque auteur de paquet de distribuer les bibliothèques qu'il utilise avec le programme (conséquence: votre ordinateur stocke plusieurs copies de chaque bibliothèque, une par programme qui l'utilise; si un bogue est corrigé dans une bibliothèque, chaque programme qui l’utilise doit envoyer une mise à jour), et en ne publiant une nouvelle version du système d’exploitation que tous les trois ans environ. Unix a beaucoup plus de diversité et des habitudes de résolution de bogues bien plus rapides, et résout les problèmes de distribution des bibliothèques en construisant différents binaires pour différentes distributions.


5

Linux fonctionne sur plusieurs plates-formes de processeur. Si vous distribuiez des fichiers ELF (ou tout autre type d’exécutable brut), certaines versions de Linux ne pourraient peut-être pas exécuter le logiciel. Dans l’esprit de rendre les logiciels aussi largement disponibles que possible, l’utilisation du code source est préférable. Par exemple, Linux s'exécute sur les processeurs Sparc, Intel, AMD, ARM et autres.

Si le fichier ELF ciblait spécifiquement les processeurs Intel, par exemple, aucun autre type de matériel ne pourrait exécuter le logiciel. ELF est indépendant de la plate-forme, mais le code qu'il héberge doit être conforme au code machine de la plate-forme. Vous remarquerez combien de distributions ont des paquets similaires (par exemple, les paquets _386 et _586 quand il supporte des processeurs différents) - vous devez installer le fichier ELF correct pour obtenir le bon fonctionnement.

De même, si je décide de créer une version Linux personnalisée qui utilise différentes interruptions, lieurs, etc., il me faut tout de même le code source pour le compiler. Même si le code source ne contient pas d'instructions de construction spécifiques à chaque plate - forme, chaque plate - forme est différente et ne peut pas exécuter un ELF à partir d'un système différent.


C’est exactement pourquoi vous exécuterez probablement Firefox 32 bits, comme de nombreux autres programmes sur un système d’exploitation Windows "64 bits", tandis que Linux 64 bits exécute généralement une application 64 bits.
mchid

5

La raison initiale de la distribution en tant que source était certainement la diversité des plates-formes; la communauté Linux a poursuivi cette méthodologie à la fois pour cela et pour de nouvelles raisons, partiellement politiques.

Contrairement à Windows, par exemple, Linux n’a jamais pris la peine de maintenir une interface ABI (interface binaire d’application) stable sur de longues périodes, ce qui a permis d’innover sur des aspects tels que les formats exécutables, les API de bibliothèque et la prise en charge de nouvelles plates-formes matérielles. important.

Les systèmes d’exploitation commerciaux assurent la compatibilité à long terme des applications en étant très disciplinés en matière d’innovation; EN OUTRE, une nouvelle fonctionnalité / interface logicielle doit toujours être ajoutée à une ancienne - nécessitant le maintien de deux éléments, et le coût de tout changement après la publication doit être considéré comme très élevé. Vous pouvez également accepter l'obsolescence programmée des applications avec quiconque écrit un logiciel pour votre système d'exploitation (ceci ne fait pas allusion à MS, mais à un autre fournisseur de système d'exploitation).

Obtenir une plate-forme stable à long terme pour les logiciels distribués sous forme binaire uniquement (en dehors d'une distribution Linux donnée) serait même considéré comme indésirable par certains éléments de la communauté Linux. En tant qu'utilisateur sans excuse des deux plates-formes, je ne dis pas que c'est bon ou mauvais; c'est comme ça.


4

Dans de nombreux cas (du moins dans le monde * nix), le code source est la version la plus portable du logiciel. Disposer de la source garantit que le logiciel partagé fonctionnera sur toutes les plates-formes susceptibles de la prendre en charge (ce qui dans de nombreux cas signifie simplement compatible avec POSIX). La publication des fichiers binaires ne garantit que la compatibilité avec les plates-formes (logicielles et matérielles) pour lesquelles ces fichiers binaires sont publiés.

Considérez que sur Windows, les fichiers binaires sont la forme la plus pratique et la plus portable pour le partage de logiciels. Étant donné que la compilation des sources ne fait pas partie du modèle habituel de distribution de logiciels Windows, Microsoft a déployé des efforts considérables au fil des ans pour garantir le fonctionnement des fichiers binaires sur plusieurs versions de leur système d'exploitation: http://www.joelonsoftware.com/articles/APIWar.html


5
Windows dépend également de l'architecture sous-jacente. Les applications Windows compatibles ARM ne fonctionnent pas sur des ordinateurs portables, des ordinateurs de bureau, etc. C’est la principale raison pour laquelle Linux supporte beaucoup mieux le matériel - car le code est écrit pour être compilé sur toute plate-forme dotée d’une implémentation Linux saine, alors que Windows dépend des types de matériel connus présents.
Phyrfox

Si vous construisez Windows / x86, vous couvrez 95% de la compatibilité binaire. C'est plutôt bien. Tandis que Linux / x86 est de plus en plus répandu, nous venons d’un monde où vous aviez une variété de grands noms avec leur propre architecture de processeur spéciale et leur variante Unix - qui n’était pas compatible binaire.
Sobrique

@Sobrique Où avez-vous obtenu ce chiffre de 95%? La dernière fois que j'ai regardé, il y avait 4 processeurs ARM pour chaque 1 x86. C'était il y a quelques années, avant que tout le monde ne commence à utiliser des téléphones intelligents dotés de processeurs ARM. Donc, si nous supposons qu’il n’ya pas d’autre processeur, cela représente 20%.
ctrl-alt-delor

3

La plupart des logiciels Linux sont des logiciels libres. En distribuant le code source avec des instructions de compilation plutôt que des fichiers binaires, vous avez la possibilité de consulter ou même de modifier le code source avant de le compiler. De cette façon, vous pouvez être très sûr de ce que le programme fait réellement et qu'il n'est pas nocif.


0

La principale raison pour laquelle je n'aime pas personnellement obtenir un exécutable d'un programme est parce que j'aime d'abord vérifier ce que fait le code source (principalement parce que j'aime regarder le code des autres), mais j'en connais plusieurs autres. qui vérifie également le code source pour le code malveillant.


0

Beaucoup de réponses ont indiqué que dans la plupart des cas, les logiciels sont distribués sous un format compilé. Je suis d'accord avec cette hypothèse. Néanmoins, je vois un cas où distribuer un logiciel par sa source est préférable à le distribuer au format compilé.

Je ne suis pas sûr que ce soit vrai, mais j'imagine qu'au début d'Internet, les bandes passantes du réseau étant mauvaises, il pouvait parfois être plus rapide de distribuer un logiciel par sa source que sous un format compilé. Comme les sources de code ne sont que du texte brut, il est souvent plus petit que le logiciel compilé. Ainsi, distribuer un logiciel avec code source semble être un meilleur moyen de le partager, à condition que les utilisateurs soient en mesure de le compiler.


0

Outre le fait que de nombreux systèmes Unix fonctionnent sur de nombreuses plates-formes, il suffit de considérer les problèmes rencontrés par les logiciels Windows à partir de ce mode de distribution, même s'ils ne doivent réellement se préoccuper que d'une version de Windows et d'une plate-forme (le PC). )

Même avec juste le souci du PC, il existe encore deux architectures: 32 bits et 64 bits. Si vous remarquez, la grande majorité des logiciels Windows ignorent simplement les logiciels 64 bits et expédient uniquement les logiciels 32 bits, vous laissant avec un logiciel sous-optimal si vous avez un système 64 bits. Ensuite, il y a des bibliothèques. Un éditeur de logiciel ne veut pas que vous rencontriez des erreurs étranges lorsque vous n’avez pas la bibliothèque appropriée déjà installée lorsque vous n’exécutez pas son programme. ) Un deuxième programme fait la même chose, mais avec une version différente de la bibliothèque. Dans le meilleur des cas, le programme B contient une version plus récente de la bibliothèque qui est rétro-compatible, donc si vous installez le programme B aprèsprogramme A, les choses fonctionnent, mais les installer dans l’ordre inverse vous laisse avec l’ancienne version de la bibliothèque et le programme B tombe en panne. Bien souvent, le fournisseur de la bibliothèque apporte des modifications qui ne sont pas compatibles avec les versions antérieures et ne change pas le nom de la bibliothèque. Ainsi, quel que soit l'ordre dans lequel vous installez les deux programmes, le premier se cassera. Ceci s'appelle "enfer de dll".

Malheureusement, pour éviter cela, la plupart des logiciels Windows ont regroupé toutes leurs bibliothèques dans leur propre répertoire de programmes plutôt que dans un répertoire partagé. Chaque programme possède donc toutes ses propres bibliothèques privées et ne se partage jamais entre elles, ce qui annihile l'ensemble. point de dll en premier lieu et vous finissez par utiliser beaucoup plus de RAM et d’espace disque et de temps pour télécharger toutes les bibliothèques dupliquées.

C'est la raison pour laquelle les logiciels open source sont publiés sous forme de source et que les fournisseurs de systèmes d'exploitation ont mis au point des gestionnaires de paquets qui résolvent les problèmes de dépendance et téléchargent uniquement les fichiers binaires précompilés dont vous avez réellement besoin, sans dupliquer les bibliothèques. Cela tient également compte du fait qu'il existe de nombreux systèmes Unix différents qui fonctionnent sur de nombreuses plates-formes différentes.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.