Is Windows CE / Windows Embedded Compact the right choice for a new project? Which version?

Monday, August 3, 2015

WindowsBack in 1996, Microsoft introduced a product called Windows CE. It was targeted for Palm-PC/PDAs. The feature set used to be quite simple when looking at it nowadays. Not even VGA resolution was supported, no color, only one single application which takes the full screen. This sounds quite antique. Well, regarding only one application on the full screen: some big companies are just about to change this these days (iOS), other companies even go back to this approach, anyway, that’s just a side note.

Since then, a lot happened to Windows CE. More features have been added such as a real-time scheduler, .NET support, more and more parallel processes, and of course the name changed. What initially was Windows CE (WinCE) went to Windows Embedded CE (still WinCE) and then to Windows Embedded Compact (WEC). I will use the term WinCE when I talk about all versions and use specific versions when talking about them.

We at Toradex started with WinCE from the first day. We have developers who even started their WinCE journey with the very first WinCE 1.0 version. So we were quite confident, that WinCE (WinCE 5.0 back then) was the right choice for our first computer modules.

WinCE 5.0 came with an excellent kernel/scheduler which provided real-time capabilities and many other nice features you also know from a normal Windows PC. There were some limitations of course, like 32 simultaneous processes only, 32 MB memory per process, etc. However, there were times when these limitations were not an issue. I sometimes wish these times back when I have to download a 100MB+ installer to only install a simple printer driver.

Toradex computer modules based on the Marvell PXA SoCs still support WinCE 5.0 and we even actively provide support for it, including maintenance updates, etc. It’s still a very good and robust OS which fits many needs.

Since applications were growing fast, the limitations of WinCE 5.0 had to be conquered. That’s where Windows Embedded CE 6.0 came into play. Microsoft increased the memory size per process and also the number of simultaneous processes tremendously. Even though there were many changes also in the kernel, Microsoft managed to release an operating system which was quite compatible with its predecessor. This helped a lot for migrating applications and drivers. But of course, there were also limitations here. One of the most prominent ones is definitely missing support for multi-core architectures.

WinCE 6.0 is available on many of our computer modules, such as the Colibri Vybrid (VF50 and VF61, both single core Cortex-A SoCs), the Colibri and Apalis Tegra modules, and of course our Colibri PXA modules. This means Toradex is still actively developing on this operating system without any plans to stop.

Since using a single-core operating system on a multi-core SoC doesn’t make too much sense, we needed a new OS. Windows Embedded Compact 7 filled the gap. There were other improvements too, like support for up to 3 GB of physical RAM, support for OpenGL ES 2.0, NDIS 6.1 to only name a few. Even most WinCE 5 and 6 applications and drivers still run out of the box, but note, they only run on one core and don’t make use of the real benefits of a multi-core system. But what are the limitations now? We have a lot of RAM supported, multi-core, etc. What’s missing?

WEC7 is definitely one of the main WinCE versions we are supporting at Toradex. We have BSPs for all our current modules, including the successful NXP®/Freescale i.MX 6 based Colibri and Apalis modules. We don’t support it for our PXA modules, as we don’t see much benefit for these modules.

To get back to the question, what’s next after WEC7? Well, we didn’t talk about the Arm architecture so far. Until WEC7, the kernel and application were built using Armv4I or Armv7 instructions. For Windows Embedded Compact 2013, Microsoft took their latest compiler from Visual Studio which supports Armv7T2 (thumb-2) code generation. This code consists of mainly 16-bit instructions and therefore decreases the size of applications and even more important, improves the instruction fetching, as less code per instruction has to be fetched. There is much more which WEC2013 brings along such as an improved networking stack, .NET 3.9 that also supports multi-core, and, probably one of the most important updates, the development environment has been updated to Visual Studio 2012/2013.

We provide WEC2013 BSPs for all our modules if technically possible. There are some requirements which have to be met such as Armv7 architecture and 32 floating point registers. The latter comes for free if NEON is available. So we support WEC2013 on our Tegra T30, i.MX6, and Vybrid products.

Now the big question, does it still make sense to use WinCE as an OS nowadays? The answer is simply YES. If you are looking for a feature rich real-time operating system with an easy environment for application development and debugging, WinCE is the right choice. But, which version of WinCE should you use? If you ask your marketing guy, he will say the latest and greatest. Well, that’s an option, but it’s not as easy as this, as usual. I try to summarize at this point and provide a few reasons for every WinCE version supported by Toradex which should help you with your decision.

  • Windows CE 5 (Visual Studio 2008)
    It’s a very good OS, but starting development on this OS doesn’t make too much sense, as most likely you will select a hardware which is newer and a WinCE 5 BSP won’t be available.
  • Windows Embedded CE 6 (VS2008)
    Yes, why not. If you have hardware with one core for the OS only, WinCE 6 might be a good choice. It supports .NET 3.5. It might also be a more cost effective solution than newer WinCE versions, as Toradex provides WinCE 6 licenses on the Colibri Vybrid modules included in the price. Using a newer WinCE version would require you to buy a separate WinCE license. I also would like to mention the small memory footprint which helps a lot on low-cost (low-memory) products such as our Vybrid products.
  • Windows Embedded Compact 7 (VS2008)
    If you have any legacy code or driver which needs to run on a WinCE system but still want to make use of a multi-core system you should go with WEC7. It also allows you to build applications for Armv7 which is slightly more efficient. WEC7 has been on the market for some years now and is a very stable OS.
  • Windows Embedded Compact 2013 (VS2012/VS2013)
    There are two main reasons for this OS. One is the development environment VS2012 / VS2013. Most companies nowadays have either of these systems anyway. And the second important reason is the multi-core support of the .NET 3.9 framework.

One reason against WEC2013 is the binary incompatibility with legacy applications and drivers. If you have to execute binary code built for older WinCE versions, you cannot do this on WEC2013.

If you are still not sure if WinCE is the right choice for you or which WinCE version you should select for our computer on module products, we are happy to help you at

Author: Roman Schnarwiler, CTO, Toradex AG
Share this on:


Rose Philanthropist - 8 years | Reply

We were also debating between Linux with RT patch, vs WCE7. There are a lot of tools available for Linux but there is a lot of complexity in building the OS. We were trying to use Yocto to build our OS and that has a steep learning curve. We decide to go with WCE7, it has been relatively easy so far. We used Platform builder. We also found tools for monitoring our WCE devices such as Remote Task Monitor ( Whereas for Linux we have "top" command to monitor processes, the Remote Task Monitor for WCE let us monitor processes remotely and we didn't need to be physically with the device. We also found Microsoft support pretty decent, although we didn't need it much. One time we had to ask them to update the socket driver for us.

Shella - 8 years 11 months | Reply

Nice explanation Mr. Roman. :)
But what you say for the life-cycle of the WinCE OS from a beginner's point of view. Don't you think its use and support is depreciated?

If suppose my product will come in market after 3-4 years then what should be the right choice of the OS, WinCE or Linux?

Hope to hear from you back.

Roman Schnarwiler - 8 years 11 months | Reply

Hello Shella,

We can definitely recommend Windows Embedded Compact also for new designs. As mentioned, WEC2013 might be the right choice for a complete new start because of the most recent development environment (Visual Studio 2013).
Microsoft uses WEC2013 as their realtime operating system with long term support availability. So yes, as a beginner with no experience it will be quite easy to write applications under WEC2013 and even if you would like to go into the market a few years from now it will still be supported.
Of course we can't say how the situation looks in 10 years, however, we will monitor it and keep advising our customers.
All in all, long term support shouldn't be the concern for your decision, you can focus on the other, more technical pros and cons of each operating system.

Do reach out in case of further queries. Thanks.

Leave a comment

Please login to leave a comment!
Have a Question?