Being able to update the software on devices in the field is at the very least a useful attribute, and if the device is connected to the internet, it becomes an absolute must. And yet, all too often it is a feature that is left until the last part of a project, on the assumption that it is not a hard problem to solve. In this chapter, I hope that I have illustrated the problems that are associated with designing an effective and robust update mechanism, and also that there are several open-source options readily available. You do not have to reinvent the wheel any more.
The approach used most often, and also the one with most real-world testing, is the symmetric image (A/B) update, or its cousin the asymmetric (recovery) image update. Here, you have the choice of SWUpdate, RAUC, and Mender. A more recent innovation is the atomic file update, in the form of OSTree. This...