The History and Trend of Digital Computing Platforms -- Part II : From Utility Computing to the Cloud
The history of utilizing computing resources as service goes back to the 60's, the mainframes era, where there was almost no real multi-platform Operating System (OS). Back then, one way to look at the computer was to see it as a very special purpose device for only a handful of experts and not suitable for the public. Another, non popular way to look at them was to see them as a computing resource useful for households:
"If computers of the kind I have advocated become the computers of the future, then computing may someday be organized as a public utility just as the telephone system is a public utility... The computer utility could become the basis of a new and important industry." —?John McCarthy
There was even an attempt at MIT along with GE and Bell Labs to build a time-sharing OS with features intended to support computing utility, Multics.
However, the technology back then was not ready for this level of abstraction. Codes and user environments were close to metal, which made it hard to perform any task remotely without getting involve in very low level and non-portable details.
In the early 70's, the UNIX resurrected from the Multics' ashes. It was designed as portable multi-user OS with the ability to provide remote connections via terminals. UNIX made computing platforms more affordable and helped the expansion of servers and workstations quickly. Yet, users still had to deal with low-level interfaces (i.e. command line interfaces) and the majority of codes directly tangled to the kernel. More abstraction layers were needed in order to make a platform flexible enough to be employed as utility.
Starting in the 80's, graphical user interfaces (GUI) initiated to become a norm on many new operating systems such as Windows and Mac. At the beginning, GUI was mostly a front layer for CUI, thus GUI equipped systems added another layer between clients and servers to make the interaction between users and machines more abstract. With the help of object-oriented languages and GUI, it became easier for developers and clients to add more abstraction layers on applications and interact with systems remotely. In addition, the Internet made the interacting with remote systems feasible (via GUI), thus those systems started to become much more common.
By the introduction of virtualization on personal systems in the late 90's by companies such as VMWare, one more layer of abstraction could be added between clients and systems to increase the flexibility of computing platforms. With the usage of graphical user interfaces, employing virtual machines on small systems became easier. Virtualization and containerization concepts were actually introduced in Mainframes era. However, the introduction of them on desktops and small workstations, with the use of WWW, could let companies to exploit this extra layer of abstraction to detach clients from machines one step further, thus adding more flexibility to their systems. Since then, the virtualization concept grew into a successful concept that even processors have started to support it directly. Furthermore, virtualization was applied to other areas such as programming languages run-time (as well as newer generation of operating systems such as Android) to make them less dependent to the underlying layers.
During the mid 2000's, with the maturity of the Internet and mobile networks, companies have started to build true cloud platforms. For the first time, services such as Amazon AWS can provide the entire computing platform based on vitualized server farms. Almost without any restrictions, users can request for computing resources including applications, platforms, and infrastructures as a service.
Nowadays, due to the increase of networks' bandwidth (~Gbps) and decrease of latency (~ms), clients can have access to resources on the cloud from their mobile apps and browsers. In fact, browsers and mobile apps can truly hide all the complexity of accessing the remote services which is safe to claim that we have finally achieved true computer utility services.