An interesting question was posed to my “Do the math” post of last week:

What does this have to do with nanotechnology?

A little history helps, as usual.
Eniac plugboard: Hardware or software?

The boundary between hardware and software has been fuzzy for decades, if as hardware you allow electronics. The first “silicon compiler” was introduced in 1979, and ever since, if you want to design a complex chip, you are well advised to use a design language such as VHDL or Verilog. The opposite has been happening as well — for small electronics projects you’re much better off with a PIC (“programmable IC”) microcontroller (or any of a thousand competitors) than trying to do the same thing in discrete logic.

And of course, FPGAs blur the distinction even more. The bottom line is that when you’re designing a complex system, it will probably end up looking like software, whether the ultimate implementation winds up being a physical circuit or a sequence of instructions interpreted by a processor.

The way technology is developing, almost any very complex system is very likely to have both forms of functionality in its ultimate implementation. Consider how many microcontrollers there are in your car… or your toaster.

With nanotechnology, this blurring will extend well beyond control circuits to virtually every aspect of a system. Nanocontrollers will be so small and cheap that they will be ubiquitous. At the same time, the complexity of the mechanical parts of the system will be so great that they will almost certainly have to be designed in detail by “matter compilers.”

Which means that to the designer, everything will look like software. When you design the system at the high, abstract level that a human brain can comprehend, you won’t have any idea how much of the functionality will be implemented as instruction sequences, how much by reconfigurable circuit elements, and how much by gears, levers, pulleys, and cams.

Probably the most extreme example is Utility Fog. All of the mechanical properties of a Utility Fog “object” are software-defined.

In the coming world, understanding how to write reliable software will be crucial.