With the increasing power and decreasing size of successive generations of microprocessor chips, the ability to provide distributed computing on a wide-scale basis is becoming a practical reality. Generally speaking, distributed computing, or more generally ubiquitous computing, refers to an environment in which programs make calls to remote address spaces that are outside of the particular address space within which the programs are executing. The address space to which the call is made may be located on a different machine from the one on which the calling program resides. As one example, a vehicular navigation program that is executing on a microprocessor within an automobile may make a call to a remote traffic reporting service, to obtain information about traffic congestion that can be displayed to the driver of the automobile.
To facilitate the implementation of a distributed computing environment, various frameworks have been developed. One example of such a framework that is adapted to the Java programming language is known as the Jini technology, developed by Sun Microsystems. In a framework of this type, processing resources provide services that can be employed by clients. The processing resources may be located anywhere on a communications network. The particular location of the service provider, as well as the network that is employed to deliver the services, can be transparent to the client. Thus, in the example given above, the navigation program located in a particular automobile functions as a client of a traffic reporting service. The particular location of the traffic reporting service and the type of network used to provide its information to the client, e.g. a cellular telephone system, need not be known to the client. These implementation details are abstracted by the distributed computing framework.
In general, it is desirable for a distributed computing system to implement an open architecture, whereby new services and new clients can be dynamically added to the system. In such an arrangement, the clients do not have prior knowledge about the services, particularly the message structure of calls that need to be made to access the services. To support such a dynamic, open environment, distributed computing frameworks such as the Jini technology provide a mechanism whereby, when a device which offers one or more services is connected to the network, it advertises the availability of its services, and uploads objects which implement the interfaces necessary to access those services. For example, if a printer is connected to the network, it may upload its printer driver and its interface. It may also upload attributes about the service, such as whether it supports a given page description language or color printing.
When a client desires to use a service, it can check the attributes to make sure the functions it needs are supported. If so, the stored object is copied to the device where the client resides. In the preceding example, therefore, the printer driver and the interfaces are downloaded. Thereafter, the client can employ one of the downloaded interfaces to make the appropriate calls to the desired service. This type of distributed computing infrastructure relies upon code mobility to enable clients to employ services on the network without pre-installing or loading drivers or other software associated with those services. Whenever a new service is to be made available on a network, the service deploys the necessary data, e.g. the appropriate interfaces, that enable remotely located clients having no prior knowledge of the service to use it.
It is desirable to be able to use a variety of different type of devices as hosts for services in a distributed computing system. One device of particular interest is a smart card, i.e. a card containing a microprocessor and associated memory. In the case of a smart card which supports the Java programming language, for instance, applets stored on the card can be designated as personal services. Due to the security that is inherently associated with a smart card, it provides a particularly suitable platform for services where data is only to be accessed by trusted entities. One example of such a service is an electronic purse application. In an online purchasing transaction, a vendor can operate as a client of the electronic purse service, to obtain funds for a completed transaction. Because of the security provided by a smart card, assurance can be provided that only authorized vendors will have access to the funds in the electronic purse. The portability of the smart card readily lends itself to use in a distributed computing environment, so that the issuer of the card, e.g. a bank, can authorize access to funds in the electronic purse from wherever the owner may be located.
One difficulty associated with the use of smart cards as service providers in a distributed computing environment, however, relates to the information that must be deployed within the distributed computing framework to enable clients to access the service. Specifically, smart cards have a limited amount of memory that is available to store the application programs that implement the services. As a result, there may not be sufficient memory capacity to also store the information that needs to be deployed throughout the distributed computing environment to enable clients to access the service. For instance, a given service may have a number of different interfaces associated with it, to accommodate different types of clients. If a given smart card contains multiple applications that provide various services, it may not be possible to store all of the interfaces associated with these services, that need to be uploaded to the distributed computing infrastructure, in the limited amount of memory that is available on the card. Similar limitations are also associated with other portable types of devices having a relatively small amount of internal memory capacity, such as personal digital assistants (PDAs) and cellular phones.
A second concern associated with the use of smart cards is the fact that many terminals that receive smart cards are specific to one application on the smart card. For instance, an automated teller machine may have knowledge about a banking application on the card, but does not know how to access other applications that might also be on the card, such as a phone/address book, etc. Hence, even if the machine is connected to a distributed computing network, it cannot be used to provide services associated with these other applications via such a network.
Accordingly, it is desirable to provide devices having limited amounts of available memory, such as smart cards, personal digital assistants, and the like, with the ability to function as hosts for services within a distributed computing environment.