A diagram showing how the user interacts with application software on a typical desktop computer.The application software layer interfaces with the operating system, which in turn communicates with the hardware. The arrows indicate information flow.

Computer software, or simply software, is a part of a computer system that consists of data or computer instructions, in contrast to the physical hardware from which the system is built. In computer science and software engineering, computer software is all information processed by computer systems, programs and data. Computer software includes computer programs, libraries and related non-executable data, such as online documentation or digital media. Computer hardware and software require each other and neither can be realistically used on its own.

At the lowest level, executable code consists of machine language instructions specific to an individual processor—typically a central processing unit (CPU). A machine language consists of groups of binary values signifying processor instructions that change the state of the computer from its preceding state. For example, an instruction may change the value stored in a particular storage location in the computer—an effect that is not directly observable to the user. An instruction may also (indirectly) cause something to appear on a display of the computer system—a state change which should be visible to the user. The processor carries out the instructions in the order they are provided, unless it is instructed to "jump" to a different instruction, or is interrupted by the operating system.(By now multi-core processors are dominant, where each core can run instructions in order; then, however, each application software runs only on one core by default, but some software has been made to run on many).

The majority of software is written in high-level programming languages that are easier and more efficient for programmers to use because they are closer than machine languages to natural languages.[1] High-level languages are translated into machine language using a compiler or an interpreter or a combination of the two. Software may also be written in a low-level assembly language, which has strong correspondence to the computer's machine language instructions and is translated into machine language using an assembler.


An outline (algorithm) for what would have been the first piece of software was written by Ada Lovelace in the 19th century, for the planned Analytical Engine. However, neither the Analytical Engine nor any software for it were ever created.

The first theory about software—prior to creation of computers as we know them today—was proposed by Alan Turing in his 1935 essay On Computable Numbers, with an Application to the Entscheidungsproblem (decision problem).

This eventually led to the creation of the academic fields of computer science and software engineering. Both fields study software and its creation. Computer science is the theoretical study of computer and software (Turing's essay is an example of computer science), where as software engineering is the application of engineering and development of software.

However, prior to 1946, software was not yet the programs stored in the memory of stored-program digital computers, as we now understand it. The first electronic computing devices were instead rewired in order to "reprogram" them.

Other Languages
Afrikaans: Sagteware
Alemannisch: Software
العربية: برمجية
aragonés: Software
azərbaycanca: Proqram təminatı
تۆرکجه: یازیلیم
Bân-lâm-gú: Nńg-thé
беларуская (тарашкевіца)‎: Праграмнае забесьпячэньне
български: Софтуер
bosanski: Softver
brezhoneg: Meziant
català: Programari
čeština: Software
Cymraeg: Meddalwedd
Deutsch: Software
eesti: Tarkvara
Ελληνικά: Λογισμικό
español: Software
Esperanto: Programaro
euskara: Software
føroyskt: Ritbúnaður
français: Logiciel
Gaeilge: Bogearraí
Gàidhlig: Bathar-bog
galego: Software
한국어: 소프트웨어
हिन्दी: सॉफ्टवेयर
hornjoserbsce: Softwara
Ilokano: Sopwer
Bahasa Indonesia: Perangkat lunak
interlingua: Programmatura
íslenska: Hugbúnaður
italiano: Software
עברית: תוכנה
Basa Jawa: Piranti alus
ಕನ್ನಡ: ತಂತ್ರಾಂಶ
kurdî: Nermalav
ລາວ: ຊອບແວ
latviešu: Programmatūra
Lëtzebuergesch: Software
lingála: Litámbwisi
lumbaart: Prugramadura
magyar: Szoftver
македонски: Програмска опрема
Malagasy: Rindrankajy
मराठी: आज्ञावली
مصرى: سوفتوير
Bahasa Melayu: Perisian
Mìng-dĕ̤ng-ngṳ̄: Niōng-giông
Mirandés: Software
Nederlands: Software
नेपाली: सफ्टवेर
नेपाल भाषा: सफ्टवेर
norsk nynorsk: Programvare
occitan: Logicial
ଓଡ଼ିଆ: ସଫ୍ଟୱେର
oʻzbekcha/ўзбекча: Dasturiy taʼminot
ਪੰਜਾਬੀ: ਸਾਫ਼ਟਵੇਅਰ
پنجابی: سوفٹویئر
Plattdüütsch: Software
português: Software
română: Software
Runa Simi: Llamp'u kaq
саха тыла: Софтуэр
sardu: Software
Scots: Saftware
shqip: Software
sicilianu: Software
Simple English: Software
slovenčina: Softvér
slovenščina: Programska oprema
Soomaaliga: Software
کوردی: نەرمامێر
српски / srpski: Софтвер
srpskohrvatski / српскохрватски: Softver
suomi: Ohjelmisto
svenska: Programvara
Tagalog: Software
Türkçe: Yazılım
vèneto: Software
Tiếng Việt: Phần mềm
Winaray: Software
ייִדיש: ווייכווארג
粵語: 電腦軟件
žemaitėška: Pruogramėnė īronga
中文: 软件