The cloud: everybody's talking about it, but what is it really, and what does it have to do with software licensing?
When people refer to the cloud, they might be referring to any number of related concepts in computing, but essentially, the cloud is a set of remotely hosted computing resources used by a client, whether a web page, mobile app, or traditional desktop application, for storage and computing power.
The line between cloud computing and the traditional client/server computing model can be a little fuzzy, but in general, cloud computing is often differentiated by scale, and by the design principle that computing resources in the cloud are generally more flexible and multi-purpose than in traditional server computing, able to be used for whatever need is most in demand.
What are some examples of the cloud?
Nearly every website that you visit these days has a cloud component, whether or not that's immediately apparent.
For average users, the "cloud" is the presentation of the end services. It could be a social media platform, an e-commerce store, a music streaming service, an airline ticketing site, a file storage service, or something totally different.
The important thing to keep in mind is that the website user interface which you use directly is only a small part of what is going on behind the scenes in any web application. For most tools you use on the Internet, there are many different components that make up the application, from databases to logging tools to data mining and intelligence tools, and anywhere from a few to thousands of pieces of business logic all working together to run the web service.
Each of these pieces lives on a computer somewhere, and more often than not, the place where these components live is the cloud.
How does the cloud "work"?
In order to host all of these applications and the data which they serve, data centers are constructed to house many general purpose server computers, with appropriate amounts of computing power and storage to be shared across many applications.
In many cases, applications are bundled with the operating system and all of the necessary libraries to run the applications into "virtual machines" which can be run on top of the physical machine, independent of the operating system on the host machine itself. This technique, called virtualization, makes applications much more portable, allowing them to run in any environment which can run a virtual machine.
When an application is designed to expand and contract according to demand, utilizing more virtual machines when demand is higher and fewer when demand is lower is called elastic computing, or simply, the elastic cloud. Storage can be pooled together similarly, allowing applications to use hard drives attached to many different physical machines as if it were a single resource, minimizing waste while making it easy to develop applications which require quite large amounts of data.
The data centers which host cloud computing resources can either be public, private, or a combination often referred to as a hybrid cloud. Public cloud computing resources can be leased from a variety of companies, or for higher levels of security, compliance purposes, or perhaps cost savings, an organization may instead decide to build its own cloud hosted in its own data center, or perhaps their own dedicated segment of another data center. Hybrid clouds are able to make use of the resources of both public and private clouds as demand and priority change.
What is an open source cloud?
One of the amazing things about the development of tools and technologies for the cloud in recent years is just how many of them have been completely open source. In fact, open source licenses are becoming almost a de facto standard for how new cloud technologies are being developed. Take these examples:
OpenStack is an open source project for creating and managing cloud infrastructure, including storage, compute power, and networking, as well as many related projects to help handle everything from identity management to database deployment.
Linux containers are emerging as a way to develop applications more natively for the cloud, relying upon functionality built in to the Linux kernel as a faster alternative to virtual machines, with projects like Docker helping developers to get started with building containers, and Kubernetes for orchestrating applications made up of many containerized parts.
And many more, from the traditional Linux / Apache / MySQL / PHP web server stack to everything from cloud storage applications to collaborative online editors.