As software professionals, we may still use the same programming languages and tools as 10 years ago. But there has been a fundamental shift in how we think of software, and make and consume software.
Lost VMs or Containers? Too Many Consoles? Too Slow GUI? Time to learn how to "Google" and manage your VMware and clouds in a fast and secure HTML5 App.
Traditionally software really means blueprints, which are used to construct running software instances. The blueprints include binary code, installer, and related documentations guiding the installation and configuration of the software. Software vendors make the software packages and sell them to customers who then deploy and run them.
These blueprints are static once they are released, and do not specify exactly the operational aspects of the running software instances. These are left to the customers.
When clouds come in, more customers consume software online without worrying about the operational aspect of the software. To these customers, the software really means services: either application as a service, platform as a service, or infrastructure as a service.
As Salesforce CEO Marc Benioff commented,
“If you’re talking about more hardware or if you’re talking about more software, it’s not about the cloud. And the cloud is really this next generation of computing and that’s new software and that’s new services.” (BTW, Marc also commented the approaches of VMware and Saleforces.com on cloud computing. Feel free to check out the article.)
As a key benefit, customers don’t need to buy IT infrastructure up front, but to subscribe to the needed services online. That means zero capital investment, and zero time and effort in building infrastructure. It appeals well to the startup companies which have limited funding and want to focus on their own products/services.
Although more software is offered as services today, the fundamentals of software development lifecycle haven’t changed much. Even at Salesforce.com, I believe there are more engineers developing/testing the software than running it as services.
What has changed is who deploy and operate the software. The cloud model has shifted deployment and operation from customers to either vendors or service providers. By centralizing them, an economy of scale may be achieved, and leads to reduced operation costs.
Technically, the software upgrade cycle can be much shorter than software product because the vendors and service providers have better control over the running environment.
In the product cases, I rarely find any customers who want more than one upgrade a year due to hassle of upgrading/migrating/ testing/training. That is why product companies normally have one major release per year.
For customers, there is no capital cost to build infrastructure and buy software license. At the same time, the flexibilities and controls may be reduced. These are two sides of the cloud story.
In the cloud model, the traditional software stack remains the same. But a new stack has emerged to manage the running infrastructure and applications in the cloud, depending on what level of cloud services (IaaS, PaaS) you are using. Examples could be Amazon EC2 Web Services (IaaS), VMware CloudFoundry (PaaS). If you take VMware vSphere as platform for private cloud, then vSphere APIs fits into this stack as well.
The management stack is independent of the software stack. Built on top of the management stacks are Web based management tools, various plug-ins to IDE or test/build tools to make the user and developer experience more friendly.
With the rising of cloud computing, the traditional software has extended beyond packaged products to running instances for various services. Both delivery models have pros and cons in different contexts. For majority of the software, they will coexist for long period of time if not forever.