The Millennium project at Microsoft Research investigated new ways to build distributed systems. Our primary goal was to provide a new level of abstraction for application programmers and users. The resulting systems managed machines and network connections for the programmer in the same way that prior operating systems managed pages of memory and disk sectors. We also explored making distributed systems be self-tuning and self-configuring; automatically adapting to changes in hardware resources
Overview
The Microsoft Research Millennium Project investigated new ways to build distributed systems. Our primary goal was to provide a new level of abstraction for application programmers and users. The resulting systems would manage machines and network connections for the programmer in the same way that existing operating systems manage pages of memory and disk sectors. The Millennium system would be self-tuning and self-configuring; it would automatically adapt to changes in hardware resources and application workload. Under the umbrella of the Millennium project, we built a number of prototype systems.
Raising the Level of Abstraction
Millennium raised the level of abstraction provided by the system to the application developer. For example, progammers using the Continuum prototype, were unaware that they were developing distributed applications. The system provided a single abstract machine from multiple physical machines. This is a radical departure from most distributed systems which provide the application with distributed services, but force the programmer to be aware of distribution.
Self-Tuning, Self-Configuring
To increase performance while simultaneously raising the level of abstraction, the Millennium prototypes self optimize.. For example, Coign could repartition distributed applications to minimize distributed communication costs. It could do so throughout the lifetime of an application because it modified binary files, not source code. Coign automatically modified the application to achieve optimal performance in a changing environment. Thus, Coign could take advantage of upgrades in network infrastructure or changes in an individual's usage patterns and workload.
Optimizing the Distributed Infrastructure
Providing aggressive abstraction often raises the issues of performance and customizability. The infrastructure part of the Millennium project focused on these two issues. Millenniun Falcon optimized DCOM for gigabit network with user-level networking. Another prototyped aimed at providing a componentized infrastructure that offers flexible customizability to the higher layer of Millennium as well as to the applications.
Summary
The Millennium project pushed the envelope of distributed application development. While the Millennium prototypes made distribution invisible to the application developer, developers in other distributed systems must be very cognizant of the fact that they are creating distributed applications. Millennium raised the programmer's level of abstraction without significant penalty to the application by aggressive optimization techniques throughout the lifetime of the application (even modifying the application while it is running), optimization of the underlying per-machine operating system, and eliminatation of unnecessary boundaries between the operating system and the application.
- Galen Hunt, Gerald Cermak, and Jr. Robert J. Stets, Operating System Application Programming Interfaces and Methods of Using Operating Systems, 19 February 2008
- Galen Hunt, Tools and Techniques for Instrumenting Interfaces of Units of a Software Program, 2 May 2006
- Galen Hunt, Network Independent Profiling of Applications for Automatic Partitioning and Distribution in a Distributed Computing Environment, 3 January 2006
- Galen Hunt, Heavyweight and lightweight instrumentation, vol. 6988271, January 2006
- Galen Hunt, Dynamic Classification of Sections of Software, 18 October 2005
- Galen Hunt, Gerald Cermak, and Jr. Robert J. Stets, Methods of factoring operating system functions, methods of converting operating systems and related apparatus, vol. 6826760, November 2004
- Galen Hunt, Interception of unit creation requests by an automatic distributed partitioning system, vol. 6629123, September 2003
- Galen Hunt, Service installation on a base function and provision of a pass function with a service-free base function semantic, vol. 6546553, April 2003
- Galen Hunt, Dynamic classification of sections of software, vol. 6381735,, April 2002
- Galen Hunt, Summarized application profiling and quick network profiling, vol. 6381628, April 2002
- Galen Hunt, Heavyweight and lightweight instrumentation, vol. 6263491, July 2001
- Galen Hunt, Automatic detection of per-unit location constraints, vol. 6230312, May 2001
- Galen C. Hunt, Michael L. Scott, and Robert J. Stets, Component-based Operating System APIs: A Versioning and Distributed Resource Solution, in IEEE Computer, vol. 32, no. 7, pp. 36, IEEE Computer Society, July 1999
- Galen C. Hunt and Michael L. Scott, Intercepting and Instrumenting COM Applications, in Fifth Conference on Object-Oriented Technologies and Systems (COOTS), USENIX, May 1999
- Galen C. Hunt and Michael L. Scott, The Coign Automatic Distributed Partitioning System, in Third Symposium on Operating System Design and Implementation (OSDI), USENIX, February 1999
- Galen C. Hunt and Michael L. Scott, A Guided Tour of the Coign Automatic Distributed Partitioning System, in Second International Enterprise Distributed Object Computing Workshop (EDOC ), Institute of Electrical and Electronics Engineers, Inc., November 1998
- Galen Hunt and Michael L. Scott, Coign: Efficient Instrumentation for Inter-Component Communication Analysis, February 1997



