The Library Makes the Platform
Hardware-Specific BinariesUntil 1995, the hardware instruction set was the key defining characteristic of a "platform". Developers created applications for specific hardware. The output of the software development effort was a binary application whose logic was comprised of machine language code for a particular processor family.
This was true even though Microsoft and other vendors tried to push their "platforms". Microsoft, for a time, shipped versions of Windows for multiple hardware platforms. You could by Windows NT to run on the DEC Alpha hardware. Good luck finding off-the-shelf sotware that wan on the Alpha version of NT, though.
Platform-Independent BinariesIn 1995 Sun released Java. While it's concepts of bytecode and bytecode interpreters weren't new, they were architected and marketed well. Java bytecode is usually produced by a compiling a Java program, although copmilers have been written to transform other languages into Java bytecode as well. The Java bytecode instructions are executed by Java Virtual Machines. The JVM must be custom-written for each hardware platform, since mapping from Java bytecodes to hardware-specific instructions varies with each different hardware architecture.
Java popularized this technique to the point where Microsoft felt threatened. The licensing agreements broke down in several well-publicized court cases. Left without a license for recent versions of Java, Microsoft faithfully reproduced Java, renaming the Java Virtual Machine the Common Language Runtime.
So now the two main software environments both use bytecode and interpreters. Applications written in Java can run anywhere where there is a JVM, and applications written to the CLR can run anywhere the CLR is ported (Windows and Linux/x86 only, for now).
With the majority of applications expected to be targeted to one of these two runtime environments, the importance of hardware platforms will diminish. There are some efforts to allow bytecode from either runtime environment to execute on the other. Will we finally get write once, run anywhere?
The New Platform: The LibraryThe libraries available with Java and the CLR are different and incompatible. Even if the bytecode can be translated and executed, the library calls cannot.
Thus we'll soon see a division of programmer effort along new platform lines. Even though applications can run on different hardware, they'll require certain libraries to be present. The library becomes the new platform.
Copyright © 2020 Andrew Oliver