wiki:EnstaCours1

Version 1 (modified by Vincent Caron, 14 years ago) (diff)

--

Cours 1: Interopérabilité - applicatifs (émulation, portage)

Emulation bas niveau (émulation matérielle)

  • sujets avancés: la translation dynamique de code, l'analyse de code bas niveau (valgrind), les périphériques virtuels, usermode Linux, linux-vserver, Xen...

Virtualisation

Un micro-noyau pour héberger des noyaux classiques

  • Approche transparente: complexe et très limitée suivant la plateforme
  • Approche coopérative: Xen, Adeos

Emulation ABI: exemple de Wine

  • Petit historique du projet Sun & IBM, 1992: premières émulations Windows 16bit (WABI, OS/2) Linux hackers, 1993: démarrage de Wine (Youngdale, Metcalfe, Julliard, Icaza, Amstadt) 1996: Excel fonctionne 2006: jeux Direct3D, IE, Office, etc. Pourquoi (http://winehq.org/site/why): diversité, portabilité, remote desktop, sécurité, liberté, etc.
  • Architecture S'appuie sur Unix et X. Peut charger des DLLs depuis une plateforme x86, remplace progressivement les DLLs propriétaires par des implémentations natives libres. Emulation DOS, Win16, Win32. Emulation de l'environnement et des services inter-applications (Winserver) Compatibilité des bugs. Toolchain: cross-gcc pour win32 + binutils dédiés PE+MSVC.

Emulation API win32: Wine

  • avec mingw32: 100% interopérable win32, 100% libre (apt-get install libwine-dev)
  • avec gcc: portage

via le respect des standards (ISO C/C++, POSIX)

  • théorie & réalité, le choc des philosophies (DCOM, héritage du Pascal, etc) ISO-C99/MSVCRT/MSVC7 Pascal/C Unicode: UCS-2 vs. UTF-8 Ressources: winres vs. gettext

Via des toolkits portables

  • bas niveau: SDL, glib
  • niveau applicatif: GTK+, Qt
  • haut niveau: XUL

De Unix vers MS Windows et vice-versa

  • Cygwin (portage GNU libc pour un environnement POSIX)
  • gnuwin32 (portage outils POSIX)
  • les 'Services for Unix' de MS (subsystem NT)