소프트웨어는 다양한 특성으로 정의를 통일하기가 어려워졌다. 소프트웨어산업진흥법은 소프트웨어를 '컴퓨터 등의 장비와 그 주변장치에 대하여 명령ㆍ제어 등을 가능하게 하는 지시ㆍ명령의 집합과 이를 작성하기 위하여 사용된 기술 등의 자료'로 추상적인 정의를 하고 있다. 소프트웨어개발촉진법은 프로그램을 “특정한 결과를 얻기 위하여 컴퓨터 등 장치 내 사용되는 일련의 명령 표현”으로 정의하였고, 소프트웨어는 “프로그램과 설계서·기술서 기타 관련자료”로 정의되었다.
소프트웨어는 다양한 특성을 갖기 때문에 하나로 정의를 내리는 것은 불가능한 일이 되었다. 소프트웨어 관련 기본법으로 볼 수 있는 소프트웨어산업진흥법에서는 소프트웨어를 “컴퓨터, 통신, 자동화 등의 장비와 그 주변장치에 대하여 명령ㆍ제어ㆍ입력ㆍ처리ㆍ저장ㆍ출력ㆍ상호작용이 가능하게 하는 지시ㆍ명령(음성이나 영상정보 등을 포함한다)의 집합과 이를 작성하기 위하여 사용된 기술서(記述書)나 그 밖의 관련 자료”로 정의내리고 있다. 정의를 보면 소프트웨어는 하드웨어에 종속되어서 기능을 수행하는 지시, 명령의 집합으로 이해될 수 있다. 이는 상당히 추상적이며, 소프트웨어개발촉진법상 정의되었던 프로그램과 소프트웨어의 정의가 훨씬 직관적이었다. 즉, 소프트웨어개발촉진법에서는 프로그램과 소프트웨어에 대한 정의를 같이 내 리고 있다. 프로그램은 “특정한 결과를 얻기 위하여 컴퓨터 등 정보처리능력을 가진 장치내에서 직접 또는 간접으로 사용되는 일련의 지시·명령으로 표현된 것”으로 정의하였고, 소프트웨어는 “프로그램과 이를 작성하기 위하여 사용된 설계서·기술서 기타 관련자료”로 정의되었다. 그러나 설계서나 기술서 등을 포함한 관련 자료가 소프트웨어의 개념에 포함되는 것인지는 의문이다. 왜냐하면, 소프트웨어는 프로그램 언어로 작성된 알고리즘의 해법이며, 이를 표현한 지시 및 명령어의 조합 내지 집합체를 의미하는 것이기 때문이다. 더욱 직관적으로는 HW의 반대 개념이 SW라고 볼 수 있다는 점에서 그러하다. 中山信弘 교수도 소프트웨어산업진흥법과 같이 설계도 등도 SW에 당연하게 포함된다고 하나, 그 구체적인 이유를 적지는 않고 있다. 다만, 추측컨대 실무적으로 소프트웨어의 개발에 있어서 설계도는 실제 프로그래밍을 이끌어내는 기본정보이기 때문에 소프트웨어에 준해서 본다는 취지로 생각된다.