The PDC 2010 got over last weekend and there seems to be some interesting stuff that has come out of Redmond. While most of the big changes are on the Cloud side, the roadmap on the web and mobile platform is much clearer now with some important changes in strategy.
Ok, I’m gonna stick my neck out on this – IMHO, post PDC 2010, Microsoft has the most comprehensive offering among all the Cloud vendors when it comes to Windows. They are doing what everyone else is doing, and more. Besides, they are making it far simpler to move existing apps to the cloud and integrating your on-premise apps + infra with the cloud. The big problem is that they are only doing this for Windows, and there is nothing on the Linux side. So if you are a pure Microsoft shop, choosing Azure for the Cloud is a no-brainer. However, if you have a mixed environment, you would need to host your Linux workloads somewhere else, which may / may not work for you.
VM Role: Azure now offers a hypervisor in the sky to host your Windows VMs. This is interesting since with the VM Role, Azure now provides both models – a auto-scalable, compute service exposed thru CLR and Win32, that competes with Google App Engine’s Python / JVM fabric, as well as the your-own-box-in-the-sky VPS model that competes with Amazon EC2, Rackspace and others. Jargon hungry analysts call the former PaaS (Platform as a Service) and the latter IaaS (Infrastructure as a Service). Both are useful – the former model works where you need agility of deployment, infinite scalability, and where your app and deployment architecture can be accommodated on top of the primitives provided by the service. The latter is useful if you need more flexibility in your architecture, or if you want to do a quick migration of an existing app without modifying stuff. The VM role would initially be available thru a invite-only beta program starting next year.
Enhancements to Windows Azure: While the VM role certainly creates more flexibility, the PaaS version has become more flexible too:
- Full IIS and Elevated Privilege: So far an Azure deployment could have a web-role, a worker-role or both, with the web-role mapping to a IIS website. What changes is that the web-role would now start mapping to an IIS instance, allowing you to run multiple websites under a single web-role, not to mention the ability to install IIS modules (or configure the APS.net pipeline). Also, the web and worker roles in Azure can now run in an elevated privilege mode. This would again help people migrate their existing apps.
- Azure Connect: A virtual network that enables direct IP-based connectivity of app instances to and from on-premise infra. Basically sets up a IpSec based tunnel. Very helpful for sysads and devs who need to bring cloud instances under the org AD, or where cloud apps need to access on-premise data.
- Remote Desktop: Right now the way to manage your Azure deployment is to use the Powershell Cmdlets for Azure. Most people like them since they are bandwidth friendly and scriptable. But now there is help for the command-line challenged. You can now “see” your application host over remote desktop. Not sure if this exposes any new functionality beyond what was already available thru the Management API.
- Better Java Support: I am not sure if people are aware of this, but it has been possible to run Java apps on Azure since around an year, including the ability to run Tomcat (thru the Tomcat Acclerator), ability to access Windows Azure services thru the open source Azure SDK for Java and a JDBC driver for SQL Azure. What’s new is an Eclipse plugin and App Fabric SDK to access App-Fabric (see below) from Java.
- Better PHP Support: Similar to Java, it is possible to run PHP apps on Azure. And similarly, there is a Windows Azure SDK, an Eclipse plugin and a PHP driver to talk to SQL Azure. Some extras: command-line tools for PHP and a Windows Azure Companion to make it easy to deploy, diagnose and monitor PHP applications.
Improved App Fabric: The App Fabric is one of the strongest differentiators in the Azure stack. This is some very sophisticated middleware that I think is unique among all the Cloud vendors today:
- Access Control: Identity integration with AD, Live Id, Facebook, Google and Yahoo. Authorization thru declarative rules that transform incoming security claims into claims understood by app. REST API.
- Service bus: Allows message exchange across firewalls, NAT gateways, etc. with the same programming model as for WCF or using REST, Pub-Sub system with multiple topics, Full-duplex bi-directional communication, including P2P with NAT traversal. It is now possible to do durable messaging, which increases delivery assurance to mobile devices / 3rd parties. If you have ever tried to do cross network messaging, you know how difficult firewall traversal and NAT traversal can get, and how troublesome DoS attacks can get. The Service Bus addresses all these issues and more.
- Integration: BizTalk in the sky – pipelines, transforms, adaptors, BAM, Rules, self-service trading partner community portal and provisioning of B2B pipelines. What, you do not know about BizTalk? Well, think of it as a higher degree of abstraction for the messaging layer, and a lot of pre-built patterns and functionality. If you are running multiple apps in your IT, sooner or later you need something like this. App Fabric Integration brings it to the sky so that you can integrate your on-premise apps and cloud apps using the same model. Not available yet though – the invite only CTP starts in 2011.
- Caching: Memcached like distributed in-memory cache, available on the local network. No limits on object size, pre-built ASP.net providers for session state and page output caching (so no app code changes required). Additionally, this can be secured thru Access Control (mentioned above). However, there is no HA yet. Available thru a invite-only CTP.
- Composite Apps: So you have got your app all nicely written with access control defined, endpoints exposed using Service Bus, message transformation, etc. being handled by the Integration service and frequently used data cached. Is this enough? What about lifetime management? Scale out/scale-in? Deployment automation? Monitoring? Mission critical systems need all this and more. This is where the Composite Apps service comes in. This essentially provides a multi-tenant runtime and tools for handling all of the above thru a declarative model. Again, CTP would be available in 2011
Improved CDN: So far Azure CDN was only able to pull content from Azure Storage. Now it can also cache data returned from the app (dynamic caching). Also the CDN is available over SSL/TLS. Besides, they have put up POPs in Middle East and improved the pipe.
Improved SQL Azure: SQL Azure would start providing Reporting Services (thru an invite-only CTP to begin with), a Web-based management console (called Database Manager) and ability to Sync entire databases or specific tables between on-premises SQL Server and SQL Azure, or between SQL Azure datacenters. The data to be synced is declarative defined, and the sync can be scheduled, with conflict handling and logging + monitoring support.
Azure Marketplace: The Azure Marketplace “is an online marketplace for developers to share, find, buy and sell building block components, training, service templates, premium data sets plus finished services and applications needed to build Windows Azure platform applications.” The data part (which I think is more interesting) is already available at the Data Market. This includes both public domain data-sets as well as commercial data-sets on a wide variety of topics – “everything from demographics, navigation, crime, media, to web services and algorithms for data cleansing.” Cool stuff!
Web and Mobile
One good thing that happened at the PDC was that Microsoft came clean on its UI platform strategy, and the strategy is a pretty simple, logical one:
- Web Apps thru HTML 5
- Native apps on Desktop thru WPF
- Native apps on Mobile thru Silverlight
There is a lot of noise in the media about how Microsoft has dumped Silverlight and is repositioning it for the mobile, etc. There are three aspects to this discussion:
Why focus on HTML 5 for the Web
This is a no-brainer:
- HTML 5 already provides most capabilities that required plugins like Flash / SL not so long back, so SL is not adding a ton of value over HTML 5 anymore.
- HTML 5 enjoys tremendous momentum with web-devs
- Firefox and Webkit have better support for HTML 5 than IE, and hence more web-dev mind-share
- IE is losing ground to Chrome, Firefox and Safari
The choice for Microsoft is obvious – embrace HTML 5 completely and take a leadership role. And now with this commitment coming right from the top, with SteveB himself vaxing eloquent about HTML 5, you can bet that the IE team will produce the goods. This may not happen in the IE 9 timeframe though, but then this is a long-term play.
What about SL on the Web
There are lot of people who think that SL is about to disappear from the web, but that is incorrect. There are lots of things that are still very hard to do in HTML 5, for which developers will continue to rely on plugins like Flash and Silverlight. However, there is no doubt that SL will move into a niche role, being utilized more to fill HTML 5 gaps, at least when it comes to the consumer web. On the enterprise side, SL may enjoy a more mainstream role since x-platform, x-browser and plugin deployment issues are more controllable there, and development on SL is any day simpler than on HTML 5, especially if you have a background in imperative languages.
Why SL for Mobile
The vision for CoreCLR – the version of CLR that powers Silverlight – has always been to provide the .Net experience on all low footprint environments. If my memory serves me right, a lot of SL core came from .Net Compact Framework which was the version of .Net shipped on Windows Mobile back in 2002-2003. And since SL 2, a team in Hyderabad has been working on making SL available on the mobile. So SL on Mobile is nothing new. It also makes sense as the mainstream platform for the Mobile, since SL is a proper subset of WPF and therefore you can share a lot of code between desktop and mobile. So why not WPF itself? I’m not very sure, but certainly the lighter footprint of SL as compared to WPF is more suitable for mobile. Also, this would allow Microsoft to optimize SL for the mobile, focussing on issues like reducing power consumption and CPU utilization. Last, but not the least, the developer momentum behind Silverlight is certainly bigger than that behind WPF, and therefore this allows Microsoft to accelerate the app development on Windows Mobile.
IE 9 HTML 5 Support
Things are looking better than ever on the HTML 5 support front. The first Official HTML5 Test Suite Conformance Results from W3C show that IE 9 is passing most tests, however the coverage of the test itself seems fairly small – only a few features are being tested. More illuminating are the following comparisons on wikipedia:
After going thru these comparisons, my take is that all browsers are at varying degrees of HTML 5 support and IE 9 is not too far behind. How quickly the various browsers start supporting the major features would be a function of resources deployed and how quickly the release cycles go.
What should also be obvious from the above comparisons is that it is utterly foolish to do browser detection since the feature set of each browser is going to change very rapidly over the next couple of years. What we should do instead is feature detection and fail gracefully. This is of course done by all the major JS libraries already, the risk is in your own custom code. If you are doing browser detection, you should get rid of it right now to keep it forward compatible.
Windows Phone 7
The development model for Windows Phone is clear enough – Silverlight for apps and XNA for games. Both make sense and provide a ton of power. What Microsoft has done is to provide a bunch of templates, tooling and APIs to make it simpler to do Windows Phone apps. Moreover, this can be done using VS Express, so there is no cost! However, for developing apps, you need to get familiar with the UI, its nothing like iOS or Android. If you do not have a Windows Phone, the simplest way is to run the emulator that ships with VS Express and figure your way around. Finally there is also the Windows Phone Marketplace – same concept as the App-Store, including an approval process and $ 100 fees for submitting an app. But none of this is really new – all of this has been in place for a while.
While we are on this topic, I do want to mention that I am surprised that Microsoft is taking the Apple approach to the marketplace. The real value of a marketplace is in providing consumers and developers a single point for app publication, discovery and access. The approval process and the submission fee are not good for anyone in the long run, including the platform vendor. Especially for Microsoft, who need to steal share from iOS and Android, I think a more open marketplace would have helped:
- Reduced costs for the developer, and therefore for the end consumer
- Less process overhead for the developer
- Freedom of expression – this counts for a lot in spirit, if not in fact
- Mature content can be marked as such by reviewers or community, same as what happens on sites like YouTube / Facebook
- There is the problem of crapware, but then a rating / popularity / recommendation system would easily address that
- There would be some upfront loss of revenue, but I think right now the real problem is increasing adoption for which you need to drive up the platform value by having more content + functionality available on it.
A marketplace that requires content approval and a submission fees discourages the developer from building native apps and instead focus on building mobile apps. No platform vendor likes that, since that reduces the tie-in to the platform. Microsoft understands this well enough and despite that we have an Apple like marketplace. Very baffling.
Languages and Tools
The focus of the next version of C# and VB would be asynchronous programming. There are two motivations for this:
- UI responsiveness: As apps get more and more connected, the data often comes over a network call, which must not block the UI thread
- Scalability: Use the thread for doing some useful work and not keep it blocked
Now at this stage, there is a chance that one would confuse asynchrony with parallelism. That is not the case – asynchrony is about yielding control while results are awaited, whereas concurrency is about doing two things in parallel. The former is necessarily cooperative, while the latter maybe achieved thru multiple hardware threads or pre-emptive / co-operative scheduling of multiple threds.
Just to be sure, .Net Framework has provided async support since version 1 via the begin-end pattern. So to appreciate the value of the async support being provided requires us to go a little deeper in terms of semantics, what happens behind the scenes and why the feature has been designed the way it is. These are all involved topics, and I would try and cover async support in a different post. Meanwhile, you can find more details on http://msdn.com/vstudio/async.