Windows CE 6.0 First Taste and Rumors
Recently, more people are discussing Windows CE 6.0. But Windows CE 6 won’t ship until at least 2007. Microsoft announced CE6 at MEDC 2006. Bad luck — I planned to attend MEDC but was rejected for a US visa. So I couldn’t get first-hand information. Can’t be an imperial guard, so I’ll be a folk hero. Let me回忆 some info gathered from various channels (MS partner lectures, engineers invited to US for partner testing, hearsay, etc.). Here’s my summary with my own commentary. If something’s wrong, don’t blame me — I’ve never seen official materials. Blame the bald guy at the US embassy who rejected my visa. So I’ll put up this “AS IS” disclaimer.
Enough talk, here goes:
1. The 32-process, 32MB-per-process virtual memory limit is removed. Reportedly now supports 32767 processes, each with 2GB user space.
This is the most explosive change in Windows CE 6.0. Previously, when introducing Windows CE, I’d always say it’s a microkernel OS — many features implemented in user-mode EXEs, drivers in user mode, etc. — completely different from desktop Windows’ monolithic kernel. But now… (I wanted to draw a diagram, but my knowledge is too limited. I’ll draw one after getting the Beta CD. Again, I hate the US for rejecting my visa.)
When I first heard this last winter, I was quite shaken. It means Windows CE, after 10 years, has discarded its original kernel design and has a new Kernel. At first glance, this new kernel looks very similar to desktop Windows. The only difference might be that desktop Windows only runs on x86, while Windows CE runs on ARM, x86, MIPS, and SH — making CE seem more powerful. I wonder if one day Microsoft might replace desktop Windows with Windows CE’s x86 version, porting Office, Avalon, Indigo, etc. to CE. Just daydreaming.
Considering it further, this change makes sense for two reasons:
First, application demands. 10 years ago, 32 processes × 32MB was enough for embedded apps. But look at Smartphone 2003 — the system starts with 20 processes! Only about 10 left for users. And 32MB virtual address space per process is absurd today. Modern multimedia apps routinely allocate 32MB at once. Many phones and PDAs have 128MB physical memory, but virtual memory runs out. I once encountered this when opening a huge JPEG (Shanghai transport map). Had to use shared memory, a pathetic workaround.
Second, my boss told me he was at the Seattle HQ when Windows CE 1.0 was being论证. Why was the scheduling system designed this way? Because x86 process address space switching was too slow. Someone proposed CE’s flat address space to avoid switching. They wrote a small kernel and showed Bill Gates. That became Windows CE. Now, x86 hardware has solved that problem, making the old kernel unnecessary.
2. Some drivers moved to Kernel; user-mode drivers loaded by UDevice.exe.
Previously, all CE drivers were user-mode. I always thought CE was a good platform for learning driver development because of its simple architecture and easy debugging. Now, the graphics system and file system have moved into the Kernel — graphics drivers, file system drivers, etc. The remaining UDevice.exe loads some user-mode drivers, mostly bus extension drivers like USB class and SDIO.
Why the change? Probably unavoidable due to the virtual memory architecture change. If everything stayed in user mode, efficiency would suffer. Imagine calling a file system API: Hello.exe (API call) → NK.exe (API forwarding) → FileSys.exe (API implementation) → Device.exe (storage driver). That’s only half — the return trip is the same. Previously this worked because the flat address space made switching fake. With CE 6’s new kernel, such a round trip would have serious efficiency issues. I’ve seen an OS with this architecture — writing an 8MB file took 8 seconds (实测 data, not臆测). Microsoft isn’t stupid, so they moved what needed to move into the kernel, saving Marshal calls and improving speed.
3. OAL becomes a separate process called OAL.exe, running outside NK.exe.
This is probably most important for OEMs. Getting CE running on a board starts with OAL. Previously, CE’s microkernel was NK.exe, linked from NK.lib and OAL.lib. Now the Kernel is no longer a separate process but the upper 2GB of all processes. The independent OAL becomes a separate process. The new kernel reportedly includes: OAL.exe, kernel.dll, kitl.dll, kcoredll.dll, device.dll, etc.
I’ve heard very little about this, and can only guess at these DLLs’ functions. Sorry, I’ll add more later.
4. IDE changes: Platform Builder is gone, replaced by Visual Studio 2005.
This was foreseeable. Before CE 4, PB was taken seriously. In CE 5, PB was just a wrapper around command-line tools. Since it’s just a wrapper, why bother — make it a Visual Studio plug-in. Visual Studio IDE has been very flexible since .NET. I remember a book called “Visual Studio Programming” — not about writing programs with VS, but about programming VS itself. Some Chinese developers even made GBA development tools as VS plug-ins. For Microsoft people, it’s a piece of cake.
This rumor was confirmed this afternoon. I visited a Taiwanese website and saw the following pictures.
I can’t imagine this is Photoshopped by our dear Taiwanese compatriots. So it must be real. EVC was eaten by Visual Studio in the 5.0 era; now PB in 6.0 also loses its virginity. I wonder if Windows XP Embedded’s IDE will also become a VS plug-in in the near future. Amen.
Seems like in the future, for any Microsoft developer — embedded, enterprise, desktop, applications, or kernel — one Visual Studio is enough.
