In today’s world, we are highly dependent on software systems together with devices for almost every task in our day to day life. Software system upgrades are released whenever it is necessary to accommodate the ever-changing user’s needs. The devices we use to run the software systems might be of different configurations, and we might be running different versions of these software systems on the devices. In such events, it is not possible for everybody to continue to run the same version of the software, nor can these billions of people using a software system update their software at the same time or even on the same day. Therefore, it has become necessary to design systems to maintain uninterrupted communication among the devices irrespective of software versions and device configurations. One of the key characteristics to achieve uninterrupted communication among the software systems is interoperability. In this thesis, we study techniques to achieve graceful software upgrades in distributed systems by implementing interoperability techniques. It is also observed that multiple software systems, like Bitcoin, failed to facilitate communication between versions.
This thesis identifies the necessary elements to support graceful upgrade, i.e., the principles that are recommended for an upgrade to avoid interruption of user’s work or data. These elements were discovered by closely studying multiple widely popular distributed technologies that successfully achieved graceful upgrades. This thesis also analyzes the Bitcoin protocol and identifies the factors in its design that undermine the possibilities to have graceful upgrades in this cryptocurrency. A coding experiment was conducted to illustrate the efficacy of these principles and demonstrate graceful communications across three different versions of the same software.