A network interface device arranged to couple a host computing device to a network, the network interface device comprising: a plurality of hardware resources; an application (310, 420, 510, 520) configured to run on one or more of the plurality of hardware resources of the network interface device; a runtime support that supports the application (310, 420, 510, 520), wherein the runtime support is configured to: make requests to an application programming interface (330, 430, 540) of the host computing device; receive, from the application programming interface (330, 430, 540), a first indication of available hardware resources of said plurality of hardware resources of the network interface device, wherein the first indication of the available hardware resources further comprises a second indication of accelerator block availability, the second indication indicating an availability in each of the available hardware resources of at least one of: cryptographic processing blocks, video processing blocks, machine learning acceleration blocks; analyse code of the application (310, 420, 510, 520) to determine functions called in the code; based on: i) the analysis of the code, ii) the determined functions called in the code, and iii) the second indication of accelerator block availability of the available hardware resources, select between the available hardware resources of said plurality of hardware resources to determine a selected hardware resource for running the application (310, 420, 510, 520), so that the application runs on the selected hardware resource; analyse performance of the application (310, 420, 510, 520) when running on the selected hardware resource; and based on the analysis of the performance, modify the selection of the selected hardware resource and cause the execution of the application (310, 420, 510, 520) to move to another hardware resource of the plurality of hardware resources. a plurality of hardware resources; an application (310, 420, 510, 520) configured to run on one or more of the plurality of hardware resources of the network interface device; a runtime support that supports the application (310, 420, 510, 520), wherein the runtime support is configured to: make requests to an application programming interface (330, 430, 540) of the host computing device; receive, from the application programming interface (330, 430, 540), a first indication of available hardware resources of said plurality of hardware resources of the network interface device, wherein the first indication of the available hardware resources further comprises a second indication of accelerator block availability, the second indication indicating an availability in each of the available hardware resources of at least one of: cryptographic processing blocks, video processing blocks, machine learning acceleration blocks; analyse code of the application (310, 420, 510, 520) to determine functions called in the code; based on: i) the analysis of the code, ii) the determined functions called in the code, and iii) the second indication of accelerator block availability of the available hardware resources, select between the available hardware resources of said plurality of hardware resources to determine a selected hardware resource for running the application (310, 420, 510, 520), so that the application runs on the selected hardware resource; analyse performance of the application (310, 420, 510, 520) when running on the selected hardware resource; and based on the analysis of the performance, modify the selection of the selected hardware resource and cause the execution of the application (310, 420, 510, 520) to move to another hardware resource of the plurality of hardware resources. make requests to an application programming interface (330, 430, 540) of the host computing device; receive, from the application programming interface (330, 430, 540), a first indication of available hardware resources of said plurality of hardware resources of the network interface device, wherein the first indication of the available hardware resources further comprises a second indication of accelerator block availability, the second indication indicating an availability in each of the available hardware resources of at least one of: cryptographic processing blocks, video processing blocks, machine learning acceleration blocks; analyse code of the application (310, 420, 510, 520) to determine functions called in the code; based on: i) the analysis of the code, ii) the determined functions called in the code, and iii) the second indication of accelerator block availability of the available hardware resources, select between the available hardware resources of said plurality of hardware resources to determine a selected hardware resource for running the application (310, 420, 510, 520), so that the application runs on the selected hardware resource; analyse performance of the application (310, 420, 510, 520) when running on the selected hardware resource; and based on the analysis of the performance, modify the selection of the selected hardware resource and cause the execution of the application (310, 420, 510, 520) to move to another hardware resource of the plurality of hardware resources.