I have always been interested in "ubiquitous" computing-that is, the idea that computers will not be destinations where trained people execute a limited number of tasks but rather that computers will pervade our environment and collaborate to enhance our lives. Rather than being locked in my office as I am now, I will at some point be able to interact with any one of a number of inconspicuous end points, and the information will find its way to the node that can service that request. In the case of writing this Foreword, I might be talking to my phone headset and later ask my printer for a draft to peruse. That is the world some of us long to build.
Five years ago, I talked to Donald Thompson about joining a team in Microsoft Research that was taking a new tack on ubiquitous computing. Rather than continuing the series of research projects on Ubiquitous Computing conducted over the last 10 years, the team decided to build a commercial product and solve all the problems they had encountered during that time. One interesting problem in particular they had to solve was deciding the right platform for this product. The team looked at a number of potential solutions, some commercially available and some available only inside the research organization. They even developed prototypes for the most promising of these solutions, but determined that none were going to provide the platform needed for a successful product. The requirements for this product included being extremely power-efficient so that the device could be battery powered, and having processor and memory be as inexpensive as possible to ensure that the device was commercially viable. However, these are standard embedded requirements-the unique requirement was that the device be open to applications developed by other developers. This requirement has two implications: the platform has to accept new applications (assemblies) in the field in a safe way, and the application development environment has to be accessible to the largest number of developers. This is a unique combination of embedded and desktop constraints that the platform would need to provide.
At the time we spoke, Donald outlined a new approach that he and the team were just embarking on. One of the developers (Davide Massarenti) had done some initial experimentation and thought it was possible to make a small version of the .NET Common Language Runtime (CLR) that included enough execution control to support running a managed code environment directly on the hardware. For those of you who have worked with the .NET Framework or the .NET Compact Framework, this is revolutionary in several ways. First, the other frameworks are runtimes that are layered on an existing operating system. Second, these frameworks themselves are megabytes even without the underlying operating system, rather than being the kilobytes that were required for the device being considered. The result of these revolutionary requirements was that the CLR had to be written from scratch to fit, and that every piece of the design and every algorithm had to be rethought so that it would be small and power-efficient while still retaining the robustness of the managed environment. One example of how these requirements manifest in these devices is the serialization. Because these small devices need to communicate over a wireless protocol, and every bit sent represents a power drain, the .NET serialization algorithm was reworked to be 20 percent more efficient.
This is the story of the inception of what was to become the Microsoft .NET Micro Framework. Over the next year or so, the platform was refined and made to work, and once it was released on the Smart Watches, a number of other uses for the platform, both internally and externally, popped up. The platform has since been used on some of the MSTV set top boxes and in the initial Windows Vista Sideshow devices as well as in a growing number of external commercial products. It has really been exciting to watch interest in the platform grow.
The core value of the platform remains what Donald and I discussed on that first day-a platform that provides the productivity and broad developer base of the modern computing paradigms while at the same time being rigorously designed for embedded applications. Work continues in that same vein, with the team adding support for additional "desktop" development elements like Web Services on Devices while continuing to minimize the footprint and expand the range of embedded applications the platform can be used on. One of the greatest testaments to the success of this effort for me came when I introduced a very experienced .NET programmer to the .NET Micro Framework and heard his excitement when he found that within minutes, he was toggling GPIOs and touching the hardware in ways that he never thought he would.
And this brings us to the book that Donald and Rob have written. This book is very much on that same theme, that is, how to bring the robustness and efficiencies of modern computing paradigms to very low-level programming by using the .NET Micro Framework. If you are currently a desktop developer familiar with .NET (or even C++), you will find that after working through a few chapters, you can touch the hardware in ways that you never thought you would. If you are currently an embedded programmer, you will find that the managed code and world-class tools make the development of applications so much easier-so much so that we hope you will find it hard to go back! This book demonstrates how to work with the emulator so that you can try out applications without any hardware. The book also has examples of how to use several of the development environments that were available when the book was written. Even at the time that I am writing this Foreword, several more development boards have come out, and so there is a range of hardware for the reader to play with as soon as these boards are ready. You can find the latest list at http://msdn.microsoft.com/embedded/netmf.
I think it was Donald who first used the analogy that the .NET Micro Framework is to embedded application development as Microsoft Visual Basic was to the desktop-a game-changing event. It changes the game in bringing more developers to the problem of developing applications for very small devices, and by increasing the productivity of application development, which hopefully translates into a marked increase in the rate of innovation in the embedded space. My hope is that as you work through this book and become familiar with the .NET Micro Framework, you start to think about how easily you can build intelligence into everyday objects, and how these objects can be connected to create even greater collaborative intelligence. In this way, you can help create the world where computers pervade our environment and collaborate to enhance our lives.
Colin Miller, Product Unit Manager, .NET Micro Framework