1. A method comprising: upon receiving application code and an application descriptor of an application, identifying, by a processing device executing a virtual machine, a capability to be used by the application in view of the application descriptor, wherein the capability specifies a functional requirement of the application rather than a specifically identified software service; determining, by the processing device, a component that provides the functional requirement of the application specified by the identified capability in view of a component descriptor of the component, wherein the component comprises executable code of a specific software service that is usable by the virtual machine, and wherein the component descriptor specifies one or more capabilities provided by the component; identifying an additional capability to be used by the component in view of the component descriptor, wherein the component descriptor further specifies the additional capability to be used by the component; determining an additional component that provides the additional capability; determining that the application descriptor further specifies that the application will use the additional capability that is provided by the additional component; determining that a single instance of the additional component will provide the additional capability to both the application and the component based on at least a profile associated with the additional component, wherein the profile comprises a mode of operation for the additional component that is compatible with both the application and the component; and configuring the application, the component, and the additional component for execution by the virtual machine.