Windows CE has been shipping with Shared Source for some time now (at least since Windows CE 3.0 which shipped way back in 2000) and perhaps even earlier if you consider the BSP code that shipped with Windows CE 2.0 (1997) for devices like ODO (the Hitachi D9000) which formed the basis of a whole range of other BSPs.
<diversion>ODO as a name has some history, many of the Windows CE development team were (and probably still are) Trekkies and at the time of Windows CE 2.0 launch were more than likely watching Star Trek Deep Space 9 which featured an interesting character by the name of ODO who was a Constable on DS9. ODO was a changeling, or shape-shifter – the Hitachi D9000 (ODO) was in many respects a hardware changeling, in so much as the base board didn’t have a processor, you plugged in a processor board which would then provide the personality or “shape” of the underlying hardware.</diversion>
With each new release of Windows CE more components/technologies of the operating system are added to shared source – there are two levels of shared source – the “public” shared source that ships with the evaluation versions of Windows CE and the full Windows CE product. And the second level is Premium Source that doesn’t ship with the Windows CE products but is available through an application process – premium source ships most of the operating system as source with the Windows CE premium source release.
So why does Microsoft ship shared source with Windows CE ? – there are a number of reasons – Windows CE is not like Windows XP/Embedded – for the desktop version of Windows XP (and Windows XP Embedded) the underlying processor architecture and hardware is x86 processor and PC architecture hardware – there isn’t a “porting” process to get Windows XP/Embedded running on a new system – the underlying hardware/processor for an XP/Embedded system is consistent across devices – this is clearly the case, take the Windows XP installer that installs the desktop operating system on the wide range of PCs and Laptops that exist today – sure some of the peripherals are different, but the underlying hardware configurating is the same – for Windows XP Embedded tools such as TA(p) [Target Analyzer] can be used to take a snapshot of your taget system hardware configuration and then make it easy to configure/boot a Windows XP Embedded o/s.
Windows CE on the other hand doesn’t need to run on x86/PC Architecture hardware – the operating system can run on ARM, MIPS, SH4, and x86 processors with very little hardware requirements – in this case developers need to “port” the operating system to their custom hardware, this typically involves working on a bootloader, OEM Adaptation Layer (OAL), device drivers etc… – having access to shared source is useful in this device bring up phase, giving developers the ability to set breakpoints in source, single step source, examine registers, memory, call stacks etc… and also modify the source to add additional debug information. Shared Source can also be modified and shipped on your device without needing to provide any of the changes back to Microsoft. The license agreement (a click/install agreement when installing the Windows CE product) gives a number of rights for using the shared source – these are.
More information about shared source can be found here.
But what about the Community Projects ? (webcam, phidgets, LSP sample – and others coming soon…) – We get feedback from customers and partners that they would like to see hardware or software supported on the Windows CE operating system that isn’t currently in the plan to be supported either in a main release (every two years) or in an upcoming feature pack – for last years Windows Embedded Student Challenge (WESC) there were two requests that came from the teams, support for USB WebCam and support for USB WiFi – Windows Mobile 5.0 has a camera well defined camera driver model and appropriate camera APIs for both native and managed code – the camera driver model for Windows Mobile 5.0 was added to Windows Mobile after Windows CE 5.0 shipped, so Windows CE 5.0 doesn’t have a camera driver model (expect to see that change with the upcoming Windows CE 6.0 release) – to “fill the gap” and make it easier for this years students to build cool/interesting devices we kicked off a community project to build a USB WebCam driver (link to GotDotNet workspace) based on the Logitech QuickCam Pro 5000 camera (which supports the USB Video Class specification) – The USB WebCam driver source then became the starting point for the Windows CE Phidgets driver.
Community projects are supported by the community project owner and by the community, in the case of the USB WebCam driver that would be Doug Boling – Our hope is that the community projects are useful for reference (examine the WebCam driver code, take a look at the LSP sample etc…) and for additional community development, for example, if you have another type of USB WebCam that you want to support you could modify the existing sample code and optionally drop the changes back to the community. You may have some ideas for additional community projects, if so leave a comment, let us know what you would like to see.
Expect to see more community projects being released over the coming months.
Let me know if you have any comments/questions.