Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
7 à voir

Plongée au cœur des 2 Windows 8

14 Mai 2012 , Rédigé par Lionel Publié dans #Microsoft, #Overblog

iStock 000019042583XSmall 2

 

Windows 8 est un système "à deux faces". En effet:

  • il est destiné à des tablets et à des PC,
  • il fournit une interface bureau traditionnel et une interface Metro,
  • on peut développer des applications en HTML5 et en .NET.

 

Comment s'exprime cette dualité dans l'interface ? Comment cela se réalise dans le système ? Qu'est ce que cela change pour le développeur ? Voilà les questions auxquelles je vais essayer de répondre dans ce billet.

 

Windows 7 prend le Metro

Une fois n'est pas coutume, je ne vais pas vous détailler les nouveautés de Windows 8, comme je l'avais fait pour Windows 7. Je vous ferais un "vie ma vie sous Windows 8" quand Windows 8 sera installé réellement sur ma machine, ce qui n'est pas encore le cas. Parcourons néanmoins rapidement Windows 8 en se focalisant sur sa principale spécificité: Metro. Metro est le nom du style d'interface tactile proposé par Microsoft. Windows 8 n'apporte pas réellement de révolution sur ce point car l'interface Metro est celle de Windows Phone 7. On aime ou on n'aime pas mais à l'usage on ne peut pas nier son efficacité.

 

Si on devait résumer l'apport de Metro à Windows 8, on pourrait dire (en caricaturant) que Metro est la surcouche tactile du bureau de Windows. Autrement dit, plutôt que de réécrire complètement le bureau de Windows 7 pour qu'il soit adapté au tactile (ce qu'il fait très mal aujourd'hui), Microsoft y a ajouté une couche tactile basée sur l'interface Metro de Windows Phone.

 

Du coup, Windows 8, c'est cela:

 

win8 desktop

 

 

C’est-à-dire un bureau identique au bureau de Windows 7 à un détail prêt: il n'y a plus le menu "Démarrer" dont vous avez l'habitude en bas à gauche de votre écran. J'ai lu que beaucoup de gens se plaignaient (déjà) de la disparition de ce bouton. Pourtant il suffit de positionner sa souris en bas à gauche de l'écran pour voir apparaître le raccourci pour accéder à Metro (voir ci-dessous).

 

win8 startmenu

 

 

Et si vous cliquez sur ce raccourci, il vous rendra le même service que le menu Démarrer en lançant l'interface Metro (ci-dessous). D'ailleurs le titre de l'écran de l'interface Metro est "Démarrer": ce n'est pas un hasard !

 

win8 metro

 

 

Pour résumé ce qu'est Metro, disons que l'objectif de l'interface Metro de Windows 8 est de proposer des raccourcis (appelés "tuiles") pour lancer des applications. Ces applications sont soit des applications pour le bureau Windows (celles que vous connaissez déjà) soit des applications de type Metro. Pour les applications de type Metro, les tuiles peuvent être "dynamiques", c’est-à-dire afficher des informations qui se mettent à jour régulièrement même quand l'application n'est pas active (à la manière des "Gadgets" de Windows 7).

 

En standard, Windows 8 propose de nombreuses applications Metro pré-installées. Ce sont essentiellement des applications de type bureautique (Mail, Contacts, Photos, …). Elles sont loin d'être abouties dans la version de Windows 8 actuelle mais elles permettent de bien comprendre les principes essentiels d'une application Metro:

  • Une application Metro doit être centrée sur le contenu: donc avec une mise en forme sobre et limitée pour que le contenu prime sur la mise en page,
  • Une application Metro doit être facile à manipuler de manière tactile: scroll, zoom, …

 

win8 mail

 

 

A terme, Microsoft devrait "Metroïser" la plupart de ses applications pour qu'elles soient accessibles facilement de manière tactile via Metro. Microsoft devrait ainsi proposer une version Metro de la suite Office dans sa prochaine version, Office 15.

 

Enfin, Metro intègre un AppStore qui est une application Metro permettant de télécharger et, dans la version définitive de Windows 8, d'acheter, de nouvelles applications de type Metro et lancer leur installation.

 

win8 store

 

 

 

Au cœur du Metro

Moi je n'aime pas les boites noires  et une fois passé les premiers moments de découverte de Metro, je me suis rapidement demandé comment il fonctionnait et d'abord: où sont stockés les programmes Metro ? Et qu'est ce qu'un programme Metro ?

 

Pour répondre à ces questions, j'ai ouvert ma boite à outil habituelle du hacker sous Windows  en utilisant l'excellent Process Monitor qui permet d'auditer tout ce qui se passe dans le système. Après un peu de paramétrage, j'ai donc lancé cet outil avant d'installer une nouvelle application Metro depuis l'AppStore (Marmiton en l'occurrence).

 

win8 procmon

 

 

La trace ci-dessus montre clairement que l'installation de la nouvelle application se fait dans un répertoire spécifique à Windows 8, "WindowsApps". Après expertise, il s'avère que c'est un répertoire caché sur lequel sont positionnés des droits empêchant de l'explorer (c'est des petits cachotiers chez Microsoft ). Après un peu de bricolage, il est néanmoins possible de visualiser son contenu.

 

win8 appdircontent

 

 

On y retrouve en effet un répertoire pour chacune des applications Metro installées.

 

En parcourant les répertoires des applications on observe  également qu'il y a deux sortes d'applications dans Metro. Il y des applications HTML (c'est le cas de Marmiton). On y retrouve une page d'accueil (default.html), du JavaScript et des feuilles de styles.

 

win8 marmitondir

 

 

Et il y a des applications .NET (c'est le cas de l'application Metro "LeMonde") constituées d'un fichier exécutable et de différentes DLL. On peut vérifier facilement que l'exécutable est bien un programme .NET en utilisant un autre outil de la boite à outil du hacker, ILDASM.

 

win8 lemondeildasm

 

 

Process Monitor permet également d'aller un peu plus loin dans la compréhension du fonctionnement des applications Metro. On peut ainsi constater que lorsqu'on exécute une application Metro de type HTML, elle s'exécute à travers un programme système appelé "WWAHost.EXE".

 

win8 wwamarmiton

 

 

Sans surprise, on constate que ce programme encapsule l'ActiveX MSHTML.DLL qui n'est autre qu'Internet Explorer. Bref, quand on lance une application Metro HTML, le système lance Internet Explorer 10 qui va ensuite ouvrir les pages HTML/JavaScript de l'application.

 

Pour les applications de type .NET, pas de surprise non plus, Process Monitor montre que lorsqu'elles sont exécutées, le système "monte" en mémoire le .NET Framework.

 

win8 wshostlemonde

 

 

En synthèse de notre exploration, on retient deux choses:

 

Les applications Metro sont installées dans le répertoire "WindowsApps" qui est l'équivalent pour Metro du répertoire "Program Files" pour les applications de type bureau.

 

win8 inside

 

 

Il y a deux types d'applications Metro: les applications HTML qui s'exécutent dans Internet Explorer et les applications .NET qui s'exécutent avec le .NET Framework.

 

Win8 Inside2

 

 

 

Développer pour Windows 8 ?

Maintenant que nous avons vu ce qu'était une application pour Windows 8, essayons de répondre à la question:  comment fait-on pour développer une application pour Windows 8 ?

 

Pour développer des applications pour le bureau Windows 8, c'est très simple: on fait "comme avant". En effet, il n'y a pas de différences fondamentales entre le bureau Windows 8 et le bureau Windows 7, 100% des applications sont donc compatibles. Bref, quelque soit la manière de développer vos applications actuelles pour Windows (.NET, Java, MFC, Visual Basic, Delphi, COBOL, WinDEV…) cela continuera à fonctionner pour Windows 8. Et c'est tant mieux  !

 

Pour développer des applications de type Metro il faut par contre utiliser un environnement spécifique.  Avec Windows 8 arrive en effet une nouvelle API appelée WinRT. Mine de rien c'est une véritable révolution car WinRT est ni plus ni moins que l'API bas niveau permettant d'accéder aux fonctionnalités système de Windows depuis Metro, c’est-à-dire l'équivalent de l'ancestrale API bas niveau Win32 pour les applications bureau.

 

win8 winRT

 

 

WinRT expose tous les services systèmes que l'on peut attendre (réseau, périphériques, média, …). Je ne rentrerais pas dans les détails de son fonctionnement mais disons que la spécificité de WinRT est de privilégier l'exécution asynchrone. C’est-à-dire que la majorité des fonctions de l'API WinRT rendent la main au programme immédiatement après leur appel et qu'elles retourneront le résultat de l'opération ultérieurement via un "callback".

 

Si WinRT est l'API bas niveau de développement pour Metro, elle est exposée aux développeurs de deux manières différentes:

  • En .NET,
  • En HTML/JavaScript.

 

.NET dans le Metro

.NET est depuis longtemps l'environnement de développement de Microsoft, il n'y a donc rien d'étonnant qu'il soit l'environnement de choix pour développer des applications Metro pour Windows 8. Pour Windows Phone, on s'appuyait sur Silverlight, pour Windows 8, la partie graphique est également pris en charge par du XAML mais à travers un nouveau Namespace appelé "Windows.*" (pour mémoire, c'est "System.Windows" pour WPF). Par défaut, l'ensemble des contrôle graphiques ont le look Metro, ce qui permet de développer des applications très rapidement. Le développeur .NET habituel ne sera pas donc dépaysé mais attention néanmoins, l'ensemble des types et fonctions n'est pas identique entre Silverlight et WinRT comme le montre le schéma ci-dessous. Bref, encore un peu de spécifique à apprendre

 

win8 slwinrt

 

 

A noter aussi que les applications Metro s'exécutent dans un environnement protégé ("sandbox"), elles ne peuvent donc utiliser qu'une partie des fonctionnalités du système auquel vous avez accès à travers le bureau.

 

Evidemment, l'environnement de développement .NET proposé par Microsoft pour développer des applications  Metro est Visual Studio 11. Il est livré avec des modèles d'applications ce qui permet très rapidement de réaliser une première application grille "classique" pour Metro: afficher une liste de contenus liste-groupe-détail.

 

win8 vs11dotnet

 

 

 

HTML à l'abordage

Ce qui fait le succès d'un système c'est d'abord son écosystème de développeurs. Or, limiter le développement d'application Metro à .NET serait se priver d'une importante population de développeurs. Comme à son habitude, Microsoft n'a pas lésiné sur les moyens pour séduire les développeurs de tous horizons en proposant la possibilité de développer des applications Metro en HTML5/JavaScript.

 

Pour cela, Microsoft a encapsulé l'API WinRT dans un framework JavaScript maison appelé "WinJS". Le framework propose une expérience enrichie de JavaScript avec des modules, des espaces de noms et des callbacks encapsulés. Le framework repose sur les spécifications CommonJS mises en œuvre notamment dans le framework NodeJS.

 

win8 winjs

 

 

On prend donc plaisir à développer avec JavaScript (private joke: ça me rappelle webOS ), surtout dans un environnement Visual Studio 11 modifié pour supporter pleinement le JavaScript (notamment Intellisense, Debug, …).

 

Microsoft a également redéveloppé l'intégralité des contrôles graphiques de Metro en HTML5. Le rendu est assez bluffant: impossible sur le Store de faire la différence entre une application Metro .NET utilisant les contrôles XAML et une application Metro utilisant les contrôles HTML5. Les contrôles sont déclarés dans la page HTML par des DIV avec des classes spécifiques. Ils sont manipulables dans le code par des fonctions de sélection dans le DOM comme en jQuery, supportent le DataBinding et les fonctionnalités étendues de CSS3 comme les media queries (par exemple pour adapter le rendu à l'orientation de l'écran). Là-aussi, c'est un environnement très agréable.

 

win8 winjs2

 

Comme pour .NET, Visual Studio 11 propose des modèles d'applications standard Metro en HTML5/JavaScript. Ils pré-organisent votre code source en créant pour chaque écran un fichier HTML, un fichier JS et un fichier CSS pour faire du code JavaScript "propre".

 

win8 vs11js

 

 

L'intérêt de proposer un environnement de développement HTML5/JavaScript est important car il permet assez facilement d'adapter du code existant pour d'autres environnements. C'est un plus notamment lorsqu'on le compare à la courbe d'apprentissage nécessaire lorsqu'on veut développer des applications iPhone/iPad sur iOS (Xcode, ObjectiveC, …).

 

Pour finir sur le développement d'application, on notera que Windows 8 bénéficie déjà d'un SDK complet avec de nombreux exemples de code dans les deux environnements .NET et HTML5.

 

 

Conclusion

Windows 8 c'est donc 2 systèmes en un: 2 expériences, 2 modes de fonctionnement, 2 environnements de développement. Pour lutter contre le rouleau compresseur des tablets dont on promet qu'elles vont remplacer les PC, Microsoft a donc démultiplié son système d'exploitation et va faire de même pour ses applications.

 

Est-ce la stratégie gagnante ?

Les utilisateurs de tablet seront-ils satisfaits de l'expérience ergonomique proposée par Metro ?

Les utilisateurs de PC ne seront-ils pas déroutés par ce bouleversement dont ils risquent de ne pas comprendre les avantages pour eux ?

 

C'est un peu tôt pour le dire dans cette version préliminaire de Windows 8. Force est de constater néanmoins que Microsoft délivre avec Windows 8 un système opérationnel, qui répond à son objectif de départ et qui a la capacité de séduire les développeurs.  Pour le reste, l'avenir nous dira si l'ambition de Microsoft d'écraser iOS et Android par la force de l'écosystème des 500 millions de PC installés dans le monde, sera payante.

 

 

P.S.: Un grand merci au e-Lab d'avoir mis à ma disposition une machine tactile pour jouer et développer avec Windows 8.

Partager cet article

Repost 0

Commenter cet article