1. A method for assembling middleware at a client, wherein the middleware is system software that adds a layer of indirection between an operating system of the client and one or more applications and that enables the one or more applications to interoperate, said method comprising: selecting at least one middleware component from a group of one or more middleware components, wherein said selecting is based at least in part on a first profile defining one or more requirements and capabilities of said client and a second profile defining one or more requirements and capabilities of said at least one middleware component; and dynamically assembling said at least one middleware component at said client, wherein the dynamically assembling comprises at least one of: installing said at least one middleware component at said client or using one or more other selected middleware components remotely as a service.