I haven't been programming much lately, I've been playing with Windows XP embedded instead. It's a great product that's not very well know. I'll probably be posting a lot more about this version of windows in the future so I thought I might start with describing my first impressions of it.
For people who don't know Windows XP embedded here's the short introduction. XP embedded, or XPe for short, is Windows XP Pro but broken up into 10.000 pieces (10,000 is actually a modest estimation) delivered on 8 cd's along with a lot of tooling to build up your own windows from scratch. This can vary from a stripped down installation for a NAS or a set-top-box to a fully functional Windows XP installation packaged for easy deployment to workstations in an office environment. XP Embedded is designed to run on single purpose devices though.
How does it work
Windows XP embedded doesn't come ready to install on your target device like windows XP Pro. You first have to install the tools and the component database on your workstation. You can use these to combine the components like lego bricks into an installable image. You can also componentize your own software to install with the images. Your images can be complete installations that are ready to run with all the software readily configured. XP embedded is clearly meant to be deployed in situations where you need to be able to deploy the same installation of windows to a large number of similar devices without having to configure every device by hand. Creating the components and the image can take some time but deploying the image to your target device is as easy as copying the files over. It's xcopy deploy for windows!
This article is to short to give a complete description of how the tooling works so I'll settle for a short introduction. The tooling consists of three main components plus some extra utilities. The first is the target designer. This is the tool that you use to put design and build the image you install on your target devices. Because the target designer knows about all the dependencies between the components you can just select the high level components you want to use like windows explorer or FreeCell. The target designer then makes sure your image contains all the components needed for your selected components and builds an image.
If you want to create your own components you can use the component designer. You can create your own components from pieces of software you want to deploy together with XPe. You can also create components that describe the hardware configuration of your target device. There are tools to scan your device that can help with this.
All the components are stored in the component database. This is SQL server database that contains all the information about the components. There's a manager tool that you can use to import your own components. If you are working with a large number of developers you can use a central database as a kind of source control repository.
The tooling is flexible but not as streamlined as visual studio for example. I found some strange problems. Importing a large directory tree into a component is a lot of work for example. And deploying registry settings with values that are too long can cause problems too.
While XPe can do everything XP pro can do there are some things XPe can do that XP pro can't. Here's where things get interesting...
The most useful features are the write filters. You can deploy XPe with some extra drivers that divert all write operations to the hard drive to memory. This means that the next time you boot the system any changes will be forgotten. This is very useful when booting from flash media. Flash memory has a limited number of writes so stopping the system from writing at all can be a good idea. If you want some files to be stored
XPe also has a modified ntloader component that enables the system to boot from USB flash drives. Something that's problematic for XP pro.
Last but not least HORM or Hibernate Once Reboot Many enables the system to reboot from the same hibernate state many times to shorten the reboot cycle.
Windows XP embedded isn't very well known. Most people know windows CE for mobile and embedded solutions and windows XP pro. I've seen lots of places like kiosks, cash registers etc where neither of these were a good match and XPe would have been a great solution. I think its a good idea for most developers to at least try it out. You can download a fully functional toolset on the Microsoft website. The images you create with it will only work for up to 180 days but that's enough to try out the system. The following websites also have lots of information on XPe.