The .NET Micro Framework was originally developed in Microsoft Research, somewhat indirectly, to serve as the operating environment for both commercial product efforts (such as the Smart Watch with MSN Direct, Windows SideShow, Microsoft TV set-top boxes) and to support various ongoing research and incubation projects (such as sensor networks, healthcare products, alternative user input, and wearable/ubiquitous computing). The goal was to create an environment that could be used to develop a variety of embedded projects targeting small, usually connected, but always highly constrained hardware while using the rich Microsoft Visual Studio development system and familiar .NET programming model (specifically, C# and the Framework Libraries). In short, we wanted the .NET Micro Framework to become the internal platform of choice for developing embedded devices using managed code.
As it turns out, our initial public disclosures about plans for this operating environment to support these various efforts (which would soon become the .NET Micro Framework) generated overwhelming interest, feedback, and calls to publicly release it. The calls came from our industry partners (as we met to discuss product opportunities), from academia (as we presented at conferences and "fests") for both pedagogical and research use, and from hobbyist communities (as we met with user interest groups at the Microsoft corporate campus and elsewhere). These groups were interested in using .NET in their robotics and other automation projects, and it became clear that many applications requiring low-cost hardware and efficient power consumption as well as small application footprint and memory capacity would benefit from this new operating environment. To focus on delivering this technology more broadly, the SPOT (Smart Personal Objects Technology) team made the decision to form a separate development group (based on the original development group) whose goal was to build, port, market, and support the .NET Micro Framework.
The .NET Micro Framework has the potential to do for small embedded devices what Visual Basic first did for the personal computer: open the environment to a much larger pool of developers by simplifying what has been a very complex development environment. This solution is also integrated with the same Visual Studio tools that developers use for the other Microsoft embedded platforms. This means that in vertically integrated solutions, the same resources that work on the servers and the intermediate devices can also work on the smallest devices in a cost-effective way. The .NET Micro Framework is the operating environment that brings these advantages to devices otherwise too small for the other Microsoft embedded solutions.
New generations of 32-bit processors are becoming competitive with older 8-bit and 16-bit microcontrollers as they become more power-efficient and less expensive. This trend, combined with declining memory prices, makes it possible for a reliable, managed code environment to be the right choice for many projects. For any given application, then, the question is whether it is more cost effective to increase the variable costs (the costs to manufacture each device) slightly to gain the advantages of lower development cost, better system reliability, and extensibility, which a general operating environment provides. Although for a large segment of the embedded market, the recurring costs of materials will continue to be paramount and prohibitive, for a markedly growing segment, the ease of development, code reuse, flexibility, and other advantages offered by higher-level systems will increasingly be the determining factors.
More power-efficient radios and communications protocols and continued reduction in the cost of integrating these communications capabilities are enabling a new class of connected small devices that are integrated with other devices in an active environment. Many opportunities exist to deploy new networks of small devices in areas like industrial and home automation, healthcare, and retail.
These solutions are increasingly composed of many small devices interacting with each other and with larger systems, and developers can now build a solution that uses the .NET Micro Framework to support them. Communications and processing code can be moved from one part of the system to the other seamlessly, enabling shared code to be used by both client and server, for example. This type of application also benefits from the efficiency and robustness of using the tools and managed code environment enabled by the Framework.