9
votes

Comment le portage entre Linux et Windows fonctionne-t-il?

Si un logiciel particulier est conçu pour être exécuté sur une plate-forme et le programmeur / entreprise / tout ce qui veut le porter à l'autre, qu'est-ce qui est fait exactement? Je veux dire, faites-ils simplement réécrire les références spécifiques à Linux ou à la fenêtre à l'équivalent de l'autre? Ou une réécriture complète est-elle nécessaire?

Il suffit d'essayer de comprendre ce qui le rend tellement prohibitif que tant de vendeurs majeurs ne portent pas leur logiciel à Linux (en réfléchissant spécifiquement à Adobe)

merci


1 commentaires

La réponse ne concerne pas toujours le coût.


8 Réponses :


6
votes

Il s'agit du point d'une boîte à outils multiples comme Qt ou GTK, ils fournissent une API de plate-forme-agnostique, qui déléguent une plate-forme de plate-forme que le programme est compilé.

Certaines entreprises n'utilisent pas une telle boîte à outils et écrivent leur propre (pour une raison quelconque - pourrait bien être liée à l'optimisation), ce qui signifie qu'ils ne peuvent pas simplement recompiler leur code pour un autre système d'exploitation.


0 commentaires

0
votes

Si le logiciel a été écrit pour un seul système d'exploitation, un nouveau remboursement est probable. La première étape consiste à déplacer absolument tout code spécifique à la plate-forme en une seule zone de la base de code; Cette zone devrait avoir peu ou pas de choses spécifiques à une application. Puis réécrivez cette partie isolée du code pour le nouveau système d'exploitation cible.

Bien sûr, cela glousse sur des implications extrêmement majeures. Par exemple, si votre première version a ciblé l'API Win32, tout code d'interface graphique sera fortement attaché à Windows et à maintenir tout espoir de préserver votre santé mentale, vous devrez déplacer tout ce code dans un cadre d'interface graphique à plate-forme. ou gtk.


0 commentaires

1
votes

Portage d'une pièce de logiciels qui n'a pas été fabriqué à la plate-forme - indépendante Upfront peut être une tâche énorme. Souvent, le code est profondément enraciné avec des API non portables, qu'il s'agisse de bibliothèques 3e parties ou d'OS. Si le fournisseur 3ème partie ne fournit pas l'API de la plate-forme que vous portez, vous êtes à peu forcer à une réécriture complète de cette fonctionnalité ou de trouver une autre tierce partie portable. Ceci seulement peut être terriblement coûteux.

Enfin, le logiciel de portage signifie également l'appuyer sur une autre plate-forme, ce qui signifie engager des spécialistes et la formation de la formation pour répondre à des requêtes plus complexes.

En fin de compte, un tel processus peut être très coûteux, car très peu de ventes supplémentaires. Malheureusement, la décision est facile: concentrer sur de nouvelles fonctionnalités sur votre plate-forme actuelle que vous connaissez que vos clients vont payer.


0 commentaires

0
votes

Sous Mono, vous pouvez écrire un programme C # Winforms qui fonctionne sur les deux plates-formes. Mais pour rendre cela possible, l'équipe mono a dû écrire sa propre bibliothèque Winforms qui duplique essentiellement toutes les fonctions de Winforms. Donc, il n'y a toujours pas de déjeuner gratuit.


0 commentaires

0
votes

La plupart des logiciels sont portables dans une certaine mesure. Dans le cas d'une application C - il y aura beaucoup de #Ifdefs dans la zone, à part des changements de chemin, etc.

La version Windows / Linux rarement du même logiciel ne partage pas une base de code commun - cela signifierait réellement qu'ils ne partagent qu'un nom commun. Il est toujours plus difficile de maintenir plus de codesbases, mais je pense que le problème réel des applications de portage a peu à voir avec le côté technique et beaucoup de côté. Linux a beaucoup moins d'utilisateurs que Windows / OSX, la plupart d'entre eux s'attendent à ce que tout soit libre comme dans la bière ou aussi déteste simplement les logiciels commerciaux sur certains motifs religieux.

Lorsque vous venez d'y penser - le logiciel le plus open source est multiplateform, quelle que soit la langue utilisée pour la mettre en œuvre. Cela parle d'elle-même ...

P.s. Disclaimer - Je suis un partisan passionné de logiciels libres et open source, je ne veux pas insulter quiconque - je partage juste mon point de vue sur le sujet.


0 commentaires

2
votes

Dans mon expérience, il y a trois principales raisons pour lesquelles il est prohibitif de prendre un grand programme existant sur une plate-forme et de le porter à un autre:

  1. Il a (pas nécessairement délibérément) largement utilisé une bibliothèque ou une API (souvent une interface graphique, mais il y a aussi beaucoup d'autres choses) qui ne sont pas disponibles pour ne pas exister sur l'autre plate-forme

  2. Il a inconnoisif de la dépendance sur des caractéristiques non standard ou des bizarreries du compilateur ou d'autres outils

  3. Il a été écrit par quelqu'un qui ne savait pas que vous avait d'utiliser une fonctionnalité bizarre pour que les éléments fonctionnent sur l'autre plate-forme (comme une bibliothèque Linux qui ne sombrit pas Avec la droite __ DeclSpec Directives dont vous avez besoin pour une bonne DLL Windows).

    Il est beaucoup plus facile d'écrire une application multi-plateformes si vous considérez qu'un objectif de conception du début, et j'ai trois recommandations spécifiques:

    • Utilisez Boost-Oodles de choses pratiques que vous pourriez habituellement obtenir des API et des bibliothèques spécifiques à la plate-forme, mais en utilisant Boost, vous obtenez une plate-forme inter-plate-forme.

    • Toutes vos programmes d'interface graphique à l'aide d'une bibliothèque multiplate-forme. Mon préféré ces jours-ci est Qt, mais il y a aussi d'autres dignes dignes.

    • Construire et tester chaque jour sur les deux plates-formes, ne permettez jamais au code de développer une dépendance sur une seule plate-forme et de la découvrir que trop tard.


0 commentaires

3
votes

Il existe également des bibliothèques disponibles sur cette facilité, au moins sur une zone spécifique, le port de Windows API appelle à Linux. Voir le Windows to Linux Porting Library .


0 commentaires

2
votes

Il existe de nombreuses raisons pour lesquelles il peut être très difficile de porter une application à une plate-forme différente, la plupart des interfaces utilisées par l'application utilise pour communiquer avec le système ne sont pas disponibles et il faut les mettre en œuvre sur leur Posséder, Port une bibliothèque Votre application dépend ou réécrire l'application, de sorte qu'elle utilise des fonctions alternatives. La plupart des langues d'aujourd'hui sont très portables entre les architectures matérielles et les systèmes d'exploitation, mais le problème concerne les bibliothèques, les appels système et les autres interfaces potentiellement autres que le système d'exploitation (ou la plate-forme) fournit. Être plus spécifique:

  • compilateurs peut différer dans leur configuration et leurs fonctions standard fournies. Sous Windows, le compilateur le plus populaire pour C / C ++ est Visual Studio, tandis que sur UNIX Il s'agit de GCC et de LLVM (en combinaison avec la bibliothèque standard GLIBC ou BSD LIBC). Ils attendent différents drapeaux, différentes formes de déclaration, produisent un format de fichier différent des exécutables et des bibliothèques partagées. Même si C et C ++ ont des bibliothèques standard, elles sont implémentées différemment sur toutes les plateformes. Certains systèmes ont pour objectif de rendre la compilation portable, telle que AutoTools, Cumake et Scons.

  • sur le dessus des bibliothèques standard Il existe des fonctions supplémentaires OS fournit. Sous Windows, ils sont couverts par Win32 API, sur des systèmes UNIX qui font partie de la norme POSIX, avec diverses extensions spécifiques GNU, BSD et Linux, et il existe également des appels de systèmes simples (l'interface de niveau la plus basse entre les applications et le système d'exploitation). . Les fonctions POSIX sont disponibles sous Windows via des systèmes tels que Cygwin et Mingw, la fonction API Win32 est disponible sur UNIX via le vin. Le problème est que ces implémentations ne sont pas complètes et souvent, il existe des différences mineures (mais importantes).

  • Communication avec le système de bureau (afin de faire une interface graphique) est effectué différemment. Sur Linux, cela pourrait être le système X Window (ainsi que les bibliothèques FreeSktop) ou Worthland, tandis que Windows a ses propres systèmes. Il existe des bibliothèques d'interface graphique qui essaient de fournir une interface abstraite pour ceux-ci, tels que QT, GTK, WXWidgets, EFL.

  • Autres services Le système d'exploitation fournit, tel que la communication réseau peut être mise en œuvre différemment. Sous Windows, de nombreuses applications utilisent des bibliothèques .NET, pour lesquelles il n'existe que des supports limités sur les systèmes UNIX. Certaines applications UNIX s'appuient sur des fonctionnalités spécifiques à Linux tels que SystemD, / Proc, KMS, CGroups, des espaces de noms. Cela limite la portabilité même entre systèmes UNIX (Linux, BSD Systems, Mac OS X, ...). Même les bibliothèques .NET ne sont pas très compatibles entre différentes versions et elles peuvent ne pas être disponibles sur une version plus ancienne de Windows ou sur des systèmes embarqués. Android et iOS ont des interfaces différentes entièrement.

  • Les applications Web sont généralement les plus portables, mais HTML5 est une norme en direct et de nombreuses interfaces ne peuvent pas encore être disponibles dans certains navigateurs / moteurs Web. Cela nécessite l'utilisation de polyfillés, mais elle est généralement beaucoup moins douloureuse que la situation avec des applications «indigènes».

    En raison de toutes ces limitations, le portage peut être un travail assez acharné et il est parfois plus facile de créer une nouvelle application à partir de zéro, soit spécifiquement pour l'autre plate-forme, en utilisant des bibliothèques / plates-formes d'abstraction croisées (telles que qt ou Java), ou comme une application Web (potentiellement groupée dans quelque chose comme les électrons). C'est une bonne idée de les utiliser depuis le début, mais de nombreux programmeurs choisissent de ne pas le faire, car les applications ont tendance à regarder et à se comporter différemment des applications "natives" sur la plate-forme, elles pourraient également être plus lentes et plus restreintes dans la manière dont ils interagissent avec le système d'exploitation.


0 commentaires