At one time, commercial software applications were released as single binary executable files. Discussions of the notion of a "software component" were almost always limited to the context of source code. However, with the proliferation of numerous new technologies, applications are now more typically released as collections of cooperating binary components. While there is significant industrial emphasis on binary component technologies, computer science curricula have not yet standardized upon a corpus of fundamentally sound concepts to support education within this paradigm. In this paper, we describe our efforts to define a fundamental core set of concepts to support this important programming paradigm, as well as our efforts to integrate these concepts into a typical undergraduate computer science curriculum.