When we have a complex suite (or system) of individual applications, it's common for several applications to share common features. We can, of course, use ordinary inheritance to define a library module that provides the common classes and functions to each of the individual applications in a complex suite.
The downside of creating a number of separate applications is that the external CLI is tied directly to the software architecture. It becomes awkward to rearrange the software components because changes will also alter the visible CLI.
The coordination of common features among many application files can become awkward. For example, defining the various, one-letter abbreviated options for command-line arguments is difficult. It requires keeping some kind of master list of options, outside all of the individual...