-> complete system -> The flow of control and the flow of data is managed by the framework, you fill in the details ▸ Library: -> collection of related functionality -> you call on it to fill in the details ▸ Module: -> provides a single piece of functionality -> explicit exports and imports, implementation and interface are separate ▸ Plugin: -> ready to use code component that can be added to an existing application to change its features
particular functionality ▸ has an interface that lets clients access its functionality in an uniform manner ▸ is easily pluggable with another module that expects its interface ▸ is usually packaged in a single unit so that it can be easily deployed
CODE ▸ Saves time when creating a feature ▸ Has community backing in case of problems with implementation ▸ Is already tested ▸ Offers features that would otherwise be inaccessible “provides a single piece of functionality … … with less effort than coding this piece of functionality yourself”
and file size ▸ Generalised functionality can mean a high effort in customisation ▸ Introducing code interference with other modules / custom code ▸ Varying code quality DISADVANTAGES OF MODULES VS. CUSTOM CODE
and bug fixing are taken care of by the module creator ▸ Good reaction times on tickets when the community is active enough ▸ Option to submit code improvements one self ▸ Encapsulation means little effort when module has to be removed ADVANTAGES OF MODULES VS. CUSTOM CODE
support with bugs and maintenance ▸ Danger of insufficient or non- existing documentation ▸ Using a lot of modules could mean a sluggish application ▸ Major updates can cause unforeseen breaking changes DISADVANTAGES OF MODULES VS. CUSTOM CODE
different open source license types ▸ Licenses for modules can change ▸ With Open Source, the liability is generally shifted to the user of the code ▸ CopyLeft: “is the practice of offering people the right to freely distribute copies and modified versions of a work with the stipulation that the same rights be preserved in derivative works created later." “… All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by the <organization>. …”