Suppose you have written a LayGO application for Linux, using the X.25 protocol and a 1 line synchronous communications controller supporting 56 kbps. Now you are asked to port your application to run under Windows 9x, and to upgrade your communication board to support multiple lines. And Frame Relay at full T1 speed will replace X.25. Of course, they want it done yesterday!
In this example, you changed modules in all three classes: operating system, hardware and protocol. Of course, you may just change the OS or the board, or you may want to add Frame Relay while retaining your X.25 services.
This modularity, accomplished through software and hardware encapsulation and standardization, ensures that today's software investment is long-term and is not rendered obsolete by changing technology.