A computer-implemented method comprising: storing a trigger (251b, 252b, 251c, 252c, 284c) received from a second device, in a memory of a first device (120, 130), the trigger being an association between a condition (261b, 262b, 261c) and an identifier (271c, 271b, 272b) of a program (210a, 210b, 210c, 215a, 215b, 215c), wherein the condition is expressed as a set of parameters; accessing, with the first device, the trigger stored in the memory; determining, with the first device, whether the condition associated with the trigger has occurred based on a comparison of information received at the first device with the set of parameters of the condition associated with the trigger; determining, with the first device when the condition associated with the trigger is determined to have occurred, whether the program, identifier of which is associated with the trigger, is installed on the first device; when the program, identifier of which associated with the trigger, is not installed on the first device, using the identifier of the program associated with the trigger for providing a request for a copy of the program, identifier of which is associated with the trigger, on the second device, and receiving, at the first device from the second device via a network in response to the request, an installation file of the program; installing, on the first device, the program, identifier of which is associated with the trigger, based on the installation file; and providing, with the first device, a message associated with the trigger to the program, identifier of which is associated with the trigger, after the program, identifier of which is associated with the trigger, is installed; wherein the method further comprises initiating execution of the program, identifier of which is associated with the trigger, after installing the program and before providing the message. storing a trigger (251b, 252b, 251c, 252c, 284c) received from a second device, in a memory of a first device (120, 130), the trigger being an association between a condition (261b, 262b, 261c) and an identifier (271c, 271b, 272b) of a program (210a, 210b, 210c, 215a, 215b, 215c), wherein the condition is expressed as a set of parameters; accessing, with the first device, the trigger stored in the memory; determining, with the first device, whether the condition associated with the trigger has occurred based on a comparison of information received at the first device with the set of parameters of the condition associated with the trigger; determining, with the first device when the condition associated with the trigger is determined to have occurred, whether the program, identifier of which is associated with the trigger, is installed on the first device; when the program, identifier of which associated with the trigger, is not installed on the first device, using the identifier of the program associated with the trigger for providing a request for a copy of the program, identifier of which is associated with the trigger, on the second device, and receiving, at the first device from the second device via a network in response to the request, an installation file of the program; installing, on the first device, the program, identifier of which is associated with the trigger, based on the installation file; and providing, with the first device, a message associated with the trigger to the program, identifier of which is associated with the trigger, after the program, identifier of which is associated with the trigger, is installed; wherein the method further comprises initiating execution of the program, identifier of which is associated with the trigger, after installing the program and before providing the message.