During a recent cloud industry conference, Satya Nadella, president of Microsoft Corp.'s Server and Tools Business, referenced the perception that non-Microsoft technologies, while supported on Windows Azure, are considered "second-class citizens." This perception isn't surprising when you consider how far Microsoft has strayed from its original vision for Windows Azure PaaS. Microsoft intended that Windows Azure's two roles -- Web and worker -- would only be the beginning; there would be others.
The core of the Windows Azure PaaS includes the Web and worker compute roles. Though in a very general way, these are not dissimilar to the Amazon Web Services Elastic Compute Cloud Amazon Machine Images and instances, the difference lies in the level of abstraction.
The ability to migrate existing applications to the cloud, which has been hyped as its cost-savings benefit, has challenged PaaS from the beginning.
In Windows Azure, the OS and other parts of the stack are abstracted out of the way. The Windows Azure compute roles just happen to contain Windows Server; the Web role happens to be based on Internet Information Server. And they all happen to come out of the box with .NET in place. None of these characteristics is fundamental. The big question is whether there is value in focusing on virtual machines and the details of their contents or whether software development has reached a level in which the minutiae of OSes and application stacks are no longer critical.
The use of Windows Server presented an underlying platform that could support almost any development paradigm. The list of potential roles was almost endless -- Java, Tomcat, JBoss, PHP, Python, Ruby on Rails, etc. But the core principle of abstracting the underlying OS and stack into the platform is the key.
For enterprise IT, Microsoft's primary constituency, Java was the next logical step. There has been a half-step in this direction with the Windows Azure Plugin for Eclipse with Java, but that leverages the existing worker role and puts the onus of managing the Java stack on the developer. While this can be hidden behind marketing language about "flexibility," the approach detracts from the fundamental Windows Azure vision of abstracting those details in the platform.
It is in this compromise where the perception of second-class citizen status originates. And the compromise has its origins in the poor understanding of the Platform as a Service (PaaS) value proposition. While there are strategies in place to bring its customers to pure Platform as a Service, there is risk in Microsoft relying on its customers to "grok" PaaS by using Infrastructure Service as the entre.
Operating systems and application stacks only exist to provide a platform for developers on which to build their applications. The ability to migrate existing applications to the cloud, which has been hyped as its cost-savings benefit, has challenged PaaS from the beginning.
The platform takes on the responsibility for maintaining the OS and stack, while the developer relinquishes some fine-grained control. In turn, the developer is freed from the responsibility of maintaining those elements. However, that exchange virtually guarantees that an existing workload cannot just drop into the cloud. It also means a developer starting a project needs to understand how the environment differs from a traditional environment. This is even true with .NET in Windows Azure.
Microsoft went astray by not fully committing to the development lifecycle that would require language-specific functionality built into roles and robust tooling. Ironically, its Visual Studio environment is so compelling that other tooling environments tend to appear second-class without additional work. The current demos try to make the case that it is easy to deploy non-.NET applications to Windows Azure, but they mainly serve to highlight that the environment neither conforms to the existing paradigm nor to the low-touch PaaS paradigm. In other words, it's second-class.
There is a community of developers who still believe Microsoft's original vision for Windows Azure represents a better way of building and deploying applications. This same community has also noticed that PaaS has become a much smaller piece of the conversation -- as have investments in the foundation of what makes Windows Azure so compelling.
To solve the second-class citizen dilemma, Microsoft must recommit to non-.NET development technologies. This should start with a complete Java runtime environment that is managed as part of the platform. If they want to go really big, Microsoft should build a set of Linux-based roles -- not because the OS matters, but because the specific technology that a particular development community cares about runs best in that environment. Finally, the core value proposition to the consumer of those roles must be a seamless experience, with no responsibility for the underlying platform.
About the author
Mark Eisenberg has been doing mobile app development since 2005. He joined the nascent Windows Azure sales team at Microsoft despite being an early cloud skeptic. Now, after embracing the cloud and its technological potential, he combines cloud and mobile expertise with his technological background to help clients realize real value from their technology investments. Mark is also a seasoned business development professional with more than 20 years of experience. He started his career in software development and has since maintained his technology edge, most recently adding cross-platform mobile development skills. His sales career began when he joined Intel's channel and has included positions at other communications-focused firms prior to Microsoft.