A invenção da distinção hardware/software de computador é creditada ao cientista informático John Tukey (1915-2000), que também utilizou pela primeira vez o termo bit para capacidade de memória. Muitos pensam que a diferença entre hardware e software é óbvia. Uma regra de ouro define hardware como o material informático que se pode esbarrar. Mas outros enfatizam a equivalência lógica de hardware e software de computador: “Qualquer operação executada por software também pode ser incorporada directamente no hardware … qualquer instrução executada pelo hardware também pode ser simulada em software”. (Tanenbaum 1999, p. 8)
br>
A maior parte das vezes o hardware do computador conjuga uma imagem de uma unidade central de processamento (CPU) ou de um chip de memória, e não o fio que liga o rato a um teclado. Mas todas as entidades físicas que fazem parte de um computador devem ser consideradas hardware, embora algum hardware esteja mais directamente envolvido com o poder de manipulação do símbolo de um computador do que outro hardware.
Tangibilidade e Funcionalidade
Rumações sobre as distinções entre hardware e software podem levar a contrastes interessantes. O hardware é uma máquina cujo estado muda à medida que funciona, mas cuja forma é difícil de alterar. (Um interruptor de luz alterna entre as posições de ligar e desligar, mas raramente se altera as suas partes constituintes). medida que executa, um programa de software permanece estático (excepto para programas de auto modificação, uma excepção que prova a regra), mas o programa provoca alterações no estado do hardware (memória) e dispositivos externos (tais como impressoras). E esse mesmo software que é estático durante a execução é muito mais fácil de mudar entre execuções do que o hardware que muda constantemente o seu estado durante a execução. Para melhor compreender a distinção hardware/software, é útil considerar três aspectos distintos de ambos: tangibilidade, funcionalidade, e maleabilidade.
Tangibilidade: Se uma entidade informática é definida pela sua presença física, é hardware. Se uma entidade é independente de qualquer forma física em particular, é software. Note-se que um “hardware” tangível pode assumir muitas formas físicas. A dupla espiral de hélice do ADN utiliza proteínas como seu hardware. Os padrões genéticos aí codificados são software.
Funcionalidade: Se uma entidade informática tem como objectivo principal uma função física, é hardware. Se a entidade tem como objectivo principal uma função lógica, é software. Aqui “lógica” é usada para significar manipulação de símbolos, a transformação de bits de acordo com regras sintácticas e semânticas. Um conjunto particular de bits pode significar um número inteiro ou caracteres imprimíveis, dependendo das regras em vigor. Os bits em si são representados por hardware, mas as regras que regem a sua interpretação são software.
Malleabilidade: Se uma entidade informática é relativamente fácil de alterar, é software. Se a entidade é relativamente difícil de alterar, é hardware. Dos três aspectos, este é o que está mais em fluxo. A gama crescente de opções relativamente à maleabilidade levou a uma designação intermédia, firmware.
Dois primeiros exemplos de computação ilustram as duas primeiras distinções, tangibilidade e funcionalidade. O primeiro exemplo é o tear Jacquard, o segundo uma máquina Turing.
Em 1801 Joseph Jacquard inventou um tear de tecelagem utilizando cartões de cartão rígido com orifícios que controlavam as varetas para cada passo da trama. Estes cartões levaram aos cartões perfurados utilizados por Herman Hollerith para máquinas informáticas. O tear físico de Jacquard, madeira e metal, era hardware. A placa de massa dos cartões perfurados era hardware. Mas o padrão dos furos nos cartões, e o padrão desejado no pano, eram software. Mesmo neste antigo exemplo de computação, há uma interacção entre hardware e software. O software do padrão de tecelagem é realizado no e pelo hardware do tear. De uma forma quase mística, o padrão de tecido está dentro, com, e sob a sua implementação de hardware. Os fios que atravessam o tear de Jacquard são tangíveis, e enquadram-se na categoria de hardware. Mas depois do tear fazer o seu trabalho, os fios tornam-se uma encarnação do padrão de software representado (indirectamente) pelos buracos perfurados nos cartões de papelão.
A máquina Turing é uma construção teórica em informática, e é composta por estados, uma fita de gravação, e uma cabeça de leitura/escrita (Turing 1936). Um cálculo prossegue alterando os estados e lendo e escrevendo símbolos para a fita adesiva. As máquinas de Turing são experiências de pensamento, não objectos físicos, mas podem ser fabricadas. Uma cabeça de gravação e a sua fita são hardware tangível com uma função principalmente física, a gravação de símbolos. Qualquer que seja o meio utilizado para representar diferentes estados dentro da máquina de Turing, seria também hardware. Mas o algoritmo incorporado nos estados e as transições entre eles é lógico, e o software. Note-se que qualquer meio que seja utilizado para incorporar um algoritmo é tangível, mas que o algoritmo em si não depende dos detalhes de qualquer meio em particular. O mesmo algoritmo poderia existir simultaneamente num cérebro humano, num pedaço de papel, e numa máquina Turing. Cada manifestação seria simultaneamente fisicamente diferente e logicamente idêntica.
Da mesma forma que um edifício encarna os planos de um arquitecto, uma máquina Turing encarna um algoritmo. A máquina Turing análoga a um plano arquitectónico é um algoritmo; a máquina Turing análoga a um edifício é o hardware da máquina Turing. A analogia arquitectónica é mais adequada para uma máquina de tornear do que para computadores modernos e polivalentes, porque cada máquina Turing é personalizada com um único algoritmo. Os computadores contemporâneos são muito mais complexos do que o tear de Jacquard ou uma simples máquina Turing. Mas a relação entre hardware e software de computador é consistente com a relação ilustrada nestes exemplos. Em todas as máquinas informáticas, o hardware implementa o software, e o software é incorporado no hardware. O software instrui o hardware, e o hardware manifesta as acções descritas no software.
Embora estes exemplos, as controvérsias permanecem. Não há muita controvérsia sobre algumas distinções de hardware/software nos computadores modernos. As CPUs e os chips de memória são hardware. Os algoritmos implementados nesse hardware são software. Mas nem todos concordam com outras classificações. Por exemplo, algumas pessoas rotulam os dados como software de computador, enquanto outras excluem explicitamente os dados de serem software ou hardware de computador. Mas o código fonte é um exemplo amplamente aceite de software, e o código fonte são dados para o intérprete ou compilador apropriado. Se os dados não são software, então o mesmo programa é ou não é software, dependendo de como se olha para ele.
Alguns cientistas e engenheiros informáticos incluem desenhos, manuais de utilizador, e ajuda online como software, enquanto outros excluem explicitamente tais entidades de serem consideradas. Pode ser enganoso rotular todos os documentos associados a um programa como software. Mas os desenhos e documentos de especificação estão intimamente relacionados com algoritmos. Alguns desenhos podem ser automaticamente transformados em linguagem de máquina com um mínimo de intervenção humana. Pode assim ser útil classificar como documentos de software directamente relacionados com o desenvolvimento de programas.
Algoritmos utilizados quando um computador é ligado são tipicamente armazenados em dispositivos de memória especiais chamados de memória só de leitura (ROM), que vêm em várias formas (PROM, EPROM, e EEPROM). Estes tipos de dispositivos são mais fáceis de mudar do que outro hardware, mas mais difíceis de mudar do que os programas armazenados num disco rígido. O termo firmware foi cunhado para designar esta forma intermédia de maleabilidade. A maleabilidade (ou o seu oposto, resistência à mudança) é o terceiro critério para hardware e software: se uma entidade informática é fácil de mudar, é software; se uma entidade é difícil de mudar, é hardware; e se é intermédia neste aspecto, é firmware. Aqui é necessário um argumento mais próximo: O estado do hardware pode ser fácil de mudar (muito hardware de computador é uma variação no interruptor on/off); mas o próprio hardware (pense num interruptor ligeiro ligado a uma parede) é difícil de mudar. Assim, uma unidade aritmética/lógica é hardware porque tem permanentemente gravados algoritmos de silício para os seus cálculos, e um programa C++ que reside num disco rígido é software porque pode ser mais facilmente modificado e recompilado. Embora a utilização de firmware seja comum, as implicações éticas da distinção hardware/software não requerem este meio termo de maleabilidade como uma categoria separada.
Implicações da distinção hardware/software
Algum interesse na distinção hardware/software está associado a questões legais. Na medida em que uma entidade informática é um dispositivo mecânico (hardware), está sujeita ao mesmo corpo de lei que rege as escadas e os corta-relvas. Na medida em que uma entidade informática funciona como um algoritmo (software), as leis da propriedade intelectual e do serviço profissional são mais pertinentes. Os designs de hardware podem ser patenteados, os programas de software podem ter direitos de autor.
A distinção hardware/software também tem implicações éticas. A um nível abstracto, os algoritmos são puro software. Mas para ter um efeito físico, um algoritmo é corporizado em alguma entidade física. A natureza da incorporação, o hardware específico escolhido, tem importantes implicações éticas. Por exemplo, se um algoritmo é incorporado exclusivamente num único cérebro, a sua propriedade como um pensamento privado é incontroversa; mas quando o pensamento é partilhado como um documento escrito, surgem instantaneamente questões éticas de propriedade intelectual. Da mesma forma, um pensamento algorítmico tem poucas consequências para os outros até ser implementado; quando implementado, o algoritmo pode ter consequências importantes.
Ao decidir como incorporar um algoritmo, é necessário seleccionar um local sobre o continuum de maleabilidade. Normalmente, uma ênfase na implementação de hardware (por exemplo, gravado permanentemente em silício) encorajará uma implementação mais fiável e menos complexa do que uma implementação em software (como a utilização de uma linguagem de programação de alto nível). As implementações de hardware são mais viáveis economicamente quando são produzidas em massa, pelo que os algoritmos amplamente utilizados para muitos são mais susceptíveis de serem implementados em hardware, enquanto que os algoritmos personalizados para poucos são mais susceptíveis de serem implementados em software. As questões de prazos de entrega, quão bom é o suficiente, e as obrigações de um desenvolvedor para com os clientes são exemplos das questões eticamente carregadas inerentes a qualquer decisão de implementação. medida que os custos de fabricação de hardware diminuem e os custos de escrita de software aumentam, os julgamentos relativos a tais questões podem ter de ser reconsiderados.
Como a computação se torna omnipresente, o software tende a substituir o hardware para fornecer certas funcionalidades. Os aviões fornecem um exemplo dramático desta tendência. Primeiro os aviões de caça e depois os aviões comerciais substituíram algoritmos computacionais complexos por controlos mecânicos. Os algoritmos informáticos permitem aos aviões mais recentes voar de forma mais eficiente e económica. Mas a redundância de hardware é difícil de replicar em software (os defeitos de software tendem a repetir-se de uma forma que os defeitos de hardware não se verificam), e isto tem consequências para a fiabilidade de sistemas críticos de vida que dependem cada vez mais do software para a sua segurança. Estas diferenças resultam em escolhas eticamente significativas entre operações mais eficientes utilizando software e dispositivos de hardware mais caros mas mais seguros. medida que estas trocas se tornam cada vez mais comuns, as diferentes tradições dos profissionais em diferentes áreas da engenharia podem tornar-se uma questão ética. Por exemplo, os engenheiros de software raramente são licenciados (nos Estados Unidos, apenas o Texas emite uma licença de engenharia de software, e os engenheiros de software corporativos também não são obrigados a obter essa licença), mas outros engenheiros em aplicações críticas para a segurança podem ser licenciados. Neste caso, a distinção hardware/software pode ajudar a determinar o interesse do estado em certificar a competência profissional.
Um exemplo final da importância ética da distinção hardware/software tem menos a ver com profissionais de computação e mais com o público não-programador e com a forma como estes vêem os problemas com a computação. Os computadores podem ser um útil bode expiatório: “Não podemos ajudá-lo com isso agora; o computador está em baixo”. “Impossível. Não há forma de digitar isso no computador”. “Não me lembro desse e-mail. Acho que o computador o comeu””
A maioria das pessoas sabe que os bugs de software são da responsabilidade dos programadores. Mas organizações e indivíduos podem por vezes esconder-se atrás do hardware das suas máquinas. Enfatizar os aspectos de hardware dos computadores pode ajudar a criar uma distância artificial entre o público em geral e os erros humanos no software. Isto considera que a responsabilização humana é um perigo que se esconde na distinção hardware/software. A realidade é que os algoritmos são artefactos humanos pelos quais os seres humanos são responsáveis, independentemente da forma como são implementados.
Os desafios éticos que espreitam dentro da distinção hardware/software reflectem-se em controvérsias legais e políticas. Há freeware, shareware, e software de código aberto; mas não há nenhum movimento paralelo para declarar livre o hardware do computador. O sistema de patentes tem sido, no essencial, bem sucedido na protecção de inovações de hardware, mas os direitos de autor, patentes, marcas registadas e segredo comercial têm-se revelado problemáticos de uma forma diferente quando aplicados ao software informático. Controvérsias sobre novas leis que criminalizam o que em tempos foi considerado legítima engenharia inversa de software sublinharam a importância de compreender as diferenças entre hardware e software.
KEITH W. MILLER
VER TAMBÉM Ética Informática;Software Livre;Sobrecarga de Informação.
BIBLIOGRAFIA
Tanenbaum, Andrew S. (1999). Structured Computer Organization, 4ª edição. Prentice-Hall, Upper Saddle River, NJ.
Turing, Alan. (1936). “On Computable Numbers, With an Application to the Entscheidungsproblem”. Actas da London Mathematical Society, Série 2, 42: 230-267.