This is made possible by hierarchically organizing the machinery in functional units. Often functional units can be used for different purposes, which simplifies the process of setting up computers for different tasks.
Generally, computer software is divided in the "systems" software and "application" software. Operating systems such as Linux, Micosoft Windows, or Mac OS X include the systems software that provide relatively simple and still general interfaces to the computing capabilities. Every computer needs one of the operating systems to be useful. Application software on the other hand specializes the functionality of a computer. There are thousands of application programs to choose from, and you need to install only those that you need to accomplish your tasks.
Computers are unique in that software can be updated easily. Unlike human skills and knowledge, software can be copied and quickly transferred from one computer to another. This has the advantage that any improvements in the software can be propagated quickly, but it also raises the challenge of avoiding malfunctions due to incompatibilities in the interfaces between functional units.
Application software is therefore organized in "packages". Packages have well defined interfaces that define how they interact with other packages. This makes it possible to improve the internal workings of a package without changing any of the packages that it interacts with.
At a minimum, a package includes one "executable". An executable is a file that contains a sequence of instructions to be performed by the operating system. Executables make the computer do something. Packages of complex application software such as office suites often contain several executables. They also contain configuration files, documentation files, and "libraries", which are chunks of executable code that is shared among various executables. Finally, a package includes the information of where to each of these files should be placed in the file system.
All these files are made into a package by putting them all together into one large file. Exactly how the files are tied together is defined by the packaging format being used. Many packaging formats have been developed for Linux, the most popular being "tarballs", which includes RPM (Red Hat Package Manager) and DEB (Debian Packaging Format).
For more information follow one of the links below: