Lie 3: Software Is the Platform
Truth: hardware is the platform
“Software does not run in a magic fairy aether powered by the fevered dreams of CS PhDs” – Mike Acton (2014 - CppCon)
Instruction sets: Different hardware architectures have different instruction sets, which are the set of basic operations that the processor is capable of performing. For example, an x86 processor has a different instruction set than an ARM processor, so code that is written to run on an x86 processor may not be compatible with an ARM processor without modification.
Memory architecture: Different hardware architectures have different memory architectures, which can affect the way that data is stored and accessed by the processor. For example, some architectures have a flat memory model, where all memory is treated as a single block, while others have a segmented memory model, where memory is divided into segments that have different properties.
Endianness: Different hardware architectures can have different endianness, which is the order in which bytes are stored in memory. This can affect the way that data is stored and accessed, and can require special handling when working with multi-byte data types.
Performance characteristics: Different hardware architectures can have different performance characteristics, such as different clock speeds, cache sizes, and number of cores. This can affect the way that code is optimized, as certain optimization techniques may be more effective on certain hardware architectures.
Overall, it is important to consider the specific hardware platform when developing software, as this can help to ensure that the software is reliable and performs well on that platform.