If you've ever needed to run a component with as little downtime as possible, but for any reason couldn't apply the usual fault-tolerance patterns, such as redundant copies of your service, making this component module-based can come to save your day. Or you may just be attracted by a vision of a modular system with versioning of all the modules, with an easy lookup of all the available services, along with the decoupling, testability, and enhancing teamwork that module-based systems can cause. All of this is why Open Service Gateway Initiative (OSGi) modules were created for Java and got ported to C++ in more than a few frameworks. Examples of architectures using modules include IDEs such as Eclipse, Software Defined Networking (SDN) projects such as OpenDaylight...
Learning module-based architecture
In this section, by modules, we mean software components that can be loaded and unloaded in runtime. For C++20's modules, refer to Chapter 5, Leveraging C++ Language Features.