The Physics of Software

Posted 5 months ago | Originally written on 28 Nov 2023

This is a work in progress. It will undergo continual revision.

There is a fundamental flaw in how we conceive software, which has drastic effects on how we work with it. As its name suggests, the name 'software' implies that software is intangible. This is not correct.

I would like to correct this notion by proving that, like any other entity in the real world, software is physical and what the consequences of this are. I am persuaded that this can facilitate the development of a more scientific approach in the production of software.

Current thinking on software

In my research for this article, I found it surprisingly difficult to get definitions of 'software' from renowned organisations. It seems to me that those with the reputation to craft high quality software have no trouble with the concept. Sadly, this does nothing for the millions who could benefit from an understanding that correctly blends the essence of software with how it should be produced. The definitions I could find were mainly aimed at entry-level audiences implying that everyone with a working knowledge of software clearly undstands what it is.

In all quotes below I have added emphasis using italics.

ChatGPT4

"Software" refers to a collection of instructions, data, or programs used to operate computers and execute specific tasks. It is essentially the non-tangible component of computers, in contrast to hardware, which is the physical aspect of computers and computer networks. Software can be categorized broadly into several types:

1. Application Software: These are programs designed for end-users to perform specific tasks like word processing, web browsing, or playing games. Examples include Microsoft Word, Adobe Photoshop, and web browsers like Google Chrome.

2. System Software: This includes the operating system and all the utilities that enable the computer to function. System software acts as a bridge between hardware and user applications. Examples include Microsoft Windows, macOS, Linux, and device drivers.

3. Middleware: This software acts as a bridge between application software and system software or between two different kinds of application software. For example, it might be used to connect a database system with a web server.

4. Programming Software: These tools help developers write programs by providing program editing and testing functions. Examples include compilers, interpreters, and text editors used for coding.

5. Firmware: This is a specialized type of software that is closely linked to the hardware on which it runs. Firmware is typically stored in read-only memory (ROM) and is used to control low-level functions of hardware devices.

Software is characterized by its ability to be programmed, updated, or configured. Unlike hardware, it doesn't have a physical form, but it is essential for the operation of all computer systems and electronic devices that require programming.

Wikipedia

Software is a set of computer programs and associated documentation and data. This is in contrast to hardware, from which the system is built and which actually performs the work.

Investopedia

While software is not physical or tangible in the traditional sense, accounting rules allow businesses to capitalize software as if it were a tangible asset.

Techtarget

"Software is a set of instructions, data or programs used to operate computers and execute specific tasks. It is the opposite of hardware, which describes the physical aspects of a computer. Software is a generic term used to refer to applications, scripts and programs that run on a device. It can be thought of as the variable part of a computer, while hardware is the invariable part."

Britannica

software, instructions that tell a computer what to do. Software comprises the entire set of programs, procedures, and routines associated with the operation of a computer system. The term was coined to differentiate these instructions from hardwarei.e., the physical components of a computer system.

Dictionary.com

anything that is not hardware but is used with hardware, especially audiovisual materials, as film, tapes, records, etc.:

Byjus

A computer system is divided into two categories: Hardware and Software. Hardware refers to the physical and visible components of the system such as a monitor, CPU, keyboard and mouse. Software, on the other hand, refers to a set of instructions which enable the hardware to perform a specific set of tasks. The software must be installed in the hardware to function properly and similarly, the hardware must be present for the tasks to be performed. Both are interdependent, yet they are also different from each other.

Argument

Physical existence implies physicality

Anything that is stored and/or processed on physical devices is physical. I doubt there is any room for debate on this point.

Software is stored and/or processed on physical devices

It is very important to distinguish between the actual physical form of information (e.g ink on a page, bits in a computer etc.) and the information that the physical form contains. The information is not physical but the realisation is. I believe this is the heart of the the confusion: for information to exist in the physical world, it must be physicalised but mere physicalisation is not information. Physicalisation and information are distinct and independent entities and come together whenever communication happens; the physical ingredients may exists apart from their use in communication just as you can have a swirl of ideas internally that never find expression.

It is this physicalisation which expends energy: writing down your thoughts uses up energy in the physical world because you must pick the pen, flip the page and write. Similarly, multiplying two numbers on a computer requires that the two numbers are physicalised in memory using some numerical encoding, transported to registers then traverse the CPU to produce the result, all of which expend energy albeit very little. The wonderful thing about the technology used in modern computers is that the both the physicalisation and the physical effect are miniscule.

It is important to be aware that the physical form that software takes will vary from medium to medium. For example, when the sequence of bits constituting a given piece of software are in memory they will take the form of transistor states but take a completely different form as surface pits in an optical disk (DVD, CD, Bluray). Similarly, the same bit sequence in transit through a computer network may take the form of laser pulses in an optical cable, modulated electromagnetic waves in a 5G signal and magnetic dipole orientations on a hard disk drive. Regardless of which physicalisation is used, it is required that the bit sequence retain its integrity so that when clocked through computer engine (CPU), the same effects will be failthfully reproduced.

Conclusion: Software is physical

I believe the argument presented in the previous two sections warrants the conclusion that software is indeed physical. Thinking of software in exactly the same terms as we think of commodities (gold, cotton, This means that it is subject to the exact same physical laws such as having mass, energy etc. and that these should be accounted for.

Unfortunately, the ubiquity and power of modern computers hide away the complexity involved in storing, transform and transporting bit sequences to such a great extent that the fallacy that software is not physical has been perpetuated.

Consequences

Computers are engines (not brains)

  • I have previously written about this. I think it is better to compare computes to engines (in vehicles) than brains.

Software engineering is a physical discipline

  • Software engineering is the process of producing bit sequences, which when run through a compute engine (CPU), produce the set of desired information transformations. As a physical discipline it grapples with issues of space and time: space in the form of volume and structures and time in the form of how long it takes various algorithms to run.
  • The physicality of software thus implies that that new bit sequences that will be added onto any available bit sequence will encounter physical effects as with any other physical entity. For example, when building a bridge over an existing bridge, care must be taken not to upset the existing bridge especially if it is still in use. If future construction efforts will be an extension of the current bridge then it must take into account preserving whatever value currently exists. In the same way, any new software (think, bit sequence) should be aware of any existing bit sequence.
  • Just as with other forms of physical engineering, it is often advantageous to only proceed when critical due diligence has been carried out to ensure that there will be few surprises spring up in the course of actual construction. This flies in the face of popular software disciplines such as Agile that advocate for a rapid development process while keeping wide open the door for future changes even late in development.
  • In a future article I plan to highlight how the great ease with which is is possible to produce such bit sequences with incredible speed and precision may be at fault in making the task of writing high quality software much harder than it should be.

Program code is not software

  • The code that is used to produce the software that is run on the machine is a human-oriented representation only. No computer run the literal code that is produced by the humans but must undergo a transformation process (again, by other software) in order to render it into a useful form. Therefore, defining software by the number of lines of code for instance are essentially meaningless.

Data is physical

  • Software is special type of data bearing operational powers contingent upon some compute engine (CPU).
  • Inductively, it follows that data is physical.