I keep getting the question “How is Windows Mobile related to Windows CE?” To be more precise I get lots of questions that don’t make sense if you understand the relationship between CE and Windows Mobile. So for my own sanity I'm going to document it here and then I can just point people at the post.
Let’s start with:
What is Windows CE?
It’s a 'hard' real-time, pre-emptive, multi-tasking operating system built from the ground up to be a truly componentized OS. 'Windows CE' as a product consists of two main things: Platform Builder and a very large collection of software bits ... it is *
not* is a finished OS.
The collection of bits is a superset of any one OS. For example there are multiple user interfaces, two browsers, lots and lots of different processor support packages. These 'bits' come in different flavours, some are shipped as a binary DLL ready for deployment, some are partially completed components in the form of .LIB files and some components ship as source. There are lots and lots of bits. Not all are required to make a running OS, intact some are mutually exclusive. That’s where Platform Builder comes in.
Platform Builder is an OS tool / workbench / IDE that is used to do a couple of things Firstly it helps you select the components that you want your version of Windows CE OS to contain. You get to choose basic things like a UI, file system, network components and browser. You also get to choose some of the more detailed things like what registry keys need to be set, what icons will be present on the desktop (if there is going to be a desktop). Windows CE can grow from a minimum size of around 250kb right up to a fully fledged 24MB OS. Platform Builder also doubles as a workbench for creating your own C++ projects that need to go into your OS which is ideal for building device driver components and other bits.
When all the components are selected Platform Builder is then used to 'build' your selected OS. This phase is a bit more like an assembly line rather than a traditional code build because it’s more about linking LIB files together and putting the right DLL's in the right location. When the OS is built Platform Builder then morphs into an OS debugging environment allowing the developer to deploy the OS image to a remote embedded computer or to an emulation environment and then step into the OS and debug right down to the kernel and see what’s going on.
Windows CE is great for developing bespoke, embedded OS's because it can be tailored to match the exact hardware available keeping HW and SW costs low, but it causes some interesting problems. Let’s say you, as a software dev, want to build and sell a new software widget for all Cow Milking Machines (CMM's). There are two manufacturers of these machines but both use Windows CE so you go ahead and write your wizzy new widget with a nice UI and using web services. It works fine on the first CMM but just wont fly run on the second because the manufacturer hasn't included a UI or a network stack!
How could you know? Who was at fault? There is no way to know unless you get an SDK from the device manufacturer, but even then it doesn’t make sense to maintain two code bases, one for each CMM system.
Ideally what’s needed for widely distributed systems such as a PDA is to enforce a fixed set of features and functions. And that is exactly what Windows Mobile does.
So what is Windows Mobile?
To an original device manufacturer (ODM) Windows Mobile is a set of pre-selected Windows CE components (chosen from the Windows CE OS bucket of bits just as Platform Builder would produces), some additional Windows Mobile specific components and a paper definition of required functionality, features and user experiences that the ODM must conform to. The ODM takes the components, adds in their device drivers and any additional feature apps and burns it into ROM of the device ready to ship.
Because the features of the OS are pre-defined, Microsoft can centrally distribute the SDK and help, and a developer can rely on the features being present and operating in the expected way.
So Windows Mobile is a specific subset of Windows CE components, combined with a set of Windows Mobile specific components with device specific drivers and extra’s defined by the OEM / ODM / Mobile Operator.