A computer-implemented method performed by a data processing apparatus, the method comprising: checking, by a first version of an ambient computing library (109, 119, 129, 139, 149) running on a first device (100, 110, 120, 130, 140), a manifest in the storage (107, 117, 127, 137, 147) of the first device to identify a second device (140, 130, 120, 110, 100) that provides a first service; sending, by the first version of the ambient computing library running on the first device, data to be processed using the first service provided by the second device to the second device through a second version of the ambient computing library running on the second device, wherein the first device and the second device comprise different computing hardware (105, 115, 125, 135, 145); receiving, by the first version of the ambient computing library running on the first device, first data comprising results from the second device through the second version of the ambient computing library, wherein the first data comprising the results is generated by the second device based on processing, with the first service provided by the second device using computing hardware of the second device, the data sent from the first device by the first version of the ambient computing library; characterized in that said method further comprises the steps of: voting, by the first version of the ambient computing library running on the first device, in an election for a leader device for a second service; determining, by the first version of the ambient computing library running on the first device, the leader device elected for the second service, wherein second data is stored on the first device and wherein the second data is of a type used by the second service; and sending, by the first version of the ambient computing library running on the first device, the second data to the leader device for the second service. checking, by a first version of an ambient computing library (109, 119, 129, 139, 149) running on a first device (100, 110, 120, 130, 140), a manifest in the storage (107, 117, 127, 137, 147) of the first device to identify a second device (140, 130, 120, 110, 100) that provides a first service; sending, by the first version of the ambient computing library running on the first device, data to be processed using the first service provided by the second device to the second device through a second version of the ambient computing library running on the second device, wherein the first device and the second device comprise different computing hardware (105, 115, 125, 135, 145); receiving, by the first version of the ambient computing library running on the first device, first data comprising results from the second device through the second version of the ambient computing library, wherein the first data comprising the results is generated by the second device based on processing, with the first service provided by the second device using computing hardware of the second device, the data sent from the first device by the first version of the ambient computing library; characterized in that said method further comprises the steps of: voting, by the first version of the ambient computing library running on the first device, in an election for a leader device for a second service; determining, by the first version of the ambient computing library running on the first device, the leader device elected for the second service, wherein second data is stored on the first device and wherein the second data is of a type used by the second service; and sending, by the first version of the ambient computing library running on the first device, the second data to the leader device for the second service. voting, by the first version of the ambient computing library running on the first device, in an election for a leader device for a second service; determining, by the first version of the ambient computing library running on the first device, the leader device elected for the second service, wherein second data is stored on the first device and wherein the second data is of a type used by the second service; and sending, by the first version of the ambient computing library running on the first device, the second data to the leader device for the second service.