Une seule taille ne convient pas à tous Pourquoi le logiciel n'est pas universellement compatible
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 les diffuser également.
Sauf que votre tout nouvel ordinateur portable Linux n'est pas compatible avec votre package d'installation Windows. Que diriez-vous de votre tablette Android? iPhone? PS4? Pourquoi ne pouvez-vous pas simplement utiliser ce logiciel et l’utiliser où vous le souhaitez? Explorons différentes barrières au rêve de “acheter une fois, courir n'importe où.”
Développement logiciel et architecture de système d'exploitation
Comprendre pourquoi les logiciels ne fonctionnent pas sur tous les systèmes d'exploitation nécessite une petite connaissance (juste une petite promesse) de la manière dont les logiciels sont fabriqués..
Le processus de développement logiciel
Dans un flux de développement logiciel très basique pour les ordinateurs de bureau, les serveurs et les mobiles (c'est-à-dire pas la programmation Web par rapport au développement Web: quelle est la différence? Programmation par rapport au développement Web: quelle différence? Vous pourriez penser que les programmeurs d'applications et les développeurs Web font le même travail , mais c’est loin de la vérité. Voici les principales différences entre les programmeurs et les développeurs Web.
- Tapez un peu code dans un ou plusieurs fichiers.
- Compiler le code dans quelque chose que l'ordinateur peut exécuter.
- Tester pour vous assurer que le programme fonctionne comme prévu.
- Emballer et distribuer / déployer les logiciels.
C’est une combinaison des première et deuxième étapes qui nous concerne ici. Le processus de compiler logiciel, ou le convertir en code et en 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. Plutôt, il est composé 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 d'entrées utilisateur) entre du matériel et divers logiciels. Le noyau met toutes ces fonctionnalités à la disposition du logiciel via appels système.
Le noyau de chaque système d'exploitation implémente les appels système différemment, en termes de noms disponibles, de noms et d'options. En conséquence, les logiciels doivent prendre en compte les appels système pris en charge par le noyau de chaque système d'exploitation ciblé. L'appel système que vous utilisez pour envoyer des données au processeur graphique sous Linux peut porter 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 le noyau. Au lieu de cela, il appelle à 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 de fonction pour le faire. Au lieu de cela, simplement Liens vers une bibliothèque système et utilise une fonction existante. La bibliothèque GLibC pour Linux est un bon exemple, tout comme 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 et pourquoi est-il 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 Library 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 .
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 une grande partie des 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 dotés de 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 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 fichier et leurs propriétés. Tout ce que vous devez savoir sur les formats de fichier et leurs propriétés. Nous utilisons le fichier Word indifféremment: musique, image, feuille de calcul, diaporama , etc. Mais qu'est-ce qui fait qu'un fichier est un "fichier"? 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..
le interface binaire d'application (ABI) montré capable est d'une importance particulière. Une combinaison des appels disponibles dans les librairies de processeur, de noyau et de système, une ABI est similaire à une interface de programmation d'application (API) en ce sens qu'il définit comment deux programmes communiquent l'un avec l'autre. Mais l’API est quelque chose que les programmeurs (humains) utilisent en code source pour indiquer deux logiciels devrait Parler l'un à l'autre. L’ABI est ce qui leur permet réellement de le faire une fois le logiciel compilé et exécuté. Chaque système d'exploitation implémente une ABI particulière, qui peut ou non changer d'une version à l'autre du même système d'exploitation..
En général, les systèmes d'exploitation implémentent leur propre ABI, déterminée par une combinaison du type de processeur, du noyau et de toutes les bibliothèques système standard. Mais parfois, un système d'exploitation implémentera plus d'un. Par exemple, FreeBSD prend en charge les fichiers binaires Linux, car il fournit une ABI Linux en tant qu’add-on au noyau FreeBSD (au lieu du noyau Linux). Ceci est différent des programmes de virtualisation Qu'est-ce qu'une machine virtuelle? Tout ce que vous devez savoir Qu'est-ce qu'une machine virtuelle? Tout ce que vous devez savoir Les machines virtuelles vous permettent d'exécuter d'autres systèmes d'exploitation sur votre ordinateur actuel. Voici ce que vous devriez savoir à leur sujet. En lire plus, tels que 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 demande beaucoup plus de maintenance. C’est pourquoi elle est rare, bien que Microsoft ait récemment constaté que Ubuntu est désormais disponible sur le Windows Store Ubuntu est maintenant disponible sur le Windows Store Windows Insiders peut désormais télécharger et installer Ubuntu sur Windows 10. Cela rassemble Linux et Windows dans une union impie peu ont jamais imaginé qu'ils vivraient assez longtemps pour être témoins. Lire plus 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 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'à maintenant?
En fin de compte, il existe une catégorie de logiciels qui ressemble à la surface “court partout.” Vous pouvez le télécharger et l’exécuter sur n’importe quelle plate-forme prise en charge - le mot clé étant “prise en charge.” En fait, vous téléchargez le code source de l’application, alors qu’une autre application (la interprète) exécute le code source directement en temps réel. C’est un peu une simplification excessive, regardons donc comment cela fonctionne avec quelques langues.
Java
Quand Java a été publié pour la première fois, c'était promis (littéralement) “écrivez une fois, exécutez partout.” L'idée était de créer des applications à l'aide de fonctions Java pour enregistrer des fichiers, effectuer des calculs ou créer une fenêtre d'application. Puis un Environnement d'exécution Java (JRE) Pour chaque plate-forme informatique prise en charge, le code sera exécuté et traduit en fonctions OS natives. Le truc pour Java est qu’il ne fonctionne pas “directement” sur le système d'exploitation. Il s’exécute dans une partie de la JRE appelée 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 indiquez à Java ce que vous voulez faire et laissez la JVM de votre système se demander comment le faire. La photo ci-dessous montre cela en action, où Java Desktop Application Framework de JIDE Software affiche la même application pour Mac (en haut) et Windows (au centre, à gauche)., “Java pur” (centre-droit) et Linux (en bas).
Les programmes Java ne font pas précisément “compiler” eux-mêmes en temps réel. Au contraire, le compilateur Java les rendra en “bytecode.” Vous pouvez considérer le code intermédiaire 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 s'exécutera. Lorsque vous le lancez, la machine virtuelle Java “cuire le reste du chemin” 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 pouvez même basculer 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 traduit le code en instructions pour le système d'exploitation. Il peut également fonctionner de manière similaire à Java: lorsque vous “importation” code provenant de l'extérieur de votre application, il est compilé en bytecode lors de sa première exécution. Ensuite, l’interprète saura si, lors des exécutions suivantes, le code original a été modifié, il le recompilera ensuite pour le transformer en nouveau bytecode..
Un sous-produit cool de cette “à la demande” En cours d'exécution, vous pouvez utiliser l'interprète pour développer vos scripts de manière interactive. En tapant simplement “python” Sur la ligne de commande, vous lancerez l'interpréteur, vous pourrez exécuter du code et voir immédiatement les résultats..
Cela signifie que les développeurs peuvent jouer et peaufiner les choses “vivre.” Ensuite, une fois qu'une ligne de code fait ce qu'elle veut, copiez-la et collez-la dans un fichier de script (ce qui est beaucoup plus efficace que le “code-compiler-test” cycle que les programmeurs non interprétés doivent faire).
Même lorsque le logiciel est le même, ce n'est probablement pas
Malheureusement pour les utilisateurs, le secteur de la technologie n’a pas vraiment développé “universel” format. Et cela peut ne jamais le faire. L’introduction de ces types de normes aboutit souvent à un “le plus petit dénominateur commun” solution, avec des concessions dans le but d'obtenir l'approbation de tous.
Qu'est-ce que tu penses? Préféreriez-vous un logiciel compatible universellement, 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 d'image: Masterchief_Productions / Shutterstock
En savoir plus sur: Système de fichiers, Installer le logiciel, Systèmes d'exploitation.