Skip to content

The blurry (and ever-shifting) boundary between hardware and software

by on February 6, 2013

In our last lecture, in trying to come up with a definition of “software-defined radios” that clearly distinguishes them from “ordinary radios”, I made the philosophical claim that no such clear distinction can be made. Instead, I suggested that all electronic devices should be thought of as occupying a continuous spectrum between “pure hardware” and “pure software”.

In a sense I was simply restating the classic principle of the functional equivalence of hardware and software, whose most frequenctly quoted version is attributed to A. S. Tanenbaum:

Hardware and software are logically equivalent. Any operation performed by
software can also be built directly into the hardware and any instruction executed
by the hardware can also be simulated in software. The decision to put certain
features in hardware and others in software is based on such factors as cost,
speed, reliability and frequency of change. There are no hard and fast rules to
the effect that X must go into the hardware and Y must be programmed
explicitly. Designers with different goals may, and often do, make different
decisions … the boundary between hardware and software is arbitrary and
constantly changing. Today’s software is tomorrow’s hardware, and vice
versa.

 

There are many discussions of this old principle as it applies to modern computing devices on the Internet, see e.g. here (which also makes a very interesting legal comment):

I’m in the middle of a discussion regarding the equivalence of software and hardware computing systems, and I would like some comment. Any arguments and/or documentation (supporting or dissenting) would be appreciated.

My position is that the implementation of a computational processing system can be separated from the act of logical computation, i.e. the agent performing logical processing (i.e., computation) can be distinctly separated from the process. My line of reasoning is more observational at the moment. For example,

  • A PID controller may be implementing in pure (analog or digital) hardware or software.
  • It is now routine to compile a C program into VHDL, then write the resulting “hardware” configuration into an FPGA.
  • Computational systems have been constructed from fluidics and other mechanical systems.
  • Computations systems have been constructed from molecular biology (i.e., DNA computing.)

From these observations, one might conclude that hardware computational systems, from simple collections of basic gates to FPGAs, are functionally equivalent to software programs.

The question is not entirely academic: the US FDA places dramatically different validation and verification (V&V) requirements on a medical device depending upon its use of hardware or software for logical operations. Software systems are subject to a number of standards and regulations, and the resulting testing procedure and documentation burden is heavy. On the other hand, simple hardware-only implementations, such as a PID controller, are subject to much less federal regulation.

 

A heroic attempt to come up with a working definition of the hardware/software/firmware boundaries is here.

Does everyone find this reasoning convincing? If so, how do you account for the fact that in practice hardware design and software design are two very different disciplines requiring very different sets of skills and very different professional cultures etc? If you don’t buy this reasoning, what are your arguments against it?

 

From → readings

5 Comments
  1. I have collected some miscellaneous points which are listed below:

    1) I will define analog = hardware. In other words, can we control the analog hardware by means of software. Having said this, I think comparison of software vs programmable/reconfigurable hardware makes more sense than the comparison between software and hardware. Again, I think “hardware” is a tangible matter that is not programmable, e.g. old FM radios etc.

    2) .Firmware is more/superior than software in the sense that it actually changes the hardware, i.e., it effectively short circuits some connections between gates and open circuits some other connections as programmable hardware is mostly a collection of thousands of gates.

    3) Can we ever think of an all software device? For example, an all software PC, an all software antenna? But then it will be invisible as software is something which is not tangible (agreed here to the comment made by the blog dmmd.net). My conjecture is, future devices will still be composed of software + ASIC. Moreover, ASIC=firmware/programmable hardware + hardware.

    • I am glad to see a comment skeptical of my thesis. There are some very deep philosophical places we can go if we try to make some of these ideas more precise. I will just mention a couple.

      – re: “I think “hardware” is a tangible matter that is not programmable, e.g. old FM radios etc.” We can tune different stations on a FM radio. Is that in some essential sense different from “programming”?

      – re: “Firmware is more/superior than software in the sense”, I wouldn’t think of this as an inferior/superior or lesser/greater type value-judgment.

  2. >I am glad to see a comment skeptical of my thesis.

    I wasn’t really skeptic, rather I attempted to compare and contrast the standard/traditional notions of software and hardware with my own set of notions 🙂

    My set of notions is as follows. Software has two “main” types, i) program ii) firmware. Similarly, hardware has two “main” types i) dumb/fixed hardware ii) smart/programmable hardware.

    Now, “program” can be any user application, e.g. game etc, or any OS related piece of code which is run on general-purpose programmable hardware (i.e. CPU, GPU). Since a CPU/GPU is always required to do multi-tasking, so a program doesn’t and shouldn’t change the the CPU/GPU itself. In other words, since the CPU/GPU is to be used for thousands of different applications, we won’t like one application changing the configuration of hardware permanently. Rather, the same basic set of instruction set architecture (ISA) is used at lower level to run each and every program. On the other hand, firmware is a piece of code that is written with the sole intention to change the physical layout of programmable hardware itself so as it performs just one single task.

    That is why, I proceeded to say that when we compare hardware vs software, we indeed compare program vs programmable hardware; we don’t think about the firmware and/or dumb hardware.

    >re: “I think “hardware” is a tangible matter that is not programmable, e.g. old FM radios etc.” We >can tune different stations on a FM radio. Is that in some essential sense different from >“programming”?

    You are absolutely right, Prof. I agree with the philosophy that the traditional FM radio and today’s SDR-based FM radio are indeed functionally equivalent.But again, I want to separate the two terms, i.e. programming of FM radios vs. programming of FPGA (for example). The reason is that in the former case the hardware (FM radio) is being tuned by another hardware (varactors/knobs etc.) but in the later case it is indeed the invisible program which does so. Moreover, since Hardware programming is limited in its scope, in future we can expect to have the phrase “programming implies a (software) program”.

    Anyway, my hypothesis is that by now, we might have achieved a good balance between the two, i.e. programmable hardware and program. In other words, in future I can’t see an intelligent/smart device which is all software or all hardware based. But let’s wait and watch.

    >re: “Firmware is more/superior than software in the sense”, I wouldn’t think of this as an >inferior/superior or lesser/greater type value-judgment.

    I agree; when I wrote it, I did not actually mean superiority; it was just wrong selection of words.

  3. Mike permalink

    I feel like software and hardware are two fairly separate entities, what makes the ‘line’ confusing is when you try and give credit to one or the other. I like how the DDMD article defined hardware: “Electronic hardware is anything that is electrical or current goes through.” This sounds very general, but to me it makes the hardware/software line fairly distinct. I know that I can’t define software as ‘everything else’, but I have a really hard time trying to define this concept. But I’ll give it a try: Software is a communication tool, or language, used between hardware devices.

    Although these definitions are not exact, I’m going to try and apply them to the tuning a radio example to try and clarify my definition’s. I think of the radio knob and the AM/FM radio inside as hardware, fairly obvious. But when you turn the knob, there is communication between the radio and said knob, that communication would be the software saying ‘tune to a different station.

    To conclude, I believe when it comes to the future of hardware and software that tomorrow’s hardware will just come with a wider vocabulary than what we see today. Hopefully I was able to explain that in a manner that made sense. All the best,

    • > I know that I can’t define software as ‘everything else’,
      > but I have a really hard time trying to define this concept.
      > But I’ll give it a try: Software is a communication tool,
      > or language, used between hardware devices.

      That’s not a bad definition. Here’s another: “software is that part of an electronic device that can be easily modified and reconfigured”.

      But you are right that a very precise definition is difficult, maybe even impossible.

      I am glad to see some thoughtful comments.

      Even though this may seem like an abstract and useless exercise, I think every electrical engineer would benefit from spending a few minutes thinking it through.

Leave a comment