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 said dynamically assembling comprises flexibly switching between installing said at least one middleware component locally at said client and installing a smaller middleware component at said client that uses said at least one middleware component remotely as a service provider.