1. A system allowing for communication between objects of differing versions and allowing for communication between objects of differing types, comprising: a proxy object created at runtime that represents a real object, wherein the proxy object is configured to receive information from a calling object in lieu of the real object, and the proxy object is further configured to process the information, wherein the information includes a first metadata associated with the calling object; and an adapter for matching the first metadata to a second metadata, wherein the adapter is configured to receive the first metadata from the proxy object, wherein the first metadata is received as an early bound invocation and passed from the proxy object to the adapter through a set of version resilient contracts, and wherein the adapter is configured to receive the second metadata from the real object as a late bound invocation, allowing the target object to change at runtime resulting in the real object and the calling object to version independently of one another.