While interoperability and unrestricted connectivity is an important trend in networking, the reality is that many diverse systems with different hardware and software exist. Programming that serves to "glue together" or mediate between two separate and usually already existing programs is known as: