Publicité

Vous venez de télécharger une mise à jour riche en fonctionnalités sur votre application open source préférée. Tout fonctionne bien et vous l'utilisez sur vos autres appareils - il est donc temps de le déployer sur ceux-ci également.

Sauf que votre nouvel ordinateur portable Linux brillant n'est pas compatible avec votre package d'installation Windows. Et votre tablette Android? iPhone? PS4? Pourquoi ne pouvez-vous pas simplement emporter ce logiciel et l'utiliser où vous le souhaitez? Examinons quelques barrières différentes au rêve de «acheter une fois, courir n'importe où».

Développement logiciel et architecture OS

Pour comprendre pourquoi les logiciels ne fonctionnent pas sur tous les systèmes d'exploitation, il faut un peu (juste un peu, je le promets) une connaissance de la façon dont les logiciels sont créés.

Le processus de développement logiciel

Dans un flux de développement logiciel très basique pour ordinateur de bureau, serveur et mobile (c.-à-d. pas web Programmation vs Développement Web: quelle est la différence?

Vous pourriez penser que les programmeurs d'applications et les développeurs Web font le même travail, mais c'est loin d'être la vérité. Voici les principales différences entre les programmeurs et les développeurs Web. Lire la suite ), un programmeur:

  1. Tapez certains code dans un ou plusieurs fichiers.
  2. Compiler le code en quelque chose que l'ordinateur peut exécuter.
  3. Tester pour vous assurer que le programme fonctionne comme prévu.
  4. Empaqueter et distribuer / déployer les logiciels.
processus de développement de la compatibilité des logiciels

C'est une combinaison des première et deuxième étapes qui nous concerne ici. Le processus de compilation logiciel, ou le transformer du code en ceux et les zéros qu'un ordinateur comprend (langage machine) est complexe. Nous n'entrerons pas dans les détails, mais il est utile de comprendre à un niveau élevé ce qui se passe.

Architecture du système d'exploitation

Un point important à comprendre est qu'un système d'exploitation n'est pas une entité unique. Il s'agit plutôt de couches de logiciels.

Noyaux de système d'exploitation

Un système d'exploitation noyau est responsable de la communication avec le matériel de l'ordinateur. Le logiciel communique ses commandes au noyau, qui à son tour envoie des commandes au matériel pour (par exemple) lire un fichier à partir du disque dur ou dessiner une fenêtre à l'écran. Il coordonne essentiellement toutes les informations (qu'il s'agisse de données stockées, de calculs ou de saisie utilisateur) entre le matériel et divers logiciels. Le noyau met toutes ces fonctionnalités à la disposition du logiciel via appels système.

bases du noyau de compatibilité des logiciels
Crédit d'image: Wikimedia Commons

Le noyau de chaque système d'exploitation implémentera les appels système différemment, en fonction de ceux disponibles, de leur nom ou des options qu'ils prennent. Par conséquent, le logiciel doit prendre en compte les appels système pris en charge par le noyau de chaque système d'exploitation qu'il cible. L'appel système que vous utilisez pour envoyer des données au GPU sous Linux peut avoir un nom différent, une liste d'informations que vous devez fournir, ou les deux sous Windows. Cet appel exact n'est peut-être même pas là du tout.

Bibliothèques système

Dans de nombreux cas, le logiciel n'appelle pas directement le noyau. Au lieu de cela, il appelle à bibliothèques systèmeou des collections de fonctions de base. Les bibliothèques existent donc (par exemple) chaque programme qui enregistre des fichiers sur le disque dur n'a pas besoin d'écrire une fonction pour le faire. Au lieu de cela, il suffit Liens vers une bibliothèque système et utilise une fonction existante. La bibliothèque GLibC pour Linux est un excellent exemple, tout comme les fichiers .DLL dans l'API Win32 ou le contenu du répertoire / System / Library d'un Mac Comment accéder au dossier de la bibliothèque OS X et pourquoi c'est pratiqueLa plupart des dossiers de la bibliothèque OS X sont mieux laissés seuls, mais il est utile de connaître votre chemin dans et autour de la bibliothèque utilisateur. Lire la suite .

bibliothèques de système de compatibilité du logiciel os
Crédit d'image: ScottXW via Wikimedia Commons

Les bibliothèques système agissent comme une sorte de traducteur entre les applications et le noyau pour les tâches de routine. Les applications font appels de fonction à ces bibliothèques, qui gèrent de nombreux détails de bas niveau. Ils peuvent également faire des appels système au noyau pour plus de commodité. Comme vous l'avez peut-être deviné, cela signifie que ces bibliothèques sont écrites pour un noyau particulier et ne peuvent donc pas être utilisées sur des systèmes d'exploitation avec des noyaux différents.

En-têtes d'exécution du système d'exploitation

Le dernier obstacle au logiciel universel est le format des fichiers exécutables pour les systèmes d'exploitation. Un système d'exploitation attend des fichiers qu'il exécute qu'ils suivent un format de fichier binaire Tout ce que vous devez savoir sur les formats de fichiers et leurs propriétésNous utilisons le fichier Word de manière interchangeable: musique, image, feuille de calcul, diaporama, etc. Mais qu'est-ce qui fait qu'un fichier est un «fichier» de toute façon? Essayons de comprendre cette partie fondamentale de l'informatique. Lire la suite . Par exemple, les fichiers ELF (Executable and Linkable Format) qui s'exécutent sur des systèmes d'exploitation tels que Linux et FreeBSD doivent spécifier certaines propriétés du fichier dans certains octets, comme indiqué ci-dessous image.

en-tête elf de compatibilité du logiciel os

le interface binaire d'application (ABI) montré capable est d'une importance particulière. Une combinaison des appels disponibles à partir du processeur, du noyau et des bibliothèques système, un ABI est similaire à un interface de programmation d'application (API) en ce qu'il définit la façon dont deux programmes communiquent entre eux. Mais l'API est quelque chose utilisé par les programmeurs (humains) dans le code source pour indiquer deux logiciels devrait Parler l'un à l'autre. L'ABI est ce qui leur permet de le faire une fois le logiciel compilé et exécuté. Chaque système d'exploitation implémente un ABI particulier, qui peut ou non changer entre les versions de ce même système d'exploitation.

En général, les systèmes d'exploitation implémentent leur propre ABI, déterminé par une combinaison du type de processeur, du noyau et des bibliothèques système standard. Mais parfois, un système d'exploitation en implémentera plusieurs. FreeBSD prend en charge les binaires Linux, par exemple, car il fournit un ABI Linux comme module complémentaire au noyau FreeBSD (au lieu du noyau Linux). C'est différent de programmes de virtualisation Qu'est-ce qu'une machine virtuelle? Tout ce que tu as besoin de savoirLes machines virtuelles vous permettent d'exécuter d'autres systèmes d'exploitation sur votre ordinateur actuel. Voici ce que vous devez savoir à leur sujet. Lire la suite tels que VMWare ou VirtualBox, qui utilisent des logiciels pour simuler une machine entière (matériel et tout). En conséquence, ce type de compatibilité ABI est plus rapide, mais beaucoup plus d'efforts à maintenir. C’est pourquoi il est rare, bien que Microsoft a récemment vu la valeur Ubuntu est maintenant disponible sur le Windows StoreWindows Insiders peut désormais télécharger et installer Ubuntu sur Windows 10. Cela réunit Linux et Windows dans une union impie que peu de gens imaginaient qu'ils vivraient assez longtemps pour en être témoins. Lire la suite en le faisant.

Exception: logiciel interprété

Sur la base de ce qui précède, nous avons appris que les développeurs écrivent des logiciels pour un et un seul type de système cible. Sauf quand ils ne le font pas. Il existe de nombreuses applications que vous pouvez télécharger et exécuter sur un Mac, puis copier et exécuter sur Windows, et peut-être même copier à nouveau et exécuter sur Linux sans aucun problème. Comment est-ce possible?

Étais-je couché jusqu'à présent?

En fait, il existe une catégorie de logiciels qui ressemble à la surface, comme s'ils «fonctionnaient partout». Vous pouvez le télécharger et l'exécuter sur n'importe quel plate-forme prise en charge - le mot clé étant «pris en charge». En fait, vous téléchargez le code source de l'application, tandis qu'une autre application (le interprète) consiste en quelque sorte à exécuter le code source directement en temps réel. Il s'agit en quelque sorte d'une simplification excessive. Voyons donc exactement comment cela fonctionne avec quelques langues.

Java

Lorsque Java a été lancé pour la première fois, il était (littéralement) "écrit une fois, exécuté n'importe où". L'idée était de créer applications en utilisant des fonctions Java pour savoir comment enregistrer des fichiers, effectuer des calculs ou créer une application fenêtre. Puis un Environnement d'exécution Java (JRE) pour chaque plate-forme informatique prise en charge exécuterait le code et les traduirait en fonctions natives du système d'exploitation. L'astuce pour Java est donc qu'il ne s'exécute pas «directement» sur le système d'exploitation. Il s'exécute dans une partie du JRE appelée le Machine virtuelle Java et c'est ce qui fonctionne sur le système d'exploitation.

En insérant cette couche logicielle supplémentaire entre l'application et le système d'exploitation, Java vous permet de vous concentrer sur un ensemble de fonctions identiques sur tous les systèmes d'exploitation. Vous dites à Java ce que vous voulez faire et laissez la JVM de votre système se soucier de la façon de le faire. L'image ci-dessous montre cela en action, où Cadre d'application Java Desktop de JIDE Software affiche la même application pour Mac (en haut), Windows (au milieu à gauche), «Java pur» (au milieu à droite) et Linux (en bas).

logiciel os compatibilité jide jdaf
Crédit d'image: JIDE Software

Les programmes Java ne se «compilent» pas précisément en temps réel. Au contraire, le compilateur Java les rendra en «bytecode». Vous pouvez considérer le bytecode comme un programme à moitié cuit. Lorsque le développeur publie l'application, elle est compilée autant que possible sans savoir sur quel système d'exploitation elle va s'exécuter. Lorsque vous le lancez réellement, la JVM "la fait cuire le reste du chemin" pour s'adapter aux fonctions particulières du système d'exploitation hôte.

Python

Une langue interprétée populaire est Python 5 raisons pour lesquelles la programmation Python n'est pas inutilePython - Soit vous l'aimez, soit vous le détestez. Vous pourriez même vous balancer d'un bout à l'autre comme un pendule. Quoi qu'il en soit, Python est un langage sur lequel il est difficile d'être ambivalent. Lire la suite . Lorsque vous exécutez un script Python, l'interpréteur Python traduira le code en instructions pour le système d'exploitation. Il peut également fonctionner de manière similaire à Java: lorsque vous "importez" du code extérieur à votre application, il est compilé pour décoder le code la première fois qu'il est exécuté. L'interpréteur saura alors si, lors des exécutions suivantes, le code d'origine a changé, auquel cas il le recompilera en nouveau bytecode.

Un sous-produit intéressant de cette exécution «à la demande» est que vous pouvez utiliser l'interpréteur pour développer vos scripts de manière interactive. En tapant simplement "python" sur la ligne de commande, vous démarrez l'interpréteur, et vous pouvez exécuter du code et voir les résultats immédiatement.

interpréteur python de compatibilité des logiciels

Cela signifie que les développeurs peuvent jouer et modifier les choses «en direct». Ensuite, une fois qu'une ligne de code fait ce qu'elle veut, copiez-la et collez-la dans un fichier de script (qui est beaucoup plus efficace que le cycle «code-compile-test» que doivent faire les programmeurs de langage non interprétés).

Même lorsque le logiciel est le même, ce n'est probablement pas

Malheureusement pour les utilisateurs, l'industrie de la technologie n'a pas développé un format vraiment «universel». Et cela ne le fera peut-être jamais. L’introduction de ces types de normes aboutit souvent à une solution de «dénominateur le moins commun», avec des concessions dans l’intérêt de l’approbation de tous.

Qu'est-ce que tu penses? Préféreriez-vous avoir un logiciel universellement compatible, même si cela signifiait qu'il n'était pas aussi bon? Ou êtes-vous d'accord avec le système d'exploitation que vous utilisez et n'avez aucun intérêt pour les applications d'autres plates-formes? Faites-nous savoir ci-dessous dans les commentaires!

Crédits image: Masterchief_Productions / Shutterstock

Aaron est au cœur de la technologie en tant qu'analyste commercial et chef de projet depuis quinze ans, et est un utilisateur fidèle d'Ubuntu depuis presque aussi longtemps (depuis le Breezy Badger). Ses intérêts incluent l'open source, les applications pour petites entreprises, l'intégration de Linux et Android et l'informatique en mode texte brut.