The research program at Carnegie Mellon in Composable Software Systems has a pair of primary goals:
Research in the 1970's gave us a science of programming, providing the basis to formalize the meaning of a program in terms of the meanings of its constituents. We identified composition mechanisms such as sequential composition (;) for sequential programming and parallel composition (||) for parallel programming. We developed reasoning aids like loop invariants and termination functions to help programmers design and verify their code. Undergraduates now routinely learn how to perform formal reasoning and analysis of (sequential) programs made up of compositions of primitive constituents; they learn to make well-reasoned selections of algorithms and data structures to meet the needs of the problem at hand. We now have tools and programming environments that support both the day-to-day programming process and the less frequent formal reasoning process.
Achieving our first goal would give the community a science of composing systems. It would also establish models and principles for making pragmatic design decisions. Achieving our second goal would give the community tangible ways to compose systems in a systematic, rather than ad-hoc, way.