Windows CE App Container on Windows 10 IoT Core

Microsoft is providing a way to “modernize” older Windows CE applications by moving these onto Windows 10 IoT Core using a new feature called Windows CE App Containers.
This is certainly well-intended, but customers should really double-check their use case, if it really makes sense to follow down that path, just to avoid ending in a cul-de-sac.
As a former Windows Embedded MVP and Windows Embedded Silver Partner, I am very aware of the variety of CE applications existing and only in rare cases I would feel good with recommending to containerize an existing CE app to a customer.


If you feel the need to modernize an existing Windows CE system, there are several options you should consider first, depending on the nature of your application.

Here is a quick list of options that comes to my mind:

  • Hard real-time systems written in C or C++
    • Windows 10 IoT Core nor Enterprise are hard real-time-capable, due to Windows 10’s preemptive scheduler
    • Have a look into alternative hardware and operating systems from other vendors, or, quite interesting, Azure Sphere from Microsoft that supports hard real-time and is security hardened for IoT at the same time.
      It also includes support for the ThreadX real-time operating system (also recently acquired by Microsoft).
  • Normal UI or service applications written in C, C++, Java or .NET Compact Framework
    • Check, if these applications can be modernized by a new design leveraging Cloud technology!
      Candidates would be Azure IoT, Azure IoT Edge as well as serverless approaches such as Azure Functions and Logic Apps, looking at the Microsoft Azure ecosystem.
      Have in mind that nearly always, when modernizing applications, it does not make sense just to adapt to the newest technology level! Think about redesigning your processes, architecture and streamline end user experiences leveraging modern Cloud technologies!
    • Move your application onto cross-platform technologies such as .NET Core and ASP.NET Blazor!
      This often shakes off the chains of being bound to a certain hardware/OS combination and you ideally are able to grow a family of devices using the same software across different hardware devices and OSes.
    • Use a Cloud native, distributed architectural approach to be able to grow and advance your solution organically
    • Change the communication strategy in your solution from connected, directed calls (as it often is to be found in older applications) towards asynchronous, message based communication.
      This will add a lot of robustness and extensibility to your system!
  • Applications using certain Windows CE Apps or desktop features
    • Port your application to Windows IoT Enterprise, this will be the only path to be future proof, as App containers as well as IoT Core are going to be end of life at the end of this century.
    • There may be rare cases justifying a transition via CE App Container as a transition/bridge solution, but these must be thoroughly analyzed!
      App Container support is not just lift and shift and comes with at least “some” porting effort.
      Check if this effort really is as small, as the marketing department says, against possible porting/redesign efforts explained above.
      I always recommend 20% of the estimated porting costs as a threshold. If the to be expected containerizing effort is higher, go for redesign.
    • Keep in mind, that containerizing is only buying you time, you will need to port the app anyway!
  • Really large and complex applications, which are expensive to port
    • OK, the first mistake is to put such a large and complex application on a small embedded device running Windows CE!
      I am pretty sure, with this kind of application, you are having other troubles, such as performance and resource management problems on the device, as well.
    • The best thing is to port your application to a capable Windows 10 IoT Enterprise embedded PC system, right away.
      Do not waste money on a bridge solution, as it may cause additional problems and is not really suited to solve the existing ones.
      Redesign is a must, to make your app more manageable and fix existing issues!

Yes, there certainly are more approaches and arguments, but I think the ones laid out above cover most of the ground of this discussion.


If you need some ideas how to handle the transition in your specific use case or if there are other questions, just drop me a line and we will find a way to help you out!

Alexander

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.