I still remember 3/28/2012, the day Scott Hanselman announced on stage that he just open sourced ASP.NET. It was the culmination of a lot of work by many people including myself. I was reading a blog post by Marc Gravell on Open Source and money and immediately thought back to that day.
I was tasked with releasing the products and processes needed to Open Source a Microsoft product. I was given very specific instructions. ScottGu wanted to
- Be able to say Microsoft.
- Protect Microsoft customers.
- Not release any patents without permission specifically do not lose Microsoft money because a royalty patent was given away.
- Not force Microsoft or customers to release source code.
- Be real and transparent.
Why did Microsoft do this? It is complex but simple at the same time. ScottGu needed to have Azure make money. He could focus on Microsoft's existing customer base. Or figure out how to bring in customers who had never used a Microsoft product. This last part is why the path of Open Source was taken. Open Source would bring in developers. More importantly, it would bring in leading edge developers who were moving to the cloud. Most of Microsoft's customer base were organizations who were not known for being early adopters. Azure required early adopters.
The target developers wanted Open Source for a variety of reasons. Some for very pragmatic reasons like patching bugs while others were more philosophical about Open Source. And here is something I learned and I'm sure a lot of my readers have learned. Developers do not pay for tools without good reason. Developers tend to either write their own frameworks, adapt one, and sometimes buy a tool, framework, or component. Case in point I am using Refit for writing my REST API Clients. I could write my own, and I have. The only way I would spend money would be for a REST API Client that incorporated caching and automatic replay of calls for a fire and forget REST API environment.
Developers and the IT industry, in general, have no problem paying for services like hosting. Thus giving away tools for using Azure was a smart move. Developers if they liked what they say would use the tooling. Tooling which naturally leads to the adoption of Azure. Back in 2012, it was a risky bet. Today it looks like a brilliant move by ScottGu.
It was more than just releasing the code as Open Source that made the plan work. Look back at the list. Being able to say Microsoft ASP.NET MVC and Web API gave branding coverage. What is this protect customers? Protect them from what? Open Source! The wrong license could negatively impact customers. Also, not all Open Source is high quality.
One of the things the release process required was a pedigree scan of the code. This scan did several things. First scanned for patent usage. Did the code leak a patent or use a patent requiring paying a royalty? This was important as Microsoft made a lot of money from patents back in 2012. Avoiding using patents as patent litigation can be costly even if you win. Microsoft indemnifies its customers for patent infringement by Microsoft products. You can imagine how costly that could become for Microsoft protecting its customers.
The scan does not stop with patents. It detects usage of Open Source. Not to avoid using Open Source. It is about disclosing the usage and ensuring compliance. If ASP.NET, for example, was using an Open Source framework that was GPL not only ASP.NET but also all users would need to Open Source. I am not saying GPL is bad. I am saying Microsoft wanted to ensure compliance. I had to ask the ASP.NET to ship an older version of jQuery due to a compliance concern regarding a component jQuery used that was GPL. Microsoft was working with jQuery to figure out what would happen. Again Microsoft wanted to protect its customers. If customers wanted to use a GPL Open Source product they can. However, Microsoft would not force usage of a 3rd party Open Source.
Finally, the Open Source of a product by Microsoft could not and would not be a publicity stunt. I added a rule no dead product could be Open Source. Open Source would not be a dumping ground for trash software from Microsoft. Another principal was every team involved while in the beginning would do most of the work. Pull requests must be allowed and reviewed. If it met the criteria, it should be accepted. Microsoft would always be the stewards of the Microsoft Open Source project. The key word is steward. Ultimately it is up to the community to drive the project. Microsoft is a developer, mentor, leader, and guide, not a dictator. I believe that has lead to a robust community around Microsoft Open Source projects.
While charging for Open Source is one way to make money. It is not the only way. In the case of .NET, and Azure, Open Source is a channel for selling products and services. Thus Microsoft Open Source has been beneficial for customers, developers, and Microsoft.