In essence, a framework can be abstractly described as a structure providing the ability for adaption and expansion of components ultimately enabling to create a specialized application. In the context of software engineering, a framework can provide reusable and customizable software components to be utilized and specialized for specific applications [8]. Among the differences between a framework and a software library is the fact that a framework offers the so-called inversion of control property. A user customizes specific framework components and yields the actual execution of the final application to the framework. Frameworks make sense for different types of users, such as end users who could, for instance, interact (i.e. customize) with graphical user interface ( GUI) components which are part of a larger simulation platform. On the contrary, developers could utilize compiler frameworks, allowing to generate specialized compiler tools.
Due to the plethora of available simulation tools, framework approaches merit special consideration when designing new future-proof and flexible simulators. For instance, different simulation tools can be wrapped into components, thus becoming available to the framework infrastructure via defined interfaces. These tools can, by extension, also be utilized in a unified manner, not only significantly increasing usability, but also introducing synergy effects for the wrapped simulation tools. For instance, a GUI-based framework can provide its simulation components access to the visualization backend. Also, frameworks - due to their modular nature - natively support hybrid closed source and FLOSS projects. The framework itself can be made open source, while some components, holding the potentially restricted code (represented by closed source implementations), can be individually made public or private.