La invención de la distinción entre hardware y software de los ordenadores se atribuye al informático John Tukey (1915-2000), quien también utilizó por primera vez el término bit para referirse a la capacidad de la memoria. Muchos piensan que la diferencia entre hardware y software es obvia. Una regla general define el hardware como el material informático con el que se puede chocar. Pero otros hacen hincapié en la equivalencia lógica del hardware y el software de los ordenadores: «Cualquier operación realizada por el software también puede incorporarse directamente al hardware… cualquier instrucción ejecutada por el hardware también puede simularse en el software». (Tanenbaum 1999, p. 8)
A menudo el hardware de los ordenadores evoca la imagen de una unidad central de procesamiento (CPU) o un chip de memoria, y no el cable que conecta el ratón con el teclado. Pero todas las entidades físicas que forman parte de un ordenador deben ser consideradas hardware, aunque cierto hardware está más directamente implicado con el poder de manipulación de símbolos de un ordenador que otro hardware.
Tangibilidad y funcionalidad
Las reflexiones sobre las distinciones entre hardware y software pueden llevar a interesantes contrastes. El hardware es una máquina cuyo estado cambia a medida que opera, pero cuya forma es difícil de cambiar. (Un interruptor de la luz alterna entre las posiciones de encendido y apagado, pero rara vez se cambian sus componentes). Mientras se ejecuta, un programa informático permanece estático (salvo los programas que se modifican a sí mismos, una excepción que confirma la regla), pero el programa provoca cambios en el estado del hardware (memoria) y de los dispositivos externos (como las impresoras). Y ese mismo software que es estático durante la ejecución es mucho más fácil de cambiar entre ejecuciones que el hardware que cambia constantemente su estado durante la ejecución. Para entender mejor la distinción entre hardware y software, es útil considerar tres aspectos distintos de ambos: tangibilidad, funcionalidad y maleabilidad.
Tangibilidad: Si una entidad informática se define por su presencia física, es hardware. Si una entidad es independiente de cualquier forma física concreta, es software. Obsérvese que un «hardware» tangible puede adoptar muchas formas físicas. La espiral de doble hélice del ADN utiliza proteínas como hardware. Los patrones genéticos codificados en ella son software.
Funcionalidad: Si una entidad informática tiene como propósito principal una función física, es hardware. Si la entidad tiene como propósito principal una función lógica, es software. En este caso, «lógica» se refiere a la manipulación de símbolos, a la transformación de bits según reglas sintácticas y semánticas. Un determinado conjunto de bits puede significar un número entero o caracteres imprimibles, según las reglas vigentes. Los bits en sí están representados por hardware, pero las reglas que rigen su interpretación son software.
Maleabilidad: Si una entidad informática es relativamente fácil de cambiar, es software. Si la entidad es relativamente difícil de cambiar, es hardware. De los tres aspectos, éste es el más cambiante. La creciente gama de opciones con respecto a la maleabilidad ha llevado a una designación intermedia, firmware.
Dos ejemplos tempranos de computación ilustran las dos primeras distinciones, tangibilidad y funcionalidad. El primer ejemplo es el telar de Jacquard, el segundo una máquina de Turing.
En 1801 Joseph Jacquard inventó un telar que utilizaba tarjetas de cartón rígidas con agujeros que controlaban las varillas para cada paso del tejido. Estas tarjetas dieron lugar a las tarjetas perforadas utilizadas por Herman Hollerith para las máquinas de computación. El telar físico de Jacquard, de madera y metal, era de hardware. El cartón de las tarjetas perforadas era el hardware. Pero el patrón de agujeros en las tarjetas, y el patrón deseado en la tela, eran software. Incluso en este antiguo ejemplo de computación, hay una interacción entre el hardware y el software. El software del patrón de tejido se realiza en y por el hardware del telar. De una manera casi mística, el patrón de la tela está en, con y bajo su implementación de hardware. Los hilos que pasan por el telar de Jacquard son tangibles y entran en la categoría de hardware. Pero después de que el telar hace su trabajo, los hilos se convierten en una encarnación del patrón de software representado (indirectamente) por los agujeros perforados en las tarjetas de cartón.
Una máquina de Turing es una construcción teórica en la ciencia de la computación, y se compone de estados, una cinta de grabación y un cabezal de lectura/escritura (Turing 1936). Una computación se realiza cambiando los estados y leyendo y escribiendo símbolos en la cinta. Las máquinas de Turing son experimentos mentales, no objetos físicos, pero podrían fabricarse. Un cabezal de grabación y su cinta son hardware tangible con una función principalmente física, la grabación de símbolos. Cualquier medio que se utilice para representar diferentes estados dentro de la máquina de Turing también sería hardware. Pero el algoritmo incorporado en los estados y las transiciones entre ellos es lógico, y software. Obsérvese que cualquier medio que se utilice para encarnar un algoritmo es tangible, pero que el algoritmo en sí no depende de los detalles de ningún medio en particular. El mismo algoritmo podría existir simultáneamente en un cerebro humano, en un trozo de papel y en una máquina de Turing. Cada manifestación sería físicamente diferente y lógicamente idéntica.
Del mismo modo que un edificio encarna los planos de un arquitecto, una máquina de Turing encarna un algoritmo. El análogo de la máquina de Turing a un plan arquitectónico es un algoritmo; el análogo de la máquina de Turing a un edificio es el hardware de la máquina de Turing. La analogía arquitectónica es más adecuada para una máquina de Turing que para los ordenadores modernos multiusos, porque cada máquina de Turing está adaptada a un único algoritmo. Los ordenadores contemporáneos son mucho más complejos que el telar de Jacquard o una simple máquina de Turing. Pero la relación entre el hardware y el software de los ordenadores es coherente con la relación ilustrada en estos ejemplos. En todas las máquinas de computación, el hardware implementa el software, y el software está incorporado en el hardware. El software instruye al hardware, y el hardware manifiesta las acciones descritas en el software.
A pesar de estos ejemplos, sigue habiendo controversias. No hay mucha controversia sobre algunas distinciones entre hardware y software en los ordenadores modernos. Las CPU y los chips de memoria son hardware. Los algoritmos implementados en ese hardware son software. Pero no todo el mundo está de acuerdo con otras clasificaciones. Por ejemplo, algunos califican los datos como software informático, mientras que otros excluyen explícitamente que los datos sean software o hardware informático. Pero el código fuente es un ejemplo ampliamente aceptado de software, y el código fuente son datos para el intérprete o compilador apropiado. Si los datos no son software, entonces el mismo programa es o no es software, dependiendo de cómo se mire.
Algunos científicos e ingenieros informáticos incluyen los diseños, los manuales de usuario y la ayuda en línea como software, mientras que otros excluyen explícitamente dichas entidades de su consideración. Puede ser engañoso etiquetar todos los documentos asociados a un programa como software. Pero los diseños y los documentos de especificación están estrechamente relacionados con los algoritmos. Algunos diseños pueden transformarse automáticamente en lenguaje de máquina con una mínima intervención humana. Por lo tanto, puede ser útil clasificar como software los documentos directamente relacionados con el desarrollo de programas.
Los algoritmos que se utilizan cuando se enciende un ordenador suelen almacenarse en dispositivos de memoria especiales llamados memoria de sólo lectura (ROM), que se presentan en diversas formas (PROM, EPROM y EEPROM). Este tipo de dispositivos son más fáciles de cambiar que el resto del hardware, pero más difíciles de modificar que los programas almacenados en un disco duro. El término firmware se acuñó para designar esta forma intermedia de maleabilidad. La maleabilidad (o su opuesto, la resistencia al cambio) es el tercer criterio para el hardware y el software: si una entidad informática es fácil de cambiar, es software; si una entidad es difícil de cambiar, es hardware; y si es intermedia en este aspecto, es firmware. En este caso, es necesario un argumento más cercano: El estado del hardware puede ser fácil de cambiar (gran parte del hardware de los ordenadores es una variación del interruptor de encendido/apagado); pero el hardware en sí (piense en un interruptor de la luz pegado a la pared) es difícil de cambiar. Así, una unidad aritmética/lógica es hardware porque tiene algoritmos de silicio grabados permanentemente para sus cálculos, y un programa C++ que reside en un disco duro es software porque puede modificarse y recompilarse más fácilmente. Aunque el uso del firmware es habitual, las implicaciones éticas de la distinción entre hardware y software no requieren este punto intermedio de maleabilidad como categoría separada.
Implicaciones de la distinción entre hardware y software
Algún interés en la distinción entre hardware y software está asociado a cuestiones legales. En la medida en que una entidad informática es un dispositivo mecánico (hardware), está sujeta al mismo cuerpo legal que rige las escaleras y las cortadoras de césped. En la medida en que una entidad informática funciona como un algoritmo (software), las leyes de propiedad intelectual y servicio profesional son más pertinentes. Los diseños de hardware pueden patentarse, los programas de software pueden tener derechos de autor.
La distinción entre hardware y software también tiene implicaciones éticas. En un nivel abstracto, los algoritmos son puro software. Pero para tener un efecto físico, un algoritmo se encarna en alguna entidad física. La naturaleza de la incorporación, el hardware concreto elegido, tiene importantes implicaciones éticas. Por ejemplo, si un algoritmo se encarna exclusivamente en un solo cerebro, su propiedad como pensamiento privado es incontrovertible; pero cuando el pensamiento se comparte como documento escrito, surgen instantáneamente cuestiones éticas de propiedad intelectual. Del mismo modo, un pensamiento algorítmico tiene pocas consecuencias para los demás hasta que se implementa; cuando se implementa, el algoritmo puede tener consecuencias importantes.
Al decidir cómo encarnar un algoritmo, hay que seleccionar una ubicación en el continuo de maleabilidad. Normalmente, un énfasis en la implementación de hardware (por ejemplo, grabado permanentemente en silicio) fomentará una implementación más fiable y una funcionalidad menos compleja que una implementación en software (como el uso de un lenguaje de programación de alto nivel). Las implementaciones de hardware son más viables económicamente cuando se producen en masa, por lo que es más probable que los algoritmos de uso generalizado para muchos se implementen en hardware, mientras que los algoritmos personalizados para unos pocos se implementen en software. Las cuestiones relativas a los plazos de entrega, la calidad de los productos y las obligaciones de los desarrolladores con los clientes son ejemplos de las cuestiones éticas inherentes a cualquier decisión de implementación. A medida que disminuyen los costes de fabricación del hardware y aumentan los de la escritura del software, es posible que haya que reconsiderar los juicios sobre estas cuestiones.
A medida que la informática se hace omnipresente, el software tiende a sustituir al hardware para ofrecer ciertas funcionalidades. Los aviones son un ejemplo dramático de esta tendencia. Primero los cazas y luego los aviones comerciales han sustituido los controles mecánicos por complejos algoritmos informáticos. Los algoritmos informáticos permiten a los nuevos aviones volar de forma más eficiente y económica. Pero la redundancia del hardware es difícil de replicar en el software (los defectos del software tienden a repetirse de una manera que los defectos del hardware no lo hacen), y esto tiene consecuencias para la fiabilidad de los sistemas vitales que dependen cada vez más del software para su seguridad. Estas diferencias dan lugar a opciones éticamente significativas entre operaciones más eficientes utilizando software y dispositivos de hardware más caros pero más seguros. Como estas compensaciones son cada vez más comunes, las diferentes tradiciones de los profesionales de los distintos campos de la ingeniería pueden convertirse en un problema ético. Por ejemplo, los ingenieros de software rara vez tienen licencia (en Estados Unidos, sólo Texas emite una licencia de ingeniería de software, y los ingenieros de software de las empresas tampoco están obligados a obtenerla), pero otros ingenieros de aplicaciones críticas de seguridad pueden tener licencia. En este caso, la distinción entre hardware y software puede ayudar a determinar el interés del estado en certificar la competencia profesional.
Un último ejemplo de la importancia ética de la distinción entre hardware y software tiene menos que ver con los profesionales de la informática y más con el público no programador y cómo ven los problemas con la informática. Los ordenadores pueden ser un chivo expiatorio muy útil: «No podemos ayudarle en este momento; el ordenador no funciona». «Imposible. No hay forma de escribir eso en el ordenador». «No recuerdo ese correo electrónico. Supongo que el ordenador se lo ha comido»
La mayoría de la gente sabe que los errores de software son responsabilidad de los programadores. Pero las organizaciones y los individuos a veces pueden esconderse detrás del hardware de sus máquinas. Hacer hincapié en los aspectos de hardware de los ordenadores puede ayudar a crear una distancia artificial entre el público en general y los errores humanos en el software. Esta falta de énfasis en la responsabilidad humana es un peligro que acecha a la distinción entre hardware y software. La realidad es que los algoritmos son artefactos humanos de los que los humanos son responsables, independientemente de cómo se implementen.
Los desafíos éticos que acechan en la distinción entre hardware y software se reflejan en las controversias legales y políticas. Existe el freeware, el shareware y el software de código abierto, pero no hay un movimiento paralelo para declarar libre el hardware informático. El sistema de patentes ha sido, en general, exitoso en la protección de las innovaciones de hardware, pero los derechos de autor, las patentes, las marcas registradas y el secreto comercial han demostrado ser problemáticos de manera diferente cuando se aplican a los programas informáticos. Las controversias sobre las nuevas leyes que penalizan lo que antes se consideraba ingeniería inversa legítima del software han puesto de manifiesto la importancia de comprender las diferencias entre el hardware y el software.
KEITH W. MILLER
Vea también Ética informática;Software libre;Sobrecarga de información.
BIBLIOGRAFÍA
Tanenbaum, Andrew S. (1999). Structured Computer Organization, 4ª edición. Prentice-Hall, Upper Saddle River, NJ.
Turing, Alan. (1936). «On Computable Numbers, With an Application to the Entscheidungsproblem». Proceedings of the London Mathematical Society, Series 2, 42: 230-267.