# History of software

Software is a set of programmed instructions stored in the memory of stored-program digital computers for execution by the processor. Software is a recent development in human history and is fundamental to the Information Age.
Ada Lovelace's programs for Charles Babbage's Analytical Engine in the 19th century are often considered the founder of the discipline. However, the mathematician's efforts remained theoretical only, as the technology of Lovelace and Babbage's day proved insufficient to build his computer. Alan Turing is credited with being the first person to come up with a theory for software in 1935, which led to the two academic fields of computer science and software engineering.
The first generation of software for early stored-program digital computers in the late 1940s had its instructions written directly in binary code, generally written for mainframe computers. Later, the development of modern programming languages alongside the advancement of the home computer would greatly widen the scope and breadth of available software, beginning with assembly language, and continuing through functional programming and object-oriented programming paradigms.

## Before stored-program digital computers
### Origins of computer science

Computing as a concept goes back to ancient times, with devices such as the abacus, the Antikythera mechanism, Astrolabes, Mechanical Astronomical clocks and Mechanical Calculators. The Antikythera mechanism is an example for a highly complex ancient mechanical Astronomical device.
However, these devices were pure hardware and had no software - their computing powers were directly tied to their specific form and engineering.
Software requires the concept of a general-purpose processor - what is now described as a Turing machine - as well as computer memory in which reusable sets of routines and mathematical functions comprising programs can be stored, started, and stopped individually, and only appears recently in human history.
The first known computer algorithm was written by Ada Lovelace in the 19th century for the Analytical Engine, to translate Luigi Menabrea's work on Bernoulli numbers for machine instruction. However, this remained theoretical only - the lesser state of engineering in the lifetime of these two mathematicians proved insufficient to construct the Analytical Engine.
The first modern theory of software was proposed by Alan Turing in his 1935 essay Computable numbers with an application to the Entscheidungsproblem (decision problem).
This eventually led to the creation of the twin academic fields of computer science and software engineering, which both study software and its creation. Computer science is more theoretical (Turing's essay is an example of computer science), whereas software engineering is focused on more practical concerns.
However, prior to 1946, software as we now understand it – programs stored in the memory of stored-program digital computers – did not yet exist. The very first electronic computing devices were instead rewired in order to "reprogram" them. The ENIAC, one of the first electronic computers, was programmed largely by women who had been previously working as human computers. Engineers would give the programmers blueprints of the ENIAC wiring and expected them to figure out how to program the machine. The women who worked as programmers prepped the ENIAC for its first public reveal, wiring the patch panels together for the demonstrations. Kathleen Booth developed Assembly Language in 1950 to make it easier to program the computers she worked on at Birkbeck College.
Grace Hopper worked as one of the first programmers of the Harvard Mark I. She later created a 500-page manual for the computer. Hopper is often falsely credited with coining the terms "bug" and "debugging," when she found a moth in the Mark II, causing a malfunction; however, the term was in fact already in use when she found the moth. Hopper developed the first compiler and brought her idea from working on the Mark computers to working on UNIVAC in the 1950s. Hopper also developed the programming language FLOW-MATIC to program the UNIVAC. Frances E. Holberton, also working at UNIVAC, developed a code, C-10, which let programmers use keyboard inputs and created the Sort-Merge Generator in 1951. Adele Mildred Koss and Hopper also created the precursor to a report generator.

## Early days of computer software (1948–1979)

In his manuscript "A Mathematical Theory of Communication", Claude Shannon (1916–2001) provided an outline for how binary logic could be implemented to program a computer. Subsequently, the first computer programmers used binary code to instruct computers to perform various tasks. Nevertheless, the process was very arduous. Computer programmers had to provide long strings of binary code to tell the computer what kind of data it should store. Code and data had to be loaded onto computers using various tedious mechanisms, including flicking switches or punching holes at predefined positions in cards and loading these punched cards into a computer. With such methods, if a mistake was made, the whole program might have to be loaded again from the beginning.
The very first time a stored-program computer held a piece of software in electronic memory and executed it successfully, was 11 am 21 June 1948, at the University of Manchester, on the Manchester Baby computer. It was written by Tom Kilburn, and calculated the highest factor of the integer 2^18 = 262,144. Starting with a large trial divisor, it performed a division of 262,144 by repeated subtraction and then checked if the remainder was zero. If not, it decremented the trial divisor by one and repeated the process. Google released a tribute to the Manchester Baby, celebrating it as the "birth of software".
FORTRAN was developed by a team led by John Backus at IBM in the 1950s. The first compiler was released in 1957. The language proved so popular for scientific and technical computing that by 1963 all major manufacturers had implemented or announced FORTRAN for their computers.
COBOL was first conceived of when Mary K. Hawes convened a meeting (which included Grace Hopper) in 1959 to discuss how to create a computer language to be shared between businesses. Hopper's innovation with COBOL was developing a new symbolic way to write programming. Her programming was self-documenting. Betty Holberton helped edit the language which was submitted to the Government Printing Office in 1960. FORMAC was developed by Jean E. Sammet in the 1960s. Her book, Programming Languages: History and Fundamentals (1969), became an influential text.

### Apollo Mission

The Apollo Mission to the moon depended on software to program the computers in the landing modules. The computers were programmed with a language called "Basic" (no relation to the BASIC programming language developed at Dartmouth at about the same time). The software also had an interpreter which was made up of a series of routines and an executive (like a modern-day operating system), which specified which programs to run and when. Both were designed by Hal Laning. Margaret Hamilton, who had previously been involved with software reliability issues when working on the US SAGE air defense system, was also part of the Apollo software team. Hamilton was in charge of the onboard flight software for the Apollo computers. Hamilton felt that software operations were not just part of the machine, but also intricately involved with the people who operated the software. Hamilton also coined the term "software engineering" while she was working at NASA.
The actual "software" for the computers in the Apollo missions was made up of wires that were threaded through magnetic cores. Where the wire went through a magnetic core, that represented a "1" and where the wire went around the core, that represented a "0." Each core stored 64 bits of information. Hamilton and others would create the software by punching holes in punch cards, which were then later processed on a Honeywell mainframe where the software could be simulated. When the code was "solid," then it was sent to be woven into the magnetic cores at Raytheon, where women known as "Little Old Ladies" worked on the wires. The program itself was "indestructible" and could even withstand lightning strikes, which happened to Apollo 12. Wiring the computers took several weeks to do, freezing software development during that time.
While using the simulators to test the programming, Hamilton discovered ways that code could produce dangerous errors when human mistakes were made while using it. NASA believed that the astronauts would not make mistakes due to their training. Hamilton was not allowed to program code to prevent errors that would lead to system crash, so she annotated the code in the program documentation. Her idea to add error-checking code was rejected as "excessive." However, exactly what Hamilton predicted would happen occurred on the Apollo 8 flight, when human error caused the computer to wipe out all of the navigational data.

### Bundling of software with hardware and its legal issues

Later, software was sold to multiple customers by being bundled with the hardware by original equipment manufacturers (OEMs) such as Data General, Digital Equipment and IBM. When a customer bought a minicomputer, at that time the smallest computer on the market, the computer did not come with pre-installed software, but needed to be installed by engineers employed by the OEM.
This bundling attracted the attention of US antitrust regulators, who sued IBM for improper "tying" in 1969, alleging that it was an antitrust violation that customers who wanted to obtain its software had to also buy or lease its hardware in order to do so. However, the case was dropped by the US Justice Department, after many years of attrition, as it concluded it was "without merit".
Data General also encountered legal problems related to bundling – although in this case, it was due to a civil suit from a would-be competitor. When Data General introduced the Data General Nova, a company called Digidyne wanted to use its RDOS operating system on its own hardware clone. Data General refused to license their software and claimed their "bundling rights". The US Supreme Court set a precedent called Digidyne v. Data General in 1985 by letting a 9th circuit appeal court decision on the case stand, and Data General was eventually forced into licensing the operating system because it was ruled that restricting the license to only DG hardware was an illegal tying arrangement. Even though the District Court noted that "no reasonable juror could find that within this large and dynamic market with much larger competitors", Data General "had the market power to restrain trade through an illegal tie-in arrangement", the tying of the operating system to the hardware was ruled as per se illegal on appeal.
In 2008, Psystar Corporation was sued by Apple Inc. for distributing unauthorized Macintosh clones with OS X preinstalled, and countersued. One of the arguments in the countersuit - citing the Data General case - was that Apple dominates the market for OS X compatible computers by illegally tying the operating system to Apple computers. District Court Judge William Alsup rejected this argument, saying, as the District Court had ruled in the Data General case over 20 years prior, that the relevant market was not simply one operating system (Mac OS) but all PC operating systems, including Mac OS, and noting that Mac OS did not enjoy a dominant position in that broader market. Alsup's judgement also noted that the surprising Data General precedent that tying of copyrighted products was always illegal had since been "implicitly overruled" by the verdict in the Illinois Tool Works Inc. v. Independent Ink, Inc. case.

### Packaged software (Late 1960s-present)

An industry producing independently packaged software - software that was neither produced as a "one-off" for an individual customer, nor "bundled" with computer hardware - started to develop in the late 1960s.

### Unix (1970s–present)

Unix was an early operating system which became popular and very influential, and still exists today. The most popular variant of Unix today is macOS (previously called OS X and Mac OS X), while Linux is closely related to Unix.

### The rise of Microcomputers

In January 1975, Micro Instrumentation and Telemetry Systems began selling its Altair 8800 microcomputer kit by mail order. Microsoft released its first product Altair BASIC later that year, and hobbyists began developing programs to run on these kits. Tiny BASIC was published as a type-in program in Dr. Dobb's Journal, and developed collaboratively.
In 1976, Peter R. Jennings for instance created his Microchess program for MOS Technology's KIM-1 kit, but since it did not come with a tape drive, he would send the source code in a little booklet to his mail-order customers, and they would have to type the whole program in by hand. In 1978, Kathe and Dan Spracklen released the source of their Sargon (chess) program in a computer magazine. Jennings later switched to selling paper tape, and eventually compact cassettes with the program on it.
It was an inconvenient and slow process to type in source code from a computer magazine, and a single mistyped – or worse, misprinted – character could render the program inoperable, yet people still did so. (Optical character recognition technology, which could theoretically have been used to scan in the listings rather than transcribe them by hand, was not yet in wide use.)
Even with the spread of cartridges and cassette tapes in the 1980s for distribution of commercial software, free programs (such as simple educational programs for the purpose of teaching programming techniques) were still often printed, because it was cheaper than making and attaching cassette tapes to magazines.
However, eventually a combination of four factors brought this practice of printing complete source code listings of entire programs in computer magazines to an end:
* programs started to become very large
* floppy discs started to be used for distributing software, and then came down in price
* regular people started to use computers – and wanted a simple way to run a program
* computer magazines started to include cassette tapes or floppy discs with free or trial versions of software on them
Very quickly, commercial software started to be pirated, and commercial software producers were very unhappy at this. Bill Gates, cofounder of Microsoft, was an early moraliser against software piracy with his famous Open Letter to Hobbyists in 1976.

## 1980s–present

Before the microcomputer, a successful software program typically sold up to 1,000 units at $50,000–60,000 each. By the mid-1980s, personal computer software sold thousands of copies for $50–700 each. Companies like Microsoft, MicroPro, and Lotus Development had tens of millions of dollars in annual sales. They similarly dominated the European market with localized versions of already successful products.
A pivotal moment in computing history was the publication in the 1980s of the specifications for the IBM Personal Computer published by IBM employee Philip Don Estridge, which quickly led to the dominance of the PC in the worldwide desktop and later laptop markets – a dominance which continues to this day. Microsoft, by successfully negotiating with IBM to develop the first operating system for the PC (MS-DOS), profited enormously from the PC's success over the following decades, via the success of MS-DOS and its add-on-cum-successor, Microsoft Windows. Winning the negotiation was a pivotal moment in Microsoft's history.

### Free and open source software

Free and Open Source Software (FOSS) refers to software that is both freely available for use and distributed under licenses that grant users the freedom to access, modify, and share the software's source code. This approach contrasts with proprietary software, where the source code is typically closed and usage is restricted by licensing agreements. FOSS promotes collaboration and transparency, enabling developers and users worldwide to contribute to the software's improvement, tailor it to their needs, and share enhancements without legal or financial barriers. Popular examples of FOSS include operating systems like Linux, web browsers like Mozilla Firefox, and programming languages like Python. The philosophy behind FOSS not only drives technological innovation but also fosters a global community committed to creating accessible and adaptable software for diverse needs.

### Recent developments
#### App stores

Applications for mobile devices (cellphones and tablets) have been termed "apps" in recent years. Apple chose to funnel iPhone and iPad app sales through their App Store, and thus both vet apps, and get a cut of every paid app sold. Apple does not allow apps which could be used to circumvent their app store (e.g. virtual machines such as the Java or Flash virtual machines).
The Android platform, by contrast, has multiple app stores available for it, and users can generally select which to use (although Google Play requires a compatible or rooted device).
This move was replicated for desktop operating systems with GNOME Software (for Linux), the Mac App Store (for macOS), and the Windows Store (for Windows). All of these platforms remain, as they have always been, non-exclusive: they allow applications to be installed from outside the app store, and indeed from other app stores.
The explosive rise in popularity of apps, for the iPhone in particular but also for Android, led to a kind of "gold rush", with some hopeful programmers dedicating a significant amount of time to creating apps in the hope of striking it rich. As in real gold rushes, not all of these hopeful entrepreneurs were successful.

## Formalization of software development

The development of curricula in computer science has resulted in improvements in software development. Components of these curricula include:
* Structured and Object Oriented programming
* Data structures
* Analysis of Algorithms
* Formal languages and compiler construction
* Computer Graphics Algorithms
* Sorting and Searching
* Numerical Methods, Optimization and Statistics
* Artificial Intelligence and Machine Learning

## How software has affected hardware

As more and more programs enter the realm of firmware, and the hardware itself becomes smaller, cheaper and faster as predicted by Moore's law, an increasing number of types of functionality of computing first carried out by software, have joined the ranks of hardware, as for example with graphics processing units. (However, the change has sometimes gone the other way for cost or other reasons, as for example with softmodems and microcode.)
Most hardware companies today have more software programmers on the payroll than hardware designers, since software tools have automated many tasks of printed circuit board (PCB) engineers.

## Computer software and programming language timeline

The following tables include year by year development of many different aspects of computer software including:
* High level languages
* Operating systems
* Networking software and applications
* Computer graphics hardware, algorithms and applications
* Spreadsheets
* Word processing
* Computer aided design

### 1971–1974

| | 1971 | 1972 | 1973 | 1974 |
| Programming languages | CDL KRL SUE | C INTERCAL PL/M Prolog Smalltalk SQL | COMAL LIS ML Speakeasy-3 | BASIC FOUR CLU GRASS PROSE |
| Operating systems | DEC RSTS-11 | Data General RDOS | Soviet ALGOL 68 | DEC DOS-11 |
| Computer networks | | Wozniak's Blue Box | Bob Metcalfe develops Ethernet | |
| Computer graphics | | Newell & Sancha visible surface algorithm | | Catmull & Straber develop z-buffer |
| CAD/CAM | MCS founded | ADAM | Auto-Draft | Tektronix 4014 |

### 1975–1978

| | 1975 | 1976 | 1977 | 1978 |
| Programming languages | ABC Altair BASIC CS-4 Modula Scheme | Mesa Plus Ratfor S SAM76 SAS Smalltalk-76 | Blue Bourne Shell Commodore BASIC FP Icon IDL Red Standard MUMPS Yellow IDL | C shell HAL/S MATLAB RPG III SMALL VisiCalc SQL |
| Operating systems | CP/M | Cambridge CAP | 1BSD | 2BSD Apple DOS |
| Computer networks | Telenet packet switching | | | |
| Computer graphics | EDS founded | | Antialiasing | |
| Word processors | | Electric Pencil | | AppleWriter |
| CAD/CAM | Solid modeling | McDonnell Douglas buys Unigraphics | Forerunner to CATIA | Raster graphics display |

### 1979–1982

| | 1979 | 1980 | 1981 | 1982 |
| Programming languages | AWK Icon Modula-2 REXX Vulcan dBase-II | Ada 80 C with classes CBASIC | BBC BASIC IBM BASICA | Draco PostScript Speakeasy-IV |
| Operating systems | Atari DOS | 86-DOS | MS-DOS 1 Acorn MOS | Commodore DOS |
| Computer networks | Usenet | TCP/IP | | |
| Computer graphics | | | | Silicon Graphics founded |
| Word processors | Wordstar | WordPerfect for DG Mini | Bank Street AppleWriter II | WordStar 3.0 WordPerfect for DOS |
| Spreadsheet | VisiCalc | | Lotus 1-2-3 | |
| CAD/CAM | IGES | VersaCAD | Dassault Systèmes | Autodesk founded |

### 1983–1986

| | 1983 | 1984 | 1985 | 1986 |
| Programming languages | ABAP Ada 83 C++ GW-BASIC Korn Shell Objective-C occam True BASIC Turbo Pascal | CLIPPER Common Lisp Good Old MAD (GOM) OPL Redcode RPL Standard ML Matlab Framework FRED | Paradox QuickBASIC Framework II FRED | CorVision Eiffel GFA BASIC Informix-4GL LabVIEW Miranda Object Pascal PROMAL |
| Operating systems | MS-DOS 2 Lisa Office SunOS 1 | MS-DOS 3 System Software | Windows 1.0 Atari TOS AmigaOS | AIX 1 |
| Computer networks | ARPANET splits off MILNET | Novell NetWare Research In Motion founded | NSFNET connects 5 Supercomputers | |
| Computer graphics | | | ATI founded | Intel 82786 coprocessor |
| Word processors | Word 1 for DOS | Word 1 for Mac | WordPerfect 4.2 for DOS | |
| Spreadsheet | | | Excel for Mac | |
| CAD/CAM | Autodesk releases AutoCAD 1.2,1.3,1.4 | AutoCAD 2 | Bentley Systems Parametric Technology | AutoLISP |

### 1987–1990

| | 1987 | 1988 | 1989 | 1990 |
| Programming languages | Ada ISO 8652 Clean Erlang HyperTalk Mathematica Oberon occam 2 Perl Self Turbo Basic | A+ Hamilton C shell Object REXX Octave RPG/400 SPARK STOS BASIC Tcl Mathematica Framework III FRED | Bash LPC Modula-3 PowerBASIC Turbo Pascal OOP VisSim FL | AMOS BASIC AMPL EuLisp Haskell J Object Oberon Z Shell |
| Operating systems | Windows 2.0 | MS-DOS 4 Windows 2.1x OS/2 A/UX | EPCO | Windows 3.0 |
| Computer networks | | Morris worm | World Wide Web starts | HTML |
| Computer graphics | JPEG and GIF | Pixar's Tin Toy wins Oscar | AutoDesk 3D Studio | |
| Word processors | Microsoft Works for DOS | PC Magazine Reviews 55 Packages | WordPerfect 5.1 Word for Windows | Microsoft Office for Windows |
| Spreadsheet | Excel for Windows | Quattro Pro | | |
| CAD/CAM | Deneba releases Canvas X AutoCAD 9 | CATIA 3 AutoCAD 10 | Parametric T-Flex | Visionary Design Systems founded AutoCAD 11 ACIS 1 |

### 1991–1994

| | 1991 | 1992 | 1993 | 1994 |
| Programming languages | GNU E Oberon-2 Oz Q Visual Basic Python Framework IV FRED | Turbo Pascal Dylan | Ruby AppleScript Brainfuck K Lua NewtonScript R Transcript Self ZPL | CLOS ANS Forth ANSI Common Lisp Claire Pike RAPID |
| Operating systems | MS-DOS 5 Linux | Windows 3.1x 386BSD | MS-DOS 6 Newton OS Solaris | AIX 4.0, 4.1 |
| Computer networks | | Mosaic web browser | NetWare 4 | Netscape Navigator |
| Computer graphics | | OpenGL | Nvidia founded | |
| Word processors | Microsoft Works | | | Novell buys WordPerfect |
| CAD/CAM | EDS buys Unigraphics | CADAM & CATIA begin unification | AutoCAD 12 | Simple Vector Format |

### 1995–1998

| | 1995 | 1996 | 1997 | 1998 |
| Programming languages | Ada 95 ColdFusion Delphi Java JavaScript LiveScript PHP Ruby | Curl Lasso NetRexx OCaml Perl Data Language WebDNA | Component Pascal E ECMAScript F-Script ISLISP Pico Rebol Squeak Tea | M2001 Open Source Erlang Pikt PureBasic REALbasic Standard C++ UnrealScript |
| Operating systems | Windows 95 Digital UNIX | Windows NT 4.0 Palm OS | Inferno Mac OS 7.6 Mac OS 8 | Windows 98 Solaris 7 64-bit |
| Computer networks | The research proposal for Google was formed. | Mosaic web browser Inter@ctive Pager | NetWare 4 | Netscape Navigator |
| Computer graphics | Pixar Goes Public after Toy Story | 3Dfx Voodoo | ATI Rage Pro | Voodoo Banshee |
| Word processors | Word 95 for Windows | Corel buys WordPerfect from Novell | | |
| CAD/CAM | MicroStation Advanced solid modeling | Canvas 5 | ISO 13567 AutoCAD 14 | Dassault Systems buys Matra Datavision products |

### 1999–2002

| | 1999 | 2000 | 2001 | 2002 |
| Programming languages | D GameMaker Language Harbour XSLT | ActionScript C# Ferite Join Java Joy XL Visual Basic .NET | AspectJ GDScript Processing RPG IV | Gosu Io |
| Operating systems | Mac OS X Server 1.0 Mac OS 9 | Windows 2000 Windows ME Mac OS X Public Beta | v10.0 Cheetah v10.1 Puma Windows XP | Windows XP 64-bit Edition 10.2 Jaguar |
| Computer networks | BlackBerry 850 | | NetWare 4 | Netscape Navigator |
| Computer graphics | S3 Savage 4 GeForce 256 | Radeon DDR (R100) | Nvidia Kyro II GeForce 3 | |
| Word processors | Sun buys Star Division | | | |
| CAD/CAM | Pro/Engineer 2000 | AutoCAD 2000 | EDS buys SDRC | Unigraphics NX Autodesk buys Revit |

### 2003–2006

| | 2003 | 2004 | 2005 | 2006 |
| Programming languages | Factor Nemerle Scala Squirrel | Alma-0 Boo FreeBASIC Groovy Little b Subtext | Ada 2005 F# Seed7 | Cobra Links OptimJ Windows PowerShell |
| Operating systems | v10.3 Panther Red Hat Enterprise Linux Windows Server 2003 | | v10.4 Tiger Ubuntu 5 Windows XP Professional x64 Edition | |
| Computer networks | 802.11g Apple Safari | Gmail Facebook founded Mozilla Firefox | | BlackBerry Pearl 8100 |

### 2007–2010

| | 2007 | 2008 | 2009 | 2010 |
| Programming languages | Clojure Fantom Fortress LOLCODE Oberon-07 Vala | Genie Pure | CoffeeScript Go Idris Parasail | Chapel RPG Open Access Rust |
| Operating systems | Windows Vista v10.5 Leopard | Android | Windows 7 v10.6 Snow Leopard Android 1.5 "Cupcake" Android 1.6 "Donut" Android 2.0–2.1 "Eclair" | Android 2.2 "Froyo" Android 2.3 "Gingerbread" |
| Computer networks | | Google Chrome Chromium | Wi-Fi 802.11n | |
| Computer graphics | | Assassin's Creed | Up Cloth Simulation | Avatar wins "Best Picture" |
| Word processors | | Oracle buys OpenOffice from Sun | Oracle releases OpenOffice to Apache Software Foundation | |
| CAD/CAM | Siemens buys UGS | | | |

### 2011–2014

| | 2011 | 2012 | 2013 | 2014 |
| Programming languages | Dart | Ada 2012 Elixir Julia TypeScript CryEngine#CryEngine 3 (BeamNG.drive) | Xojo | Hack Swift |
| Operating systems | v10.7 Lion Android 3.x "Honeycomb" Android 4.0 "Ice Cream Sandwich" | Windows 8 v10.8 Mountain Lion Android 4.1.x–4.2.x "Jelly Bean" | v10.9 Mavericks Windows 8.1 Android 4.3 "Jelly Bean" Android 4.4 "KitKat" | v10.10 Yosemite Android 5.0 "Lollipop" |
| Computer networks | | 802.11ac | | |
| Computer graphics | Hugo wins Oscar Visual Effects | CryEngine3 and its 3D soft body physics | | |