Contrary to popular belief, Microsoft loves open-source. No, really! Don’t believe me? Read on:
Today, Microsoft announced that it is open-sourcing all of its flagship web/cloud platform: ASP.NET MVC Web Pages (aka Razor), Web API.
Importantly … these projects will be publicly hosted and that the team will continue development in the open (you’ll be able to view the repository and see the code commits as they happen) and that Microsoft will even consider code submissions, fixes, improvements & features contributed by 3rd parties.
This isn’t the first time Microsoft has released major open-source projects. ASP.NET itself has been open-source for some time, and Microsoft has tested the waters with developing significant projects as open-source projects for a while now.
The difference with today’s announcement is that Microsoft is jumping into the deep-end, open-sourcing significant projects AND committing to developing them in the open in future AND will be open to accepting code submissions from the community!
And, yes, this is MICROSOFT we’re talking about!
So, let’s examine Microsoft’s open-source stance and credentials for a few moments:
It all started …
Rather than repeat what’s already been written, go read this piece by Wired. It’s okay, I’ll wait … Thanks for coming back
So, Bill Hilf forms the Open Source lab at Microsoft and hires Sam Ramji. They hire a cadre of open-source hotshots from around the company and beyond and start working on making Windows a great place to run open-source software.
The result? Microsoft has chilled-out and has become … dare I say it … hip!
Despite some unfortunate stances and comments early-on in the early explosion of moden-day open-source projects, Microsoft has increasingly been helping a variety of open-source platforms and projects take better advantage of Windows as a service hosting infrastructure
At the same time, gradually finding its own feet, gaining confidence and beginning to open-up some of its own product development teams, projects and processes to open-source.
In the last couple of years, Microsoft has:
- Committed code to the Linux kernel (to help Linux run beautifully on Windows’ Hyper-V virtualization infrastructure).
- Collaborated with open-source communities and companies to better support PHP and node.
- Created and released its own open-source projects including IronRuby, IronPython, F#, Orchard CMS, NuGet, IISNode, Hadoop and now its own flagship web platform: ASP.NET, ASP.NET Web Pages (nee Razor) and Web API.
Making Windows a great place to run …
Microsoft has done A LOT of work over the last few years to make Windows better support a variety of traditionally-UNIX open-source projects. Below are a small sampling of the most prominent works:
… PHP & Apache Web Server
In October 2006, Microsoft announced that it was collaborating with Zend to make Windows a great place to run PHP sites.
The key inhibitor to Windows being a great host for environments like PHP at the time was PHP’s dependency on the venerable CGI (Common Gateway Interface) process spawning component.
The result of this collaboration was the FastCGI component for IIS6+ which mimicked CGI to calling applications, but used IIS’ highly optimized process management infrastructure to vastly reduce the overhead normally associated with running CGI-based systems on Windows.
Since the work on FastCGI, Microsoft have also created PHP drivers for SQL Server, added support for PHP to some of its developer tools. Microsoft also helped PHP & Apache Web Server port their code to compile smoothly with Microsoft’s VC9 compiler which resulted in a significant performance and stability improvements compared to versions compiled with the VC6 compiler.
… Ruby & Python
Ruby and Python have become very, VERY popular and for good reason. Their terse, expressive, dynamic syntax lets developers achieve a lot with relatively little code.
Microsoft released IronPython in 2006 and in 2007, Microsoft announced IronRuby. Both of these languages compile their code to .NET IL (as does C# and VB) allowing for good execution performance along with greater integration with the .NET framework and with Windows as a whole.
Although Microsoft dismantled the Iron* language teams in late 2010, they released these projects back into the community and they continue to thrive and flourish.
The IT “big-data” communty erupted with excitement (e.g. Wired, ArsTechnica) when Microsoft announced that it was adopting Hadoop – a distributed compute platform for analyzing large data sets. Hadoop is housed and supported by the Apache Foundation and Microsoft will submit to Apache any additions or changes it makes to Hadoop, and that it is “making a commitment to compatibility” with the open-source project.
So? Microsoft supports another open-source project? I hear you ask. Yes, but importantly, they did so whilst dropping their own internally-developed big-data analysis engine!
… DVCS: GIT, Mercurial
DVCS – Distributed Version Control Systems – utterly revolutionized open-source development projects and are increasingly revolutionizing corporate and enterprise development projects.
GIT – first implemented by Linus Torvalds (who also created the Linux kernel) has achieved DVCS dominance in less than 6 years. Mercurial is a very similar DVCS but is simpler to use and less likely to allow you to blow your own foot off. Both have revolutionized how open-source projects (and, increasingly, enterprise development projects) collaborate on a common code-base.
GIT was originally quite Windows-hostile since it was first built as a UNIX tool that depended on the way UNIX works. That changed with the advent of the MySysGIT project that ported GIT to run more smoothly on Windows.
Mercurial was and is implemented in Python so has few of the incompatibility issues that plagued early releases of GIT.
Just this week, Microsoft announced that it is adding GIT support to CodePlex – Microsoft’s own open-source hosting site in addition to the incumbent Subversion, Mercurial and TFS options.
Yep, you read that right!! In 2009, Microsoft contributed open-source drivers to the Linux Kernel project! These drivers help Linux run faster and more smoothly within Microsoft’s Hyper-V virtualization engine.
Node’s problem was that they were not taking advantage of Windows’ Async IO Completion Ports (IOCP) in order to perform async IO and so earler versions of node could not operate correctly on Windows. By working with Microsoft during the latter half of 2011 to improve node on Windows, Joyent created “libuv” a new platform abstraction library that provides dependent code with a common cross-platform API for async fiie IO, streams, UDP, TCP sockets, named-pipes, DNS requests, etc., along with process forking, new clocks & timers, async TTY support, etc.
So important and highly-respected is libuv that several other OSS projects are now adopting it, further improving their ability to run on Windows.
Today, Ryan Dahl, node’s creator, was seen to tweet:
Microsoft themselves have also recently released IISNode - an IIS extension that enables node apps to run as first-class citizens on IIS. Along with FastCGI, IISNode now allows a single website to simultaneously host ASP.NET WebForms, ASP.NET MVC Web Pages (formerly Razor pages), PHP, Node (and potentially other platforms too including Ruby, Python, Perl, etc.)!
… NOSQL: Cassandra, Redis, Mongo, etc.
All of the major NOSQL engines already run very nicely on Windows. I myself am running Redis and Cassandra on the laptop upon which I am writing this post! I am certain that should the demand increase, that Microsoft will collaborate with those projects to further improve their products’ performance, reliability and manageability (if necessary) when running on Windows.
… open source via the NuGet package manager & gallery
Perhaps the second most important feature of any open-source community (after a decent DVCS facility) is package management. This allows any developer anywhere in the world to download, verify, extract and install a wide variety of open-source components, add-ons, utilities and tools with just a few keystrokes.
Ruby, for example, has gained a colossal following in just a few short years thanks largely to the huge number of Ruby “Gems” that can be downloaded and installed using the Gem package manager. To install a package, Ruby developers just need to type commands like:
gem install <package name>
Many other open-source communities have followed this pattern: For node developers, type:
npm install <package name>
For Windows developers, install nuget, then browse the nuget gallery and then from Visual Studio’s Package Manager console or from the command line, type:
nuget install <package name>
While nuget was originally created by a skunkworks team at Microsoft and then later formalized by Microsoft’s web platform team, it’s since been handed over to the OuterCurve Foundation & the community. NuGet is BY FAR the most exciting thing to enter the Windows developers’ toolbox for a long, long time.
Conversely, making .NET code great EVERYWHERE!
Not only is Microsoft committing time and resources to making open-source projects run well on Windows, but it’s helping make their own products work well on non-Windows environments!
.NET is Microsoft’s implementation of a set of standards that the company released to the ECMA standards body in 2001, even before Sun released the Java spec’s!
Taking advantage of the fact that the technologies underlying .NET would be open and free, in July 2001, Miguel De Icaza, creator for the Gnome shell for Linux, announced the creation of the Mono Project – an open-source project that would aim to implement the CLI, CLR & C# for UNIX-based operating systems (.e.g. Linux and, more recently, OSX).
Miguel & Co. formed Ximian to create a commercialized toolset using the open-source Mono project. Over the subsequent years Mono & its commercial tools continued to improve and innovate, despite being bought by Novell, cast aside when Novell crumbled and since taken over once more by Miguel & Co. at the newly formed Xamarin corporation.
Today, Mono is a fully featured, cross-platform implementation of the CLR, CLI & C# and can run a large number of .NET projects including ASP.NET, Orchard CMS, Raven document DB, etc.
This morning, Miguel De Icaza tweeted a request for help from the community in order to do the work necessary to implement the additional (async) features required by the newly released ASP.NET MVC 4 framework … and Microsoft was the first to offer its support:
Microsoft have also helped ensure that the open-source Orchard Content Management System (CMS) runs on Mono and that it supports RavenDB and MongoDB. The list of open-source .NET projects is growing VERY rapidly with, or without, Microsoft’s involvement. It’s only a matter of time until the .NET open-source community achieves critical mass and achieves explosive growth.
Considering the sheer size of the .NET community, it should be a very exciting time ahead!
Is that it?
No. The projects enumerated above don’t even begin to scratch the surface of Microsoft’s contributions to open source or open-source projects that they themselves founded. We’ve not even mentioned F#, CoApp, PEX & Moles, etc. And we’ve not mentioned how Microsoft is helping Umbraco port their CMS from ASP.NET WebForms to MVC Web Pages.
So, why is Microsoft doing all this?
Well, essentially, the world has changed in the last 6-8 years. Open-source projects have proven their ability to deliver groundbreaking new technologies VERY quickly. Consider jQuery, MySQL, ProgreSQL, Cassandra, Redis, node.js, etc., all of which are open-source and all of which are delivering valuable service to their users.
By making Windows a great place to run all these systems, Microsoft will increase its applicability and
So Microsoft is all Unicorns and Rainbows?
No. Not yet … but they’re a heck of a lot closer than ever before!
I think it safe to say that, unlike 10 years ago, Microsoft “gets” open-source and is now a staunch supporter. Not only that, they’re proving through their actions that they’re willing to open-source some of their own premier products and technologies.
Will we ever see a day when Microsoft open-sources Windows or Office? Probably not, but, I wouldn’t be at all surprised to see them open-source subsystems and components of their OS for others to contribute to.
What Microsoft needs to do more now than ever before is:
- Increase support for external open-source projects (e.g. help get libuv adopted by Cassandra, Redis, etc.)
- Lead by example
- Open-source more products where relevant and necessary
- Develop in the open
- Accept appropriate code submissions from the community
All in all, open-source on Windows is looking good now and about to get VERY exciting in the coming months.