# Windows CE

Windows CE (officiellement nommé Windows Embedded Compact depuis la version 6.0 - nom de code « Yamazaki »)$^,$, parfois abrégé WinCE, est une variation de Windows pour les systèmes embarqués et autres systèmes minimalistes, utilisée notamment dans les PC de poche ou Handheld. Il utilise un noyau distinct des autres Windows plutôt qu'une version allégée et supporte les architectures processeur Intel x86 et similaires, MIPS (jusqu'à CE 3.0), ARM et aussi Hitachi SH.
Windows CE est une branche d'OS à part, indépendante de la famille NT notamment. Il ne faut pas la confondre avec l'offre Windows XP Embedded qui est une dérivation, pour l'embarqué, de la famille NT/XP disponible uniquement pour architecture x86 avec l'offre Windows CE qui est disponible pour x86, ARM, SH et MIPS.
La sortie officielle de la dernière version, Windows Embedded Compact 2013, a eu lieu le 11 août 2013.
Windows CE est optimisé pour les appareils possédant une faible capacité de stockage - le noyau peut tourner avec moins d'un mégaoctet de mémoire vive. Les systèmes sont souvent produits sans disque de stockage et peuvent être pensés pour ne pas pouvoir être étendus (par exemple, le système peut être écrit en ROM). Windows CE est conforme à la définition d'un système d'exploitation temps réel. Il supporte 256 niveaux de priorité et procède par héritage de priorité pour éviter les problèmes d'inversion de priorité. À l'inverse des systèmes ressemblant à UNIX, l'unité fondamentale d'exécution est le thread permettant d'obtenir des programmes plus simples et plus rapides en concurrence.
Microsoft a indiqué que « CE » n'est pas un acronyme, mais beaucoup de personnes croient qu'il signifie « Consumer Electronics » ou « Compact Edition ». La première version, surnommée « Pegasus », proposait une interface graphique similaire aux autres Windows ainsi qu'un certain nombre de logiciels de Microsoft, tous allégés en capacité de stockage, mémoire et vitesse.
Depuis, Windows CE a évolué - d'après les documents de Microsoft - en un système d'exploitation basé sur des composants, embarqué et temps réel. Il n'est plus réservé aux seuls ordinateurs tenant dans la main. Beaucoup de plates-formes sont basées sur le cœur du système Windows CE telles que Microsoft's Handheld PC, Pocket PC, Pocket PC 2002 et Smartphone 2002.
Il est souvent indiqué que Windows CE 3.0 et Pocket PC sont la même chose, ou le Pocket PC est dérivé du successeur de Windows CE 3.0.
Versions actuelles : 4.2 (dite .Net), 5.0, 6.0 et 6.0R2.
Le principal concurrent de ce système était Palm OS lancé sur une plate-forme incompatible avec Windows CE.

## Fonctionnalités
### Généralités

* Windows CE est prévu pour fonctionner sur des périphériques à faible empreinte mémoire. La taille d'une image système sans support graphique peut être de l'ordre du Mo. Il peut fonctionner sans support de stockage, exclusivement en RAM/ROM, etWindows CE est un système 32 bits pouvant fonctionner sur architecture ARM, x86, MIPS, SHx.
* Windows CE répond aux contraintes d'un système temps réel avec un ordonnanceur préemptif à 256 niveaux de priorités fixes et un temps de latence des interruptions déterministe. Sous certaines conditions, un mécanisme d'inversion de priorité peut être pris en charge par l'OS. L'unité d'exécution est le thread mais Windows CE prend aussi en charge un environnement graphique basé sur une mécanique évènementielle (GWES - Graphic Windowing and Events Subsystem) et intégrant une couche GDI (Graphic Device Interface) allégée par rapport à celle disponible sur XP. Il est également compatible avec les modes de communication les plus connus tel que le bluetooth, l'IrDA, l'Ethernet, le Wi-Fi, le NDIS 5.1 et le TCP/IP

### Nouvelles fonctionnalités en version 6.0

* Les gestionnaires systèmes des systèmes de fichiers (anciennement filesys.exe), de l'environnement graphique (anciennement GWES.exe) et des pilotes périphériques (anciennement device.exe) migrent dans l'espace kernel et sont intégrés au noyau (nk.exe) sous la forme de DLL.
* Nouveau modèle de mémoire virtuelle : les 4 Gio sont répartis en 2 Gio inférieurs pour l'espace utilisateur et 2 Gio supérieurs pour l'espace kernel (noyau). Chaque processus dispose d'une zone privée de 2 Gio remappée dans l'espace utilisateur.
* Nouveau modèle de pilote de périphérique avec la distinction des pilotes chargés en mode user et en mode kernel.
* La limite des 32 processus passe à 32 768 processus.
* La limite des 32 Mio de mémoire virtuelle par processus passe à 2 Gio.
* L'IDE Platform Builder est intégré à Microsoft Visual Studio 2005 ce qui permet ainsi le développement système et applicatif depuis un seul et même environnement.
* Support du mode lecture seule pour le système de fichiers UDF 2.5.
* Support du système de fichier exFAT.
* Support des standards sans fil 802.11i (WPA2) et 802.11e (QoS).
* Support radio.
* Processeurs supportés : x86, ARM, SH4 et MIPS.
* Nouveau composant Cellcore pour la gestion facilitée des connexions données et appels vocaux via un réseau cellulaire.

## Outils de développement

Les outils de développements se répartissent en trois familles :
* Développement système : Platform Builder.
* Développement applicatif : Embedded VC, Visual Studio
* Diagnostic et analyse : Remote tools.
Il existe également un compilateur croisé libre qui permet de développer des applications Windows CE à partir d'autres plateformes comme Linux, FreeBSD ou Mac OS X : CeGCC (dérivé de la famille des GCC).

### Platform Builder

C'est l'outil qui permet de générer l'OS. Il est livré avec un ensemble de codes sources et bibliothèques pré-construites qui constituent l'ensemble des fournitures nécessaires pour générer un système Windows CE. Cet outil permet donc de générer un OS mais c'est aussi l'environnement de développement de toutes les fonctionnalités systèmes, par exemple les pilotes additionnels. Cet outil permet aussi de fournir des BSP (Board Support Package) et des SDK (Software Development Kit) à destination des équipes de développement système et applicative respectivement.
Cet outil est apparu en version graphique avec CE 3.0 en 1999. Depuis la version 6.0 il n'est plus Stand-alone mais se présente comme un composant additionnel à Visual Studio 2005 (VS 8.0).

### Embedded Visual C

C'est l'outil qui permet de faire du développement croisé en code natif pour les systèmes Windows CE depuis la version 3.0 jusqu'à la version 5.0. Depuis la version 6.0 de Windows CE, cet outil est remplacé par Visual Studio qui intègre dorénavant les compilateurs croisés.
Les correspondances de version de l'outil eVC avec Windows CE sont les suivantes :
* eVC 3.0 pour Windows CE 3.0
* eVC 4.0 pour Windows CE 4.0
* eVC 4.0 sp1 pour Windows CE 4.1
* eVC 4.0 sp2 pour Windows CE 4.2
* eVC 4.0 sp4 pour Windows CE 5.0
Pour information, une version d'outil Embedded Visual Basic était disponible en version 3.0. Elle permettait de faire du développement en VB 6.0 pour Windows CE. Cet outil n'a pas été supporté au-delà de la version 3.0. Le développement en Visual Basic sur Windows CE est de nouveau possible via le support des technos .NET et Visual Basic 7.0 et plus.

### Visual Studio

Depuis la version VS 2002 SDE il est possible de faire du développement managé (i.e. .NET) pour cible Windows CE et du développement natif depuis la version VS 2005.
La prise en charge de .NET sous Windows CE est assurée par une version allégée du Framework .Net: le Compact Framework .NET.
Visual Studio 2005 est donc, depuis Windows Embedded CE 6.0, l'environnement complet de développement aussi bien pour le système via le composant additionnel Platform Builder, que pour le développement applicatif natif (C/C++) ou managé (.NET)

### Remote tools

Il s'agit d'un ensemble d'outils d'analyse permettant, via une connexion à une cible Windows CE, d'obtenir des informations sur le système :
* ZoomIn : copie d'écran.
* File Viewer : visualisation du système de fichier cible.
* Registry Editor : visualisation de la base de registre cible.
* System Infos : bilan des informations système.
* Spy++ : espionnage de la messagerie Windows.
* Heap Walker : suivi des allocations mémoire par analyse des tas des processus.
* Process Viewer : listes des processus et threads actifs.
* Call Profiler : analyse de l'arbre d'appel.
* Performance Monitor : visualisation de l'évolution des métriques système.
* Kernel Tracker : chronogramme de l'évolution de l'ensemble des objets noyaux.

## Licence

Une licence de développement, sous forme d'un outil de génération d'images (Platform Builder), est nécessaire. Les images générées ne sont alors plus limitées à 120 jours. Par ailleurs, chaque appareil livré doit être doté d'une licence (Run time license), matérialisée par un autocollant. Aucune activation n'est prévue. Les licences peuvent être acquises auprès de distributeurs spécifiques et agréés par Microsoft, après signature d'un contrat d'acceptation des conditions.

### Ouverture

Pour accélérer le développement d'applications compatible Windows CE, inciter au développement de matériel compatible, et ainsi gagner la confiance des constructeurs d'appareils électroniques, Microsoft a rendu public une partie du code de Windows CE. La consultation du code est possible après acceptation d'une licence spécifique (Share source license). Le programme de génération des Images CE est payant (Windows CE Platform Builder), avec une version d'évaluation pleinement fonctionnelle mais limitée à 120 jours (outil et image). Le développement d'applications nécessite des outils spécifiques comme embedded Visual C++, distribué gratuitement, ou des plug-ins intégrés à MS Visual Studio. Il n'est pas question de logiciel libre : les éditeurs ayant payé une licence peuvent modifier des copies de ce code source, et ne sont pas obligés de révéler à Microsoft leur propre code source. La redistribution n'est pas limitée : les éditeurs peuvent redistribuer des versions modifiées à des fins commerciales. Certains craignent la confusion avec le code open source propre au logiciel libre.
Windows Embedded CE 6.0, comme les versions précédentes, est livré avec une partie des codes source.

## Historique et versions

* 1.0 : Windows CE1 est sorti pour la première fois en 1996 (nom de code « Pegasus »). Cette version n'offrait pas les fonctionnalités systèmes actuelles, en particulier au niveau de l'ordonnancement et de la gestion mémoire.
* 2.0, 2.11, 2.12 : versions fondées sur l'architecture 1.0. Jusqu'à la version 2.12 l'ordonnancement était fondé sur un système à 8 niveaux de priorités variables. Windows CE n'était donc pas encore un système éligible pour le temps réel.
* 3.0 : la première rupture technologique a lieu avec CE 3.0 en 1999 avec l'intégration d'un ordonnanceur préemptif à 256 niveaux de priorités fixes rendant Windows CE éligible en tant que système temps réel. Windows CE 3.0 marque aussi l'apparition des outils graphiques pour le développement système et applicatif.
* 4.0, 4.1, 4.2 : sorties entre 2001 et 2003, support de fonctionnalités renforcées (communication, média, ...) et amélioration des outils de développement
* 5.0 : sortie fin 2004, le principe de gestion de la mémoire commence à devenir limite pour les systèmes fortement orientés multimédia et en particulier pour les appareils grand public fonctionnant sous Windows CE, à savoir les pocket PC et Smartphone. La réflexion est en cours pour une nouvelle architecture mémoire cependant aucune modification majeure n'est effectuée sur cette version. Windows CE 5.0 représente un système industriel dont l'architecture est stabilisée depuis sept ans.
* 6.0 : Windows Embedded CE 6.0 marque la seconde rupture technologique dans cette famille d'OS. Cette fois l'architecture mémoire est révisée pour offrir le support de plus de 32 000 processus avec chacun 2 Go d'espace adressable. Pour mémoire, jusqu'à CE 5.0 les limites étaient de 32 processus avec 32 Mo d'espace adressable. Cette version marque le début d'un nouveau cycle pour l'architecture du système.

### Dreamcast

Bien que le système d'exploitation principal de la console de jeux vidéo Dreamcast de Sega fut SegaOS, la Dreamcast était également compatible avec Windows CE. Bien que peu utilisé, celui-ci facilitait notamment le portage de jeux PC DirectX vers la console en un temps record. Il fut notamment utilisé pour le jeu Sega Rally 2. Cependant l'utilisation de Windows CE n'était pas obligatoire. En effet, la console utilisait SegaOS par défaut, et le système était éventuellement chargé si le jeu en question était un jeu Windows CE (identifié par la présence du logo « Powered by Windows CE », notamment au lancement du jeu), directement depuis le GD-ROM du jeu, la Dreamcast ne possédant pas Windows CE sur mémoire morte.

## Lien avec Windows Mobile

L'offre Windows Mobile repose sur une version de Windows CE agrémentée d'un ensemble de fonctionnalités. De plus, l'architecture matérielle pouvant faire fonctionner une version Windows Mobile est déterminée par Microsoft. Ceci signifie que l'offre Windows Mobile peut être vue comme la fourniture d'un OS avec un ensemble de fonctionnalités mais aussi comme la spécification d'une architecture matérielle. Ainsi l'offre Mobile a toujours fonctionné sur processeur ARM jusqu'à présent.
En 1999 sort sur le marché le premier Pocket PC. Cet appareil est basé sur un OS Windows CE 3.0. Cette sortie marque le début de l'expansion de l'OS Windows CE via l'offre Mobile avec pour chaque génération de l'offre Windows Mobile une version de Windows CE sous-jacente :
* SmartPhone 2002 (Windows Mobile 2002) : Windows CE 3.0
* Windows Mobile 2003 : Windows CE 4.20
* Windows Mobile 2003 SE : Windows CE 4.21
* Windows Mobile 5.0 : Windows CE 5.1
* Windows Mobile 6.0 : Windows CE 5.2
* Windows Mobile 6.1 : Windows CE 5.2
Les versions Windows Mobile 5.0 et 6.x reposent donc sur une version dérivée de Windows CE 5.0. Les versions 5.1 et 5.2 sont réservées à l'offre Windows Mobile. De plus, bien que sortie après Windows Embedded CE 6.0 (novembre 2006), Windows Mobile 6.0 (février 2007) ne s'appuie pas sur cette nouvelle version.
Windows Embedded CE 6.0 est la base de Windows Phone 7 (nom de code « Photon »). Windows Phone 8 est une vraie cassure technologique car tournant pour la première fois sous le noyau NT dans une version ARM (projet « Experiment 19 ») et inaugurant WinPRT (Windows Phone RunTime) partageant un nombre croissant d'API avec WinRT disponible sur Windows 8.x et plus ainsi que Windows RT.