Virtual Machines as Application Platforms
January 9, 2011
One of my earliest (1977-78) professional programming jobs was writing device drivers for some of the first 8-bit PC’s – this was before the IBM PC which came out in 1981.
When you start out with a “front-panel” machine, there are no disk drives, no monitors, no compilers, and no operating system. You are programming “on the metal” using just the switches on the front panel to place your program into memory bit-by-bit. And the program code is in hexadecimal.
The first (very short) program that I wrote enabled me to store and load the contents of the computer memory to disk. That is, it stored a “memory image” to the disk which allowed me to test larger programs until eventually I got the CP/M operating system to work. After that, everything was much easier because I had editors and assemblers (machine code compilers) to work with.
Early experiments with Smalltalk were just a few years before this (1972-74) and I am sure that the term “Smalltalk image” comes from the fact that the programmers were storing the memory image in the same way that I was doing. Remember that (IIRC) in the first Smalltalk implementations, there was no operating system in the Alto computer – the Smalltalk environment was the operating system and handled both processes and FAT (File Allocation Tables) for disk operations.
Interestingly, at this time there were a few BASIC interpreter available in ROM (Read Only Memory) even when the machines didn’t have an operating system. Two that I remember were Microsoft BASIC on the Ohio Scientific Challenger and Apple BASIC on the Apple II.
Anyway, over the past few decades, operating systems have become increasingly sophisticated and now handle all aspects of the computer hardware including a windowed user interface, processes, communications, and storage.
There has also been a more recent trend for applications to be written in languages that run on bytecode “Virtual Machines” (VM’s) that manage program memory as well by using garbage collection. Objective-C, which was directly inspired by Smalltalk, is compiled but (AFAICT) has had garbage-collected memory since 2007.
In 2011, here is a partial list of commonly used VM’s and VM languages:
— CLR – Microsoft’s Common Language Runtime for .Net
— JRE – Java Runtime Environment
Objective-C (iPhone, iPad)
CLR – Windows – all .Net languages C#,VB.Net, IronPython, etc
Apple – Objective-C, JRE
Linux – Mono, and JRE
Perl, Python, PHP, Ruby, etc
What I want to point out is that in 2011 there is very little (AFAICT) end-user application programming being done in languages which are not using some sort of VM – that is, languages like Assembler, “C”, or “C++”.
I don’t know what the percentages are, but my guess is that today over 90% of application programming (not systems programming) is done using VM-based languages.