Ensemble is a group communication system that demonstrably achieves a wide range of goals. It is a general-purpose communication system intended for constructing reliable distributed applications; it is a flexible framework for carrying out research in group ware protocols; it is a large-scale, system-style implementation built in a state-of-the-art programming language; and it is also a mathematical object designed to be amenable to formal analysis and manipulation. Thus, Ensemble straddles a number of disciplines of computer science ranging from systems architectures to formal methods. The principal advances described in this thesis are the creation of the Ensemble system and the demonstration that it exhibits the properties just mentioned. The thesis begins by presenting the Ensemble architecture, as well as background in group communication. We describe the various components of the architecture, give examples of their interactions,and compare this architecture with that of other layered communication systems. The Ensemble protocols make heavy use of layered micro-protocols. We describe optimization techniques that greatly reduce the performance overheads introduced by layering and show how the architecture facilitates these optimizations. In addition, we show how to formalize these optimizations in type theory and implement them using the Nuprl theorem prover. Ensemble is implemented in a dialect of the ML programming language. We describe how the use of ML impacted the system, and present a wide range of comparisons between Ensemble and a similar system implemented in C.