A web server is server software, or hardware dedicated to running said software, that can satisfy World Wide Web client requests. A web server can, in general, contain one or more websites. A web server processes incoming network requests over several other related protocols; the primary function of a web server is to store and deliver web pages to clients. The communication between client and server takes place using the Hypertext Transfer Protocol. Pages delivered are most HTML documents, which may include images, style sheets and scripts in addition to the text content. A user agent a web browser or web crawler, initiates communication by making a request for a specific resource using HTTP and the server responds with the content of that resource or an error message if unable to do so; the resource is a real file on the server's secondary storage, but this is not the case and depends on how the web server is implemented. While the primary function is to serve content, a full implementation of HTTP includes ways of receiving content from clients.
This feature is used for submitting web forms, including uploading of files. Many generic web servers support server-side scripting using Active Server Pages, PHP, or other scripting languages; this means that the behaviour of the web server can be scripted in separate files, while the actual server software remains unchanged. This function is used to generate HTML documents dynamically as opposed to returning static documents; the former is used for retrieving or modifying information from databases. The latter is much faster and more cached but cannot deliver dynamic content. Web servers can be found embedded in devices such as printers, routers and serving only a local network; the web server may be used as a part of a system for monitoring or administering the device in question. This means that no additional software has to be installed on the client computer since only a web browser is required. In March 1989 Sir Tim Berners-Lee proposed a new project to his employer CERN, with the goal of easing the exchange of information between scientists by using a hypertext system.
The project resulted in Berners-Lee writing two programs in 1990: A Web browser called WorldWideWeb The world's first web server known as CERN httpd, which ran on NeXTSTEPBetween 1991 and 1994, the simplicity and effectiveness of early technologies used to surf and exchange data through the World Wide Web helped to port them to many different operating systems and spread their use among scientific organizations and universities, subsequently to the industry. In 1994 Berners-Lee decided to constitute the World Wide Web Consortium to regulate the further development of the many technologies involved through a standardization process. Web servers are able to map the path component of a Uniform Resource Locator into: A local file system resource An internal or external program name For a static request the URL path specified by the client is relative to the web server's root directory. Consider the following URL as it would be requested by a client over HTTP: http://www.example.com/path/file.html The client's user agent will translate it into a connection to www.example.com with the following HTTP 1.1 request: GET /path/file.html HTTP/1.1 Host: www.example.com The web server on www.example.com will append the given path to the path of its root directory.
On an Apache server, this is /home/www. The result is the local file system resource: /home/www/path/file.html The web server reads the file, if it exists, sends a response to the client's web browser. The response will describe the content of the file and contain the file itself or an error message will return saying that the file does not exist or is unavailable. A web server can be either incorporated in user space. Web servers that run in user-mode have to ask the system for permission to use more memory or more CPU resources. Not only do these requests to the kernel take time, but they are not always satisfied because the system reserves resources for its own usage and has the responsibility to share hardware resources with all the other running applications. Executing in user mode can mean useless buffer copies which are another handicap for user-mode web servers. A web server has defined load limits, because it can handle only a limited number of concurrent client connections per IP address and it can serve only a certain maximum number of requests per second depending on: its own settings, the HTTP request type, whether the content is static or dynamic, whether the content is cached, the hardware and software limitations of the OS of the computer on which the web server runs.
When a web server is near to or over its limit, it becomes unresponsive. At any time web servers can be overloaded due to: Excess legitimate web traffic. Thousands or millions of clients connecting to the web site in a short interval, e.g. Slashdot effect. A denial-of-service attack or distributed denial-of-service attack is an attempt to make a computer or network resource unavailable to its intended users.
Graphical user interface
The graphical user interface is a form of user interface that allows users to interact with electronic devices through graphical icons and visual indicators such as secondary notation, instead of text-based user interfaces, typed command labels or text navigation. GUIs were introduced in reaction to the perceived steep learning curve of command-line interfaces, which require commands to be typed on a computer keyboard; the actions in a GUI are performed through direct manipulation of the graphical elements. Beyond computers, GUIs are used in many handheld mobile devices such as MP3 players, portable media players, gaming devices and smaller household and industrial controls; the term GUI tends not to be applied to other lower-display resolution types of interfaces, such as video games, or not including flat screens, like volumetric displays because the term is restricted to the scope of two-dimensional display screens able to describe generic information, in the tradition of the computer science research at the Xerox Palo Alto Research Center.
Designing the visual composition and temporal behavior of a GUI is an important part of software application programming in the area of human–computer interaction. Its goal is to enhance the efficiency and ease of use for the underlying logical design of a stored program, a design discipline named usability. Methods of user-centered design are used to ensure that the visual language introduced in the design is well-tailored to the tasks; the visible graphical interface features of an application are sometimes referred to as chrome or GUI. Users interact with information by manipulating visual widgets that allow for interactions appropriate to the kind of data they hold; the widgets of a well-designed interface are selected to support the actions necessary to achieve the goals of users. A model–view–controller allows flexible structures in which the interface is independent from and indirectly linked to application functions, so the GUI can be customized easily; this allows users to select or design a different skin at will, eases the designer's work to change the interface as user needs evolve.
Good user interface design relates to users more, to system architecture less. Large widgets, such as windows provide a frame or container for the main presentation content such as a web page, email message or drawing. Smaller ones act as a user-input tool. A GUI may be designed for the requirements of a vertical market as application-specific graphical user interfaces. Examples include automated teller machines, point of sale touchscreens at restaurants, self-service checkouts used in a retail store, airline self-ticketing and check-in, information kiosks in a public space, like a train station or a museum, monitors or control screens in an embedded industrial application which employ a real-time operating system. By the 1980s, cell phones and handheld game systems employed application specific touchscreen GUIs. Newer automobiles use GUIs in their navigation systems and multimedia centers, or navigation multimedia center combinations. Sample graphical desktop environments A GUI uses a combination of technologies and devices to provide a platform that users can interact with, for the tasks of gathering and producing information.
A series of elements conforming a visual language have evolved to represent information stored in computers. This makes it easier for people with few computer skills to use computer software; the most common combination of such elements in GUIs is the windows, menus, pointer paradigm in personal computers. The WIMP style of interaction uses a virtual input device to represent the position of a pointing device, most a mouse, presents information organized in windows and represented with icons. Available commands are compiled together in menus, actions are performed making gestures with the pointing device. A window manager facilitates the interactions between windows and the windowing system; the windowing system handles hardware devices such as pointing devices, graphics hardware, positioning of the pointer. In personal computers, all these elements are modeled through a desktop metaphor to produce a simulation called a desktop environment in which the display represents a desktop, on which documents and folders of documents can be placed.
Window managers and other software combine to simulate the desktop environment with varying degrees of realism. Smaller mobile devices such as personal digital assistants and smartphones use the WIMP elements with different unifying metaphors, due to constraints in space and available input devices. Applications for which WIMP is not well suited may use newer interaction techniques, collectively termed post-WIMP user interfaces; as of 2011, some touchscreen-based operating systems such as Apple's iOS and Android use the class of GUIs named post-WIMP. These support styles of interaction using more than one finger in contact with a display, which allows actions such as pinching and rotating, which are unsupported by one pointer and mouse. Human interface devices, for the efficient interaction with a GUI include a computer keyboard used together with keyboard shortcuts, pointing devices for the cursor control: mouse, pointing stick, trackball, virtual keyboards, head-up displays. There are actions performed by programs that affect the GUI.
For example, there are components like inotify or D-Bus to facilitate communication between computer programs. Ivan Sutherland developed Sketchpad in 1963 held as the first graphical co
The program counter called the instruction pointer in Intel x86 and Itanium microprocessors, sometimes called the instruction address register, the instruction counter, or just part of the instruction sequencer, is a processor register that indicates where a computer is in its program sequence. In most processors, the PC is incremented after fetching an instruction, holds the memory address of the next instruction that would be executed. Processors fetch instructions sequentially from memory, but control transfer instructions change the sequence by placing a new value in the PC; these include branches, subroutine calls, returns. A transfer, conditional on the truth of some assertion lets the computer follow a different sequence under different conditions. A branch provides. A subroutine saves the preceding contents of the PC somewhere. A return retrieves the saved contents of the PC and places it back in the PC, resuming sequential execution with the instruction following the subroutine call.
In a typical central processing unit, the PC is a digital counter that may be one of many registers in the CPU hardware. The instruction cycle begins with a fetch, in which the CPU places the value of the PC on the address bus to send it to the memory; the memory responds by sending the contents of that memory location on the data bus.. Following the fetch, the CPU proceeds to execution, taking some action based on the memory contents that it obtained. At some point in this cycle, the PC will be modified so that the next instruction executed is a different one. Like other processor registers, the PC may be a bank of binary latches, each one representing one bit of the value of the PC; the number of bits relates to the processor architecture. For instance, a “32-bit” CPU may use 32 bits to be able to address 232 units of memory. If the PC is a binary counter, it may increment when a pulse is applied to its COUNT UP input, or the CPU may compute some other value and load it into the PC by a pulse to its LOAD input.
To identify the current instruction, the PC may be combined with other registers that identify a segment or page. This approach permits a PC with fewer bits by assuming that most memory units of interest are within the current vicinity. Use of a PC that increments assumes that what a computer does is execute a linear sequence of instructions; such a PC is central to the von Neumann architecture. Thus programmers write a sequential control flow for algorithms that do not have to be sequential; the resulting “von Neumann bottleneck” led to research into parallel computing, including non-von Neumann or dataflow models that did not use a PC. This research led to ways to making conventional, PC-based, CPUs run faster, including: Pipelining, in which different hardware in the CPU executes different phases of multiple instructions simultaneously; the long instruction word architecture, where a single instruction can achieve multiple effects. Techniques to predict out-of-order execution and prepare subsequent instructions for execution outside the regular sequence.
Modern high-level programming languages still follow the sequential-execution model and, indeed, a common way of identifying programming errors is with a “procedure execution” in which the programmer's finger identifies the point of execution as a PC would. The high-level language is the machine language of a virtual machine, too complex to be built as hardware but instead emulated or interpreted by software. However, new programming models transcend sequential-execution programming: When writing a multi-threaded program, the programmer may write each thread as a sequence of instructions without specifying the timing of any instruction relative to instructions in other threads. In event-driven programming, the programmer may write sequences of instructions to respond to events without specifying an overall sequence for the program. In dataflow programming, the programmer may write each section of a computing pipeline without specifying the timing relative to other sections. Branch prediction Instruction cache Instruction cycle Instruction unit Instruction pipeline Instruction register Instruction scheduling Program status word
A computer virus is a type of malicious software that, when executed, replicates itself by modifying other computer programs and inserting its own code. When this replication succeeds, the affected areas are said to be "infected" with a computer virus. Virus writers use social engineering deceptions and exploit detailed knowledge of security vulnerabilities to infect systems and to spread the virus; the vast majority of viruses target systems running Microsoft Windows, employing a variety of mechanisms to infect new hosts, using complex anti-detection/stealth strategies to evade antivirus software. Motives for creating viruses can include seeking profit, desire to send a political message, personal amusement, to demonstrate that a vulnerability exists in software, for sabotage and denial of service, or because they wish to explore cybersecurity issues, artificial life and evolutionary algorithms. Computer viruses cause billions of dollars' worth of economic damage each year, due to causing system failure, wasting computer resources, corrupting data, increasing maintenance costs, etc.
In response, open-source antivirus tools have been developed, an industry of antivirus software has cropped up, selling or distributing virus protection to users of various operating systems. As of 2005 though no existing antivirus software was able to uncover all computer viruses, computer security researchers are searching for new ways to enable antivirus solutions to more detect emerging viruses, before they have become distributed; the term "virus" is misused by extension to refer to other types of malware. "Malware" encompasses computer viruses along with many other forms of malicious software, such as computer "worms", spyware, trojan horses, rootkits, malicious Browser Helper Object, other malicious software. The majority of active malware threats are trojan horse programs or computer worms rather than computer viruses; the term computer virus, coined by Fred Cohen in 1985, is a misnomer. Viruses perform some type of harmful activity on infected host computers, such as acquisition of hard disk space or central processing unit time, accessing private information, corrupting data, displaying political or humorous messages on the user's screen, spamming their e-mail contacts, logging their keystrokes, or rendering the computer useless.
However, not all viruses carry a destructive "payload" and attempt to hide themselves—the defining characteristic of viruses is that they are self-replicating computer programs which modify other software without user consent. The first academic work on the theory of self-replicating computer programs was done in 1949 by John von Neumann who gave lectures at the University of Illinois about the "Theory and Organization of Complicated Automata"; the work of von Neumann was published as the "Theory of self-reproducing automata". In his essay von Neumann described. Von Neumann's design for a self-reproducing computer program is considered the world's first computer virus, he is considered to be the theoretical "father" of computer virology. In 1972, Veith Risak directly building on von Neumann's work on self-replication, published his article "Selbstreproduzierende Automaten mit minimaler Informationsübertragung"; the article describes a functional virus written in assembler programming language for a SIEMENS 4004/35 computer system.
In 1980 Jürgen Kraus wrote his diplom thesis "Selbstreproduktion bei Programmen" at the University of Dortmund. In his work Kraus postulated that computer programs can behave in a way similar to biological viruses; the first known description of a self-reproducing program in a short story occurs in a 1970 story by Gregory Benford which describes a computer program called VIRUS which, when installed on a computer with telephone modem dialling capability, randomly dials phone numbers until it hit a modem, answered by another computer. It attempts to program the answering computer with its own program, so that the second computer will begin dialling random numbers, in search of yet another computer to program; the program spreads exponentially through susceptible computers and can only be countered by a second program called VACCINE. The idea was explored further in two 1972 novels, When HARLIE Was One by David Gerrold and The Terminal Man by Michael Crichton, became a major theme of the 1975 novel The Shockwave Rider by John Brunner.
The 1973 Michael Crichton sci-fi movie Westworld made an early mention of the concept of a computer virus, being a central plot theme that causes androids to run amok. Alan Oppenheimer's character summarizes the problem by stating that "...there's a clear pattern here which suggests an analogy to an infectious disease process, spreading from one...area to the next." To which the replies are stated: "Perhaps there are superficial similarities to disease" and, "I must confess I find it difficult to believe in a disease of machinery." The Creeper virus was first detected on the forerunner of the Internet, in the early 1970s. Creeper was an experimental self-replicating program written by Bob Thomas at BBN Technologies in 1971. Creeper used the ARPANET to infect DEC PDP-10 computers running the TENEX operating system. Creeper gained access via the ARPANET and copied itself to the remote system where the message, "I'm the creeper, catch me if you can!" was displayed. The Reaper program was created to delete Creeper.
In 1982, a program called "Elk Cloner" was
Application software is software designed to perform a group of coordinated functions, tasks, or activities for the benefit of the user. Examples of an application include a word processor, a spreadsheet, an accounting application, a web browser, an email client,a media player, a file viewer, an aeronautical flight simulator, a console game or a photo editor; the collective noun application software refers to all applications collectively. This contrasts with system software, involved with running the computer. Applications may be bundled with the computer and its system software or published separately, may be coded as proprietary, open-source or university projects. Apps built for mobile platforms are called mobile apps. In information technology, an application, application program or software application is a computer program designed to help people perform an activity. An application thus differs from an operating system, a utility, a programming tool. Depending on the activity for which it was designed, an application can manipulate text, audio, graphics, or a combination of these elements.
Some application packages focus on a single task, such as word processing. User-written software tailors systems to meet the user's specific needs. User-written software includes spreadsheet templates, word processor macros, scientific simulations, audio and animation scripts. Email filters are a kind of user software. Users create this software themselves and overlook how important it is; the delineation between system software such as operating systems and application software is not exact, is the object of controversy. For example, one of the key questions in the United States v. Microsoft Corp. antitrust trial was whether Microsoft's Internet Explorer web browser was part of its Windows operating system or a separable piece of application software. As another example, the GNU/Linux naming controversy is, in part, due to disagreement about the relationship between the Linux kernel and the operating systems built over this kernel. In some types of embedded systems, the application software and the operating system software may be indistinguishable to the user, as in the case of software used to control a VCR, DVD player or microwave oven.
The above definitions may exclude some applications that may exist on some computers in large organizations. For an alternative definition of an app: see Application Portfolio Management; the word "application", once used as an adjective, is not restricted to the "of or pertaining to application software" meaning. For example, concepts such as application programming interface, application server, application virtualization, application lifecycle management and portable application apply to all computer programs alike, not just application software; some applications are available in versions for several different platforms. Sometimes a new and popular application arises which only runs on one platform, increasing the desirability of that platform; this is called a killer killer app. For example, VisiCalc was the first modern spreadsheet software for the Apple II and helped selling the then-new personal computers into offices. For Blackberry it was their email software. In recent years, the shortened term "app" has become popular to refer to applications for mobile devices such as smartphones and tablets, the shortened form matching their smaller scope compared to applications on PCs.
More the shortened version is used for desktop application software as well. There are many different and not alternative ways in order to order and classify application software. By the legal point of view, application software is classified with a black box approach, in relation to the rights of its final end-users or subscribers. Software applications are classified in respect of the programming language in which the source code is written or executed, respect of their purpose and outputs. Application software is distinguished among two main classes: closed source vs open source software applications, among free or proprietary software applications. Proprietary software is placed under the exclusive copyright, a software license grants limited usage rights; the open-closed principle states that software may be "open only for extension, but not for modification". Such applications can only get add-on by third-parties. Free and open-source software shall be run, sold or extended for any purpose, -being open- shall be modified or reversed in the same way.
A computer program is a collection of instructions that performs a specific task when executed by a computer. A computer requires programs to function. A computer program is written by a computer programmer in a programming language. From the program in its human-readable form of source code, a compiler can derive machine code—a form consisting of instructions that the computer can directly execute. Alternatively, a computer program may be executed with the aid of an interpreter. A collection of computer programs and related data are referred to as software. Computer programs may be categorized along functional lines, such as application software and system software; the underlying method used for some calculation or manipulation is known as an algorithm. The earliest programmable machines preceded the invention of the digital computer. In 1801, Joseph-Marie Jacquard devised a loom that would weave a pattern by following a series of perforated cards. Patterns could be repeated by arranging the cards.
In 1837, Charles Babbage was inspired by Jacquard's loom to attempt to build the Analytical Engine. The names of the components of the calculating device were borrowed from the textile industry. In the textile industry, yarn was brought from the store to be milled; the device would have had a "store"—memory to hold 1,000 numbers of 40 decimal digits each. Numbers from the "store" would have been transferred to the "mill", for processing, and a "thread" being the execution of programmed instructions by the device. It was programmed using two sets of perforated cards—one to direct the operation and the other for the input variables. However, after more than 17,000 pounds of the British government's money, the thousands of cogged wheels and gears never worked together. During a nine-month period in 1842–43, Ada Lovelace translated the memoir of Italian mathematician Luigi Menabrea; the memoir covered the Analytical Engine. The translation contained Note G which detailed a method for calculating Bernoulli numbers using the Analytical Engine.
This note is recognized by some historians as the world's first written computer program. In 1936, Alan Turing introduced the Universal Turing machine—a theoretical device that can model every computation that can be performed on a Turing complete computing machine, it is a finite-state machine. The machine can move the tape forth, changing its contents as it performs an algorithm; the machine starts in the initial state, goes through a sequence of steps, halts when it encounters the halt state. This machine is considered by some to be the origin of the stored-program computer—used by John von Neumann for the "Electronic Computing Instrument" that now bears the von Neumann architecture name; the Z3 computer, invented by Konrad Zuse in Germany, was a programmable computer. A digital computer uses electricity as the calculating component; the Z3 contained 2,400 relays to create the circuits. The circuits provided a floating-point, nine-instruction computer. Programming the Z3 was through a specially designed keyboard and punched tape.
The Electronic Numerical Integrator And Computer was a Turing complete, general-purpose computer that used 17,468 vacuum tubes to create the circuits. At its core, it was a series of Pascalines wired together, its 40 units weighed 30 tons, occupied 1,800 square feet, consumed $650 per hour in electricity when idle. It had 20 base-10 accumulators. Programming the ENIAC took up to two months. Three function tables needed to be rolled to fixed function panels. Function tables were connected to function panels using heavy black cables; each function table had 728 rotating knobs. Programming the ENIAC involved setting some of the 3,000 switches. Debugging a program took a week; the programmers of the ENIAC were women who were known collectively as the "ENIAC girls." The ENIAC featured parallel operations. Different sets of accumulators could work on different algorithms, it used punched card machines for input and output, it was controlled with a clock signal. It ran for eight years, calculating hydrogen bomb parameters, predicting weather patterns, producing firing tables to aim artillery guns.
The Manchester Baby was a stored-program computer. Programming transitioned away from setting dials. Only three bits of memory were available to store each instruction, so it was limited to eight instructions. 32 switches were available for programming. Computers manufactured; the computer program was written on paper for reference. An instruction was represented by a configuration of on/off settings. After setting the configuration, an execute button was pressed; this process was repeated. Computer programs were manually input via paper tape or punched cards. After the medium was loaded, the starting address was set via switches and the execute button pressed. In 1961, the Burroughs B5000 was built to be programmed in the ALGOL 60 language; the hardware featured circuits to ease the compile phase. In 1964, the IBM System/360 was a line of six computers each having the same instruction set architecture; the Model 30 was the least expensive. Customers could retain the same application software; each System/360 model featured multiprogramming.
With operating system support, multiple programs could be in memory at once. When one was waiting for input/output, another could compute; each model could emulate other computers. Customers could upgrade to the System/360 and ret
Computing is any activity that uses computers. It includes developing hardware and software, using computers to manage and process information and entertain. Computing is a critically important, integral component of modern industrial technology. Major computing disciplines include computer engineering, software engineering, computer science, information systems, information technology; the ACM Computing Curricula 2005 defined "computing" as follows: "In a general way, we can define computing to mean any goal-oriented activity requiring, benefiting from, or creating computers. Thus, computing includes designing and building hardware and software systems for a wide range of purposes; the list is endless, the possibilities are vast." and it defines five sub-disciplines of the computing field: computer science, computer engineering, information systems, information technology, software engineering. However, Computing Curricula 2005 recognizes that the meaning of "computing" depends on the context: Computing has other meanings that are more specific, based on the context in which the term is used.
For example, an information systems specialist will view computing somewhat differently from a software engineer. Regardless of the context, doing computing well can be complicated and difficult; because society needs people to do computing well, we must think of computing not only as a profession but as a discipline. The term "computing" has sometimes been narrowly defined, as in a 1989 ACM report on Computing as a Discipline: The discipline of computing is the systematic study of algorithmic processes that describe and transform information: their theory, design, efficiency and application; the fundamental question underlying all computing is "What can be automated?" The term "computing" is synonymous with counting and calculating. In earlier times, it was used in reference to the action performed by mechanical computing machines, before that, to human computers; the history of computing is longer than the history of computing hardware and modern computing technology and includes the history of methods intended for pen and paper or for chalk and slate, with or without the aid of tables.
Computing is intimately tied to the representation of numbers. But long before abstractions like the number arose, there were mathematical concepts to serve the purposes of civilization; these concepts include one-to-one correspondence, comparison to a standard, the 3-4-5 right triangle. The earliest known tool for use in computation was the abacus, it was thought to have been invented in Babylon circa 2400 BC, its original style of usage was by lines drawn in sand with pebbles. Abaci, of a more modern design, are still used as calculation tools today; this was the first known calculation aid - preceding Greek methods by 2,000 years. The first recorded idea of using digital electronics for computing was the 1931 paper "The Use of Thyratrons for High Speed Automatic Counting of Physical Phenomena" by C. E. Wynn-Williams. Claude Shannon's 1938 paper "A Symbolic Analysis of Relay and Switching Circuits" introduced the idea of using electronics for Boolean algebraic operations. A computer is a machine that manipulates data according to a set of instructions called a computer program.
The program has an executable form. The same program in its human-readable source code form, enables a programmer to study and develop a sequence of steps known as an algorithm; because the instructions can be carried out in different types of computers, a single set of source instructions converts to machine instructions according to the central processing unit type. The execution process carries out the instructions in a computer program. Instructions express, they trigger sequences of simple actions on the executing machine. Those actions produce effects according to the semantics of the instructions. Computer software or just "software", is a collection of computer programs and related data that provides the instructions for telling a computer what to do and how to do it. Software refers to one or more computer programs and data held in the storage of the computer for some purposes. In other words, software is a set of programs, procedures and its documentation concerned with the operation of a data processing system.
Program software performs the function of the program it implements, either by directly providing instructions to the computer hardware or by serving as input to another piece of software. The term was coined to contrast with the old term hardware. In contrast to hardware, software is intangible. Software is sometimes used in a more narrow sense, meaning application software only. Application software known as an "application" or an "app", is a computer software designed to help the user to perform specific tasks. Examples include enterprise software, accounting software, office suites, graphics software and media players. Many application programs deal principally with documents. Apps may be published separately; some users need never install one. Application software is contrasted with system software and middleware, which manage and integrate a computer's capabilities, but