ABSTRACT

This Plugins style is at the center of software evolution and customization. Developing software that is meant to be extended by others, or even by the same developers but at a later point in time, carries a set of challenges that don’t exist in close-ended software. It is important to understand the alternatives to this style that achieve the same goal of supporting different implementations of the same functions. It is also important to understand those alternatives’ limits, and the benefits of this style of programming. The origins of this style are somewhat foggy, but seem to spread across two separate lines of work: distributed systems architecture and the need to extend standalone applications with third-party code. The advent of mainstream programming languages with reflective capabilities changed the landscape of this work, as it suddenly became possible, and trivially easy, to link components at runtime.