Every digital computer is driven by sequences of binary code. The mapping between the atomic operations (such as addition, multiplication, basic comparisons, etc.) performed by a computer's central processing unit (CPU) and these sequences are typically one-to-one. The manufacturer of the computer hardware will adopt a particular specification, which describes exactly which binary code is to be used for which atomic operation. Two computer systems that are built to support the same specification will both be able to execute the same binary program. Hence, both an Intel Pentium 4 computer processor and an AMD Athlon CPU can execute code originally developed for an Intel 486 computer, whereas a PowerPC Macintosh will require a different sequence of binary instructions in order to accomplish the same computational task. Each auxiliary piece of computer hardware, such as graphics devices, audio devices, printers and network ports, also uses its own particular specification for binary-coded instructions.
Most software must be written in such a way that it can operate on many computer systems with different hardware configurations, and it is not practical or desirable to have each program containing instructions for every possible configuration. It is also unheard of for modern computers to be executing only one program at a time. On the contrary, it is common for tens to hundreds of independent programs to be actively operating on a computer simultaneously. In order to allow for this, the hardware resources of the computer, such as memory, processing, storage, and access to graphical displays, must be coordinated and managed to prevent conflicts between all of these programs.
For these reasons, computer systems execute a special piece of software called an operating system (OS). Most people will identify the OS as the easy-to-use Graphical User Interface (GUI), which allows the user to manage and use the computer. More importantly, however, the OS provides the programmer with a way ofrequesting the services of a particular class of hardware (i.e., a printer, or a graphics display device) in a standardized way which does not require prior knowledge of specifically what model of hardware is being used. The OS translates these requests into the appropriate binary-coded sequences to effect the desired operations through the use of a special piece of software, called a device driver, which is usually supplied by the device manufacturer. The OS also coordinates all running programs so that they do not interfere with each other.
A software library is a compilation of data structures and software routines which is stored in a format that can be utilized by many different programs. Typically, software libraries encapsulate frequently used functions, which many programs need to use. Storing these libraries separately from the programs that use them means that the functionality, which they provide, does not need to be recreated with every new program. They are typically designed and developed by other programmers who have special expertise in a particular area of programming, and are made available (either freely or through a commercial license) to other programmers to use within software applications. This means that programmers can make use of very specialized functionality without being an expert in that particular field. Libraries often implement a particular standard (such as OpenGL for 3D graphics, or TCP/IP for internet communications). Many programming languages are intimately tied to certain libraries which contain core functionality.
The funtionality provided by the OS and the software libraries provides a layer of abstraction away from the specifics of how all of these functions are achieved. Ideally, the programmer who makes use of this functionality does not need to understand the internals of such functions in order to make use of them, but can concentrate on combining them to achieve some particular work. The operation of the resulting program depends upon the presence of these other components. The union of all such dependencies is generally referred to as the platform on which the program will run. Typically, this is outlined by software vendors as the 'minimum system requirements', and typically consists of a particular class of CPU and OS, and occasionally also includes peripheral hardware and certain software libraries.
Designing cross-platform programs is a very relevant issue in the current computer environment, because today's highly networked world has created a high demand for different platforms to be seamlessly inter-operable. There are many strategies for achieving such cross-platform functionality. The process of rewriting a software program so that it can be run on a different platform is known as 'porting' the software. There are numerous techniques in software development which allow programs to be more portable, in particular, using only software libraries which have themselves already been ported to the particular platform. Some kinds of programming languages are inherently more cross-platform than others (see the section entitled 'Compiled and interpreted languages'). Additionally, there exists a host of different 'virtualization' software, which simulates the operations of a different platform.
Was this article helpful?