A software extension is a sort of computer program that is designed to supplement (add to) the capabilities of another computer program (known as the base program). It usually contains some additional instructions that the original program does not have. Those instructions can be executed by either the basic program or the extension. They can also communicate with each other. The term "software extension" was first used in 1979 to describe an add-on package that could be installed on IBM PC clones by then-current standards. This extension added floating point arithmetic to the 8086 processor. Before this addition, only integer arithmetic was available. It is a common misconception that only operating systems need extensions. Any program can have extensions, which can increase their functionality in various ways. Extensions can provide new features, fix bugs, or even replace parts of the main program. There are two types of software extensions: drivers and libraries. Drivers are programs that allow your hardware to work properly with your operating system. For example, a graphics driver allows you to use graphics cards' features such as multiple monitors, video cards, and printers. Libraries are collections of functions that can be used by several programs or even just one. Examples include standard library functions such as strcat and math library functions such as sqrt.