A pergunta a ser respondida é: "o que é um Programa?", ou "o que é um Software?". Para efeito desta discussão, software e programa tem o mesmo significado.
Uma definição clássica de "software"
Uma definição clássica de software é:
Software é uma sentença escrita em uma linguagem computável, para a qual existe uma máquina (computável) capaz de interpretá-la. A sentença (o software) é composta por uma seqüência de instruções (comandos) e declarações de dados, armazenável em meio digital. Ao interpretar o software, a máquina computável é direcionada à realização de tarefas especificamente planejadas, para as quais o software foi projetado.
Ao examinarmos mais detalhadamente os elementos constituintes do software, aquele que normalmente se sobressai é a seqüência de instruções que compõe o software. Mas à medida em que o software cresce em tamanho e complexidade, o elemento dado (e a informação e o conhecimento que dele provém) adquire cada vez mais importância.
Veja abaixo, por exemplo, uma licença de uso de software da IBM (Veja aqui os termos da licença completa). Veja ainda uma discussão sobre Licença de Uso de Software.
... O termo "Programa" significa o programa original e todas as cópias completas ou parciais do mesmo. Um Programa consiste em instruções legíveis por máquina, seus componentes, dados, conteúdo audiovisual (tal como imagens, texto, gravações ou figuras) e materiais licenciados relacionados.
Vejamos então, de acordo com a licença, do que consiste um programa:
instruções legíveis por máquina,
conteúdo audiovisual (tal como imagens, texto, gravações ou figuras) e;
materiais licenciados relacionados
Vejamos uma análise dos elementos acima indicados:
instruções legíveis por máquina
A definição implica na existência de uma máquina que lê instruções. O termo "instruções" indica a intenção de enviar à máquina algo que esta possa entender, e que tem por meta instruí-la, orientá-la ou comandá-la a realizar algo.
Podemos então inferir que qualquer conjunto de instruções legíveis por máquina, qualquer que seja a máquina, quaisquer quem sejam as instruções, podem constituir parte do que chamamos de programa.
Considerando o fato de que toda máquina inventada pelo ser humano possui uma linguagem artificial com a qual nos comunicamos com a máquina, considerando ainda que esta linguagem é composta por cadeias de símbolos que formam sentenças, então qualquer sentença numa linguagem artificial pode constituir parte do que chamamos de programa.
Esta é uma parte recursiva da definição. Um programa é composto por componentes, o que implica dizer que um programa podem ser constituído por outros programas menores ou sub-programas.
Um programa pode conter dados, o que significa que um programa não é composto apenas por instruções. A existência de dados em um programa está compatível com a definição do Modelo Computacional de von Neumann, onde um programa armazenado na memória é formado por instruções e dados.
conteúdo audiovisual (tal como imagens, texto, gravações ou figuras)
Este aspecto extrapola o modelo de Modelo Computacional de von Neumann, a medida que torna explícito o fato de que um programa pode ser algo maior do que o que é armazenado na memória no momento de sua execução.
Em outras palavras, qualquer material escrito, impresso, apresentável em qualquer mídia de comunicação, de natureza textual, gráfica, audível, etc, pode pertence ou ser parte de um programa.
Do ponto de vista de natureza física dos materiais que compõem um programa, este aspecto veicula a mesma essência de generalidade do item anterior, mas torna explícito o fato de que cada uma das partes do programa está relacionada à existência de produtos ou itens que são criados e pertencem a organizações, e que portanto estão sujeitos às regras de comercialização, distribuição e/ou uso. Para maior aprofundamento, veja a discussão sobre Licença de Uso de Software
Do exposto acima podemos inferir que um programa é um artefato complexo, que envolve uma grande quantidade de aspectos distintos, como:
habilidade de comunicação com máquinas (através das instruções e dados) e seres humanos (através de dados manipulados pela máquina e mídias externas à máquina),
organização em uma estrutura hierárquica (através de seus componentes);
sujeição a regras comerciais explícitas, pois foi criado por organizações humanas que detem controle sobre sua existência e uso através de uma licença.