The distributed system contains many different kinds of hardware and software working together in cooperative fashion to solve problems.
There may be many different representations of data in the system. This might include different representations for integers, byte streams, floating point numbers, and character sets. Most of the data can be marshaled from one system to another without losing significance. Attempts to provide a universal canonical form of information is lagging.
There may be many different instructions sets. An application compiled for one instruction set can not be easily run on a computer with another instruction set unless an instruction set interpreter is provided. There is no universal binary making process migration difficult. Recent developments in the web and Java may provided a universal interpreted language on most computers. Though a computer language is not an instruction set, this is a good compromise.
Some components in the distributed system may have different capabilities than other components. Among these might include faster clock cycles, larger memory capacity, bigger disk farms, printers and other peripherals, and different services. Seldom are any two computers exactly alike.