저장장치에 저장된 특정한 목적의 하나 또는 다수의 컴퓨터 프로그램 위키백과, 무료 백과사전
컴퓨터 소프트웨어(computer software, 혹은 간단히 소프트웨어, 문화어: 쏘프트웨어, 순화 용어: 무른모)는 컴퓨터에게 동작 방법을 지시하는 명령어 집합의 모임이다.[1][2] 프로그램 소프트웨어는 컴퓨터 하드웨어에 직접 명령어를 주거나 다른 소프트웨어에 입력을 제공함으로써, 명령어의 기능을 수행한다. 컴퓨터 소프트웨어는 컴퓨터 하드웨어의 반대 의미로, 컴퓨터 하드웨어는 해당 일을 실제로 수행하는 시스템이다. 쉽게 설명하자면 생명체를 하드웨어라고 가정한다면, 그를 구성하는 유전자가 소프트웨어라고 생각할 수 있다.
"소프트웨어"라는 용어는 1957년에 존 터키(John W. Tukey)가 처음 사용한 용어이다. 일상적으로 이 용어는 응용 소프트웨어의 의미로 자주 쓰인다. 컴퓨터 과학과 컴퓨터 공학에서 "컴퓨터 소프트웨어"는 컴퓨터 시스템, 프로그램, 데이터에 의해 처리된 모든 정보를 말한다.
소프트웨어 대부분은 고급 프로그래밍 언어로 개발된다. 이 유형의 프로그래밍 언어는 프로그래머들에게 더 쉽고 더 효율적인데, 그 이유는 기계어보다 자연어에 더 가깝기 때문이다.[3] 고급 언어는 컴파일러나 인터프리터, 또는 이 둘의 조합을 이용하여 기계어로 변환된다. 소프트웨어는 컴퓨터의 기계어와 상당히 일치되는 저급 어셈블리어로도 개발이 가능하며 이는 어셈블러를 사용하여 기계어로 변환된다.
소프트웨어의 최초의 장소가 되는 윤곽(알고리즘)은 계획된 해석기관을 위해 19세기 에이다 러브레이스가 작성하였다. 그러나, 해석기관이든 소프트웨어든 실제로 만들어진 것은 없었다.
오늘날 우리가 인식하는 컴퓨터의 발명 이전의 소프트웨어에 대한 최초의 이론은 앨런 튜링이 1935년 수필 《Computable numbers with an application to the Entscheidungsproblem》에서 제안되었다. (결정 문제)
이는 컴퓨터 과학과 소프트웨어 공학의 양대 산맥이 탄생하는 계기가 되었으며, 둘 다 소프트웨어 및 소프트웨어의 제작에 대해 연구한다. 컴퓨터 과학은 더 이론적인 반면(튜링의 수필이 컴퓨터 과학의 한 예이다), 소프트웨어 공학은 더 실용적인 부분에 초점을 둔다.
그러나 1946년 이전까지 우리가 알고있는 소프트웨어, 즉 저장식 프로그램 디지털 컴퓨터의 메모리에 저장되는 프로그램들은 존재하지 않았다. 최초의 전자식 컴퓨팅 장치들이 그 대신 이들을 다시 프로그램할 목적으로 재배치되었다.
사용자들의 시각은 보통 프로그래머의 시각과는 차이가 있다. 현대의 범용 컴퓨터(임베디드 시스템의 반대 의미)를 사용하는 사람들은 보통 소프트웨어를 플랫폼, 응용 프로그램, 사용자 소프트웨어의 세 층으로 분류한다.
컴퓨터 소프트웨어는 컴퓨터의 저장장치("메모리" 또는 "램"으로 알려져 있음)로 "적재"되어야 한다.
소프트웨어를 불러오면 컴퓨터는 소프트웨어를 작동할 수 있다. 컴퓨터는 컴퓨터 프로그램을 "실행"하여 작동시킨다. 여기에는 응용 소프트웨어에서 명령어를 보내는 과정이 포함되는데, 시스템 소프트웨어를 거쳐 궁극적으로 기계어 명령이 하드웨어에 전달된다. 각각의 명령어는 하나의 작업(데이터를 옮기거나, 계산 결과를 저장하거나, 명령의 흐름을 변경하는 등의)을 수행하도록 한다.
소프트웨어는 프로그래밍 언어와 관련 유틸리티를 사용하여 제작되는데, 다음과 같은 몇 가지 형태가 있다.
컴퓨터 프로그래밍, 소프트웨어 공학, 소프트웨어 구조, SaaS도 참조하라.
소프트웨어 제작 때는 다음과 같은 컴퓨터 언어가 쓰인다.
그리고 소프트웨어 제작할 때 쓰이는 프로그램은 다음과 같다.
소프트웨어 특허에 대해서는 찬반이 엇갈린다. 특허가 "발명자"의 아이디어를 보호하는 반면에, 많은 이들이 이것이 소프트웨어 개발을 방해한다고 믿기 때문이다.
대한민국의 소프트웨어산업진흥법에서는 소프트웨어를 "컴퓨터·통신·자동화 등의 장비와 그 주변장치에 대하여 명령·제어·입력·처리·저장·출력·상호 작용이 가능하도록 만드는 지시·명령(음성이나 영상정보를 포함한다)의 집합과 이를 작성하기 위하여 사용된 기술서 기타 관련 자료를 말한다."라고 정의한다.(법 제2조 1호)
소프트웨어에는 여러 종류의 라이선스 형태가 있다. 크게는 다음과 같이 나뉜다.
소프트웨어 개발 단계에 따라 분류를 나눌 수 있다. 소프트웨어 배포자에 따라 이 소프트웨어 분류는 바뀔 수 있지만 일반적인 룰은 다음과 같다.
Seamless Wikipedia browsing. On steroids.