1. A method of making providers of a particular kind of data available to an application program, comprising the steps of: discovering whether one or more data providers are configured to provide the particular kind of data; when a data provider capable of providing the particular kind of data is discovered, determining whether the discovered data provider is either a connected data provider or a virtual data provider; when a discovered data provider is determined to be a virtual data provider, instantiating the virtual data provider; and when a data provider configured to provide the particular kind of data is discovered, whether the discovered data provider is a connected data provider or a virtual data provider, making a data-provider handle for the discovered data provider available to the application program with a common interface comprising a method to retrieve a current value of a given data provider and a method to subscribe to a notification that a given data provider has generated a new value; wherein the common interface is universal for the application program with respect to the one or more data providers whether the one or more data providers comprise active data providers, passive data providers, or hybrid data providers.