Tomorrow's system software must provide efficient resource management across a range of operating environments, and hence needs to adapt its policies dynamically to suit its changing environment. Currently such adaptation is hampered by modular software architectures that prevent informed adaptation by hiding all implementation details. This proposal advocates a new approach to building software that enables cooperative adaptation by the use of symbiotic interfaces. A symbiotic interface extends a system's application programming interface (API) to incorporate high-level abstractions designed to both better support the application's needs while simultaneously giving the system the information it needs to adapt its policies. A symbiotic interface encapsulates user level semantics to improve support for the application, and thus improves usability of the system. Capturing user-level semantics through the interface discloses information to the system, so it can make informed decisions on how to adapt to better suit the application's needs. Like symbiotic relationships in nature, the symbiotic interface allows mutually beneficial cooperation between the application and system. Professor Steere's educational plan involves creating advanced courses in systems architecture that focus on building adaptive and predictable systems, beginning with a survey course on mobile computing that concludes with a project in building adaptive software.