Video game console emulators often use plug-ins to modularize the separate subsystems of the devices they seek to emulate.[2][3][4][5][6][7][8][9] For example, thePCSX2 emulator makes use of video, audio, optical, etc. plug-ins for those respective components of thePlayStation 2.
The host application provides services which the plug-in can use, including a way for plug-ins to register themselves with the host application and aprotocol for the exchange of data with plug-ins. Plug-ins depend on the services provided by the host application and do not usually work by themselves. Conversely, the host application operates independently of the plug-ins, making it possible for end-users to add and update plug-ins dynamically without needing to make changes to the host application.[10][11]
Programmers typically implement plug-ins asshared libraries, which getdynamically loaded at run time.HyperCard supported a similar facility, but more commonly included the plug-in code in the HyperCard documents (calledstacks) themselves. Thus the HyperCard stack became a self-contained application in its own right, distributable as a single entity that end-users could run without the need for additional installation-steps. Programs may also implement plug-ins by loading a directory of simplescript files written in ascripting language likePython orLua.
In the context of aweb browser, a helper application is a separate program—likeIrfanView orAdobe Reader—that extends the functionality of a browser.[12][13] A helper application extends the functionality an application but unlike the typical plug-in that is loaded into the host application'saddress space, a helper application is a separate application. With a separate address space, the extension cannot crash the host application as is possible if they share an address space.[14]