## 2 Background
### Software Update Requirements  
Software updating has always been an important topic for wireless sensor network (WSN) research. In the 1978 Distributed Sensor Networks Workshop, arguably the root of published WSN research, three important functional requirements were identified. These are: the need for dynamic modifications, the need for heterogeneous node support, and the need to integrate new software versions into a running system [6].  
More recently, other functional requirements have been identified: the importance of the update being reliable, and reaching all the nodes [7]; the need to support fragmentation of the software update over the radio network [7]; the ability to monolithically update all the code on a node [8]; coping with packet loss in the context of disseminating data to an entire network [8]; the need to support version control, so that compatible updates take place when and where needed [9]; the need for special boot-loaders to support the update process [9]; and the need for mechanisms to build a software update and inject it into a WSN [9]. In addition to the overall management of the software update process [1],other requirements relate to the potential need to update the update mechanism itself [10], to reconfigure various parameters (such as performance or dependability) rather than code [10], and the need for utilities to provide users with standardized ways to manage online changes [10].  
A number of performance requirements have been identified as follows: for the updates to be _non-intrusive_ (_i.e._, automatic and _over-the-air_, as opposed to manual over a direct connection); for the update protocols to have a low impact on the performance of the WSN sensing application, and to have a minimal impact on the energy resource of the nodes, and to be resource aware (especially for high energy operations such as flash rewriting [9]); the need to minimize the impact on sensor network lifetime, and to limit the use of memory resources [7]; the need to minimize processing, limit communications in order to save energy, and only interrupt the application for a short period while updating the code [8]; the possible need for the update to meet various real-time constraints [11]; the need to fit within the hardware constraints of different platforms [12]; and the need to cope with asymmetric links and intermittent disconnections, meet the conflicting needs of a low overhead for update metadata overhead while providing rapid update propagation, and to be scalable to very large, high density networks [13].  
Security and robustness are also key issues for WSNs in general [14], and for WSN software and configuration updates in particular [15]. Security is critical as an insecure software update mechanism would provide a trapdoor to circumvent any other security measures. Three key issues in the secure update of distributed system software are to provide: integrity, authentication, privacy, and secure delegation [16], and intrusion detection [17]. The ability to download new software into a node introduces a whole new set of failure modes. These include detecting and handling failure (or corruption) of the updated application, other applications, the operating system, and of the network [18], to tolerate hardware and software failures, to monitor system status [10], and to meet other dependability criteria (availability and reliability) [19]. This paper does not include a detailed survey of security-related issues.  
Finally, ease of use and maintenance are additional key factors in the future success of wireless sensor networks [1]. Remote software/configuration updating is a core component for both of these factors, improving ease of use by providing flexibility in a deployed network, and directly supporting the maintenance function.