Une taille ne convient pas à tous: pourquoi le logiciel n'est pas universellement compatible

Le logiciel est le même sur n'importe quel système d'exploitation, non? Faux. Il peut sembler la même chose et fonctionner de la même façon, mais c'est différent dans les coulisses.

Le logiciel est le même sur n'importe quel système d'exploitation, non?  Faux.  Il peut sembler la même chose et fonctionner de la même façon, mais c'est différent dans les coulisses.
Publicité

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

Sauf que votre nouveau portable Linux brillant n'est pas compatible avec votre package d'installation de Windows. Que diriez-vous de votre tablette Android? iPhone? PS4? Pourquoi ne pouvez-vous pas prendre ce logiciel et l'utiliser où vous voulez? Examinons quelques obstacles au rêve de «acheter une fois, courir n'importe où».

Développement de logiciels et architecture OS

Comprendre pourquoi le logiciel ne fonctionne pas à travers les systèmes d'exploitation nécessite un peu de connaissance (juste un peu, je le promets) de la façon dont le logiciel est fabriqué.

Le processus de développement logiciel

Dans un flux de développement logiciel très basique pour le bureau, le serveur et le mobile (pas de programmation Web ou de développement Web: quelle différence?) Programmation ou développement Web: quelle différence? Vous pourriez penser que les programmeurs d'application 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 va:

  1. Tapez du code dans un ou plusieurs fichiers.
  2. Compilez le code en quelque chose que l'ordinateur peut exécuter.
  3. Testez pour vous assurer que le programme fonctionne comme prévu.
  4. Emballer et distribuer / déployer le logiciel.

logiciel os de compatibilité dev processus

C'est une combinaison des première et deuxième étapes qui nous concerne ici. Le processus de compilation de logiciels, ou de 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.

OS Architecture

Un point important à comprendre est qu'un système d'exploitation n'est pas une entité unique. Au contraire, il est constitué de couches de logiciels.

Noyaux du système d'exploitation

Le noyau d'un système d' exploitation 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 sur le disque dur, ou dessiner une fenêtre sur l'écran. Il coordonne fondamentalement toutes les informations (qu'il s'agisse de données stockées, de calculs ou d'entrées utilisateur) entre le matériel et divers logiciels. Le noyau met toutes ces fonctionnalités à la disposition des logiciels via des appels système .

logiciel os compatibilité noyau noyau
Crédit d'image: Wikimedia Commons

Le noyau de chaque système d'exploitation mettra en œuvre les appels système différemment, en fonction de ceux qui sont disponibles, de ce qu'ils sont appelés 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 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 à fournir ou les deux sous Windows. Cet appel exact peut même ne pas être là du tout.

Bibliothèques système

Dans de nombreux cas, le logiciel n'appelle pas directement au noyau. Au lieu de cela, il appelle des bibliothèques système ou 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 lie simplement à une bibliothèque système et utilise une fonction existante. La bibliothèque GLibC pour Linux en est un excellent exemple, de même que les fichiers .DLL de l'API Win32 ou le contenu d'un répertoire Mac / System / Library. Comment accéder au dossier de la bibliothèque OS X & Pourquoi c'est pratique Comment accéder à la bibliothèque OS X Dossier et pourquoi c'est pratique La 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 logicielles de compatibilité logicielle
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 des appels de fonction à ces bibliothèques, qui gèrent beaucoup de 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 OS s'attend à ce que les fichiers qu'il exécute suivent un format de fichier binaire particulier Tout ce que vous devez savoir sur les formats de fichiers et leurs propriétés Tout ce que vous devez savoir sur les formats de fichiers et leurs propriétés Nous utilisons le fichier word indifféremment: musique, image, tableur, 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é dans l'image ci-dessous.

logiciel OS compatibilité elf

L' interface binaire d'application (ABI) indiquée est d'une importance particulière. Une combinaison des appels disponibles à partir du processeur, du noyau et des libraires système, un ABI est similaire à une interface de programmation d'application (API) en ce sens qu'il définit comment deux programmes communiquent entre eux. Mais l'API est quelque chose que les programmeurs (humains) utilisent dans le code source pour indiquer que deux logiciels doivent se parler. L'ABI est ce qui leur permet réellement de le faire une fois que le logiciel est 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 OS.

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 de toute bibliothèque système standard. Mais parfois, un système d'exploitation en implémentera plus d'un. FreeBSD supporte par exemple les binaires Linux, car il fournit un ABI Linux en tant que complément au noyau FreeBSD (au lieu du noyau Linux). Ceci est différent des programmes virtualizatiton Qu'est-ce qu'une machine virtuelle? Qu'est-ce qu'une machine virtuelle? Les machines virtuelles vous permettent d'exécuter d'autres systèmes d'exploitation dans votre système d'exploitation actuel, mais pourquoi cela est-il important? Quels sont les avantages et inconvénients? Lire plus comme VMWare ou VirtualBox, qui utilisent un logiciel 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 ait récemment vu la valeur Ubuntu est maintenant disponible sur le Windows Store Ubuntu est maintenant disponible sur le Windows Store Windows Insiders peut maintenant télécharger et installer Ubuntu sur Windows 10. Cela met Linux et Windows ensemble dans une union malsaine peu ont jamais imaginé qu'ils vivraient assez longtemps pour témoigner. 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 seul et unique 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 tourner sur Linux sans problèmes. Comment est-ce possible?

Étais-je allongé jusqu'à maintenant?

En fait, il y a une catégorie de logiciels qui ressemble à la surface comme si elle "court partout". Vous pouvez télécharger et exécuter sur n'importe quelle plate-forme supportée - le mot clé étant "supporté". En fait, vous téléchargez le le code source de l'application, tandis qu'une autre application (l' interpréteur ) est en quelque sorte l'exécution directe du code source en temps réel. C'est quelque chose d'une simplification excessive, alors regardons exactement comment cela fonctionne avec quelques langues.

Java

Lors de la première publication de Java, la promesse était (littéralement) «écrire une fois, exécuter n'importe où». L'idée était de créer des applications en utilisant des fonctions Java pour enregistrer des fichiers, effectuer des calculs ou créer une fenêtre d'application. Ensuite, un environnement Java Runtime Enviornment (JRE) pour chaque plate-forme informatique supportée exécuterait le code et les traduirait en fonctions natives du système d'exploitation. L'astuce à Java, alors, est qu'il ne fonctionne pas "directement" sur le système d'exploitation. Il fonctionne dans une partie du JRE appelée Java Virtual Machine 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 s'inquiéter de la façon de le faire. L'image ci-dessous montre cela en action, où Java Desktop Application Framework de JIDE Software affiche la même application pour Mac (en haut), Windows (milieu gauche), «Java pur» (milieu-droit) et Linux (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 lieu de cela, le compilateur Java les rendra en "bytecode". Vous pouvez considérer bytecode comme un programme semi-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 fonctionner. Lorsque vous le lancez réellement, la JVM va "faire le reste" pour s'adapter aux fonctions particulières du système d'exploitation hôte.

Python

Un langage interprété populaire est Python 5 Raisons pour lesquelles la programmation Python n'est pas inutile 5 Raisons pour lesquelles la programmation Python n'est pas inutile Python - Vous l'aimez ou vous le détestez. Vous pourriez même balancer d'un bout à l'autre comme un pendule. Peu importe, Python est un langage difficile à ambiver. Lire la suite . Lorsque vous exécutez un script Python, l'interpréteur Python traduit le code en instructions pour le système d'exploitation. Il peut également fonctionner de la même manière que Java: lorsque vous "importez" du code depuis l'extérieur de votre application, il est compilé en bytecode la première fois qu'il est exécuté. Ensuite, l'interpréteur saura si, lors des exécutions suivantes, le code original a changé, à quel point il le recompilera en nouveau bytecode.

Un sous-produit cool 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émarrerez l'interpréteur, et vous pourrez exécuter du code et voir les résultats immédiatement.

logiciel os compatibilité python interpreter

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 et collez-la dans un fichier script (beaucoup plus efficace que le cycle "code-compile-test" les programmeurs de langage non-interprétés doivent faire).

Même lorsque le logiciel est le même, il est probablement pas

Malheureusement pour les utilisateurs, l'industrie de la technologie n'a pas développé un format vraiment "universel". Et cela pourrait ne jamais le faire. L'introduction de ces types de normes aboutit souvent à une solution du «moindre dénominateur commun», avec des concessions dans le but d'obtenir l'approbation de tous.

Qu'est-ce que tu penses? Préféreriez-vous avoir un logiciel universellement compatible, même si cela signifiait que ce n'était pas aussi bon? Ou êtes-vous d'accord avec le système d'exploitation que vous utilisez, et ne vous intéressez pas aux applications des autres plateformes? Faites-nous savoir ci-dessous dans les commentaires!

Crédits image: Masterchief_Productions / Shutterstock

In this article