Portage d'UNIX vers Win32
Mise à jour : novembre 2007
Lorsque vous faites migrer des applications d'UNIX vers Windows, vous avez le choix entre plusieurs options :
utiliser des bibliothèques UNIX pour porter les applications d'UNIX vers Win32 ;
porter les applications d'UNIX vers Win32 en mode natif.
Exécution d'applications UNIX sous Windows à l'aide du sous-système POSIX
Bibliothèques UNIX
Une option généralement envisagée par les programmeurs UNIX consiste à utiliser des bibliothèques tierces de type UNIX pour compiler leur code UNIX comme un exécutable Win32. Plusieurs bibliothèques disponibles dans le commerce (et au moins une dans le domaine public) assurent cette fonctionnalité. Elle existe en tant qu'option dans certaines applications. Ces bibliothèques de portage présentent l'avantage de minimiser le travail de portage initial. Le principal inconvénient, pour un produit logiciel soumis à la concurrence, est que la version Win32 native d'une application sera normalement plus rapide et, inévitablement, plus riche en fonctionnalités. Il peut s'avérer difficile pour l'application de sortir de son shell UNIX si elle doit effectuer des appels Win32 afin de mieux exploiter la puissance de Windows.
La liste suivante indique les ressources Microsoft et tierces pour le portage et la prise en charge de la migration d'UNIX vers Visual C++ :
Repères de la migration UNIX
Le manuel UNIX Custom Application Migration Guide fournit une aide technique sur la migration du code de l'environnement UNIX vers l'environnement Win32.
https://go.microsoft.com/fwlink/?LinkId=95428
Le manuel Unix Migration Project Guide vient compléter le manuel UNIX Custom Application Migration Guide en fournissant une aide de haut niveau sur la migration de projets substantiels d'UNIX vers Win32. Ce guide fournit des conseils sur les problèmes à considérer à chaque étape de la migration du projet. Ce guide peut être téléchargé à partir du site suivant :
https://go.microsoft.com/fwlink/?linkid=20012
Services Microsoft Windows pour UNIX (SFU)
Services Microsoft Windows pour UNIX (SFU) fournit une plage complète de services multiplateformes pour intégrer Windows dans des environnements UNIX existants. Les services pour UNIX permettent le partage de fichiers, l'administration et l'accès à distance, la synchronisation de mot de passe, la gestion du répertoire commun, et offrent un ensemble d'utilitaires communs et un shell.
InteropSystems.com
http://www.interopsystems.com/
Un site tiers pour une société qui fournit le logiciel de prise en charge du portage UNIX vers Win32.
Site Web C++ Boost
http://boost.sourceforge.net/regression-logs/
http://boost.sourceforge.net/boost-build2/
Portage d'applications UNIX directement vers Win32
Une autre option consiste à porter les applications UNIX directement vers Win32. Avec les bibliothèques C/C++ ANSI et les bibliothèques du compilateur C disponibles dans le commerce, la plupart des appels système classiques sur lesquels s'appuient les applications UNIX sont disponibles dans les applications Win32.
Le modèle de sortie des applications stdione requiert aucune modification, puisque les API de console Win32 simulent le modèle stdio, et il existe des versions de curses qui utilisent les API de console Win32. Pour plus d'informations, consultez SetConsoleCursorPosition.
Les applications qui utilisent des sockets Berkeley nécessitent très peu de modifications pour fonctionner comme des applications Win32. L'interface Windows Sockets a été conçue pour garantir la portabilité avec les sockets BSD, moyennant des modifications mineures, indiquées dans les sections introductives de la spécification WinSock.
Windows prend en charge le RPC conforme à DCE, ce qui rend les applications basées sur RPC facilement utilisables. Consultez Fonctions RPC.
L'une des principales différences réside dans le modèle de processus. UNIX possède le processus fork, ce qui n'est pas le cas de Win32. Selon l'utilisation de fork et la base de code, vous pouvez employer deux API Win32 : CreateProcess et CreateThread. Une application UNIX qui duplique plusieurs copies d'elle-même peut être retravaillée dans Win32 de façon à avoir plusieurs processus ou un seul processus avec plusieurs threads. Si plusieurs processus sont utilisés, différentes méthodes d'IPC sont disponibles pour établir la communication entre les processus (et éventuellement pour mettre à jour le code et les données du nouveau processus afin qu'il soit semblable au parent, si la fonctionnalité assurée par fork est requise). Pour plus d'informations sur IPC, consultez Communications entre processus.
Les modèles graphiques Windows et UNIX sont très différents. UNIX utilise l'interface utilisateur graphique (GUI) du système X Window, tandis que Windows utilise GDI. Bien que les deux concepts soient similaires, il n'existe aucun mappage simple de l'API X à l'API GDI. Toutefois, une prise en charge OpenGL est disponible pour faire migrer des applications OpenGL UNIX. Il existe en outre des clients X et des serveurs X pour Windows. Consultez Contextes de périphérique pour plus d'informations sur GDI.
Les applications UNIX de base, y compris de nombreuses applications CGI, sont normalement portées facilement vers Visual C++ sur Windows. Des fonctions comme open, fopen, read, write et d'autres sont disponibles dans la bibliothèque Runtime Visual C++. Il existe en outre un mappage un à un entre les API C UNIX et Win32 : open et CreateFile, read et ReadFile, write et WriteFile, ioctl et DeviceIOControl, close et CloseFile, etc.
Sous-système POSIX sous Windows
Une autre option étudiée par les programmeurs UNIX est celle du sous-système POSIX sous Windows. Toutefois, seule la version 1003.1 de POSIX, unique version normalisée lors de la création de Windows NT, est prise en charge. Depuis, la demande pour une extension de ce sous-système a été très faible, la plupart des applications ayant été converties en Win32. Le système 1003.1 présente un intérêt limité pour les applications complètes, car de nombreuses fonctionnalités lui font défaut (notamment celles de la version 1003.2, la prise en charge réseau, etc.). Les applications complètes exécutées sur le sous-système POSIX sous Windows n'ont pas accès aux fonctionnalités de Windows disponibles pour les applications Win32, telles que les fichiers mémoire mappés, la gestion de réseau et les graphiques. Les applications telles que VI, LS et GREP sont les principales cibles du sous-système POSIX sous Windows.