Someone asked tonight a question along the lines of “What is Microsoft's stance on Mono?“. Although I can't answer that question definitively, I can offer to share my opinion. So, for what it's worth, I'm going to share some of my thoughts. (Note: This is streamed from my brain... through the fingers... to the keyboard... into the textbox. So, if some of it seems there is some discontinuity; it's just me thinking... well I'm not sure what the term for it is, but if I were speaking it would be “out loud“.)
First, I think that Mono is something that Microsoft is secretly hoping succeeds. What!?!?... Well, wait, let me explain. Before getting into the details of Microsoft's stance on Mono, I need to share first my opinion of where I think the future of .NET is going.
Microsoft will continue to develop Microsoft .NET for it's platform. Duh... like that's not known. OK, so that's an obvious statement. However, Microsoft has fully committed to making .NET it's platform of choice. Eventually, all applications coming out of the walls of Microsoft will be .NET. There are already a few applications that are .NET that you might not be aware of. BizTalk and Windows Media Center Edition PC (extensions) are two that I can think of off the top of my head. I remember browsing through some of the Microsoft job offerings and seeing an opening for a C# developer for the Windows Movie Maker 3.0 product. Eventually, Microsoft Money, MapPoint and even the Office suite will all be .NET. Even the next version of Windows will be .NET-centric... with all new API's being made available to .NET development tools.
OK, so let's step back to the Mono question. It would make good business sense for Microsoft to consolidate several teams; right now they have two teams for Office and two teams for Internet Explorer... just to name a couple. This means that there are two whole teams developing the *exact same products*. However, they aren't exactly the same and at one point or another, the Macintosh version of Internet Explorer has been touted a better product. At one point, there was a rumor that Microsoft was going to hire a third party to develop a compatible .NET framework for the Macintosh. Shortly after the release of .NET... Mono starts making some real headway and within the last two years has done a phenomenal job. Like I said in another entry, it's not done yet... but boy what a great foundation they have to build upon. So, why should Microsoft *hire* someone to do what Mono is already doing. Given what time frame I see when Office will finally hit .NET, I'm guessing about 6 months after the release of Longhorn, that gives Mono a couple more years to flush out it's kinks. Wait!, you say. Why would Microsoft want to use an Open Source product that mimics it's own platform? Well, first, Mono licensing is such that *anyone* could take the product... add to it it's own implementations and extensions and sell it as their own without sharing squat. However, I don't see Microsoft doing that... or even targeting Mono publicly. However, just as Wine has existed and there are companies out there that have extended Wine to allow more recent versions of Office to run on Linux... what is to stop anyone from taking a copy of Microsoft Office targeting 100% .NET and running it on either Linux, Macintosh or any Mono capable platform? Microsoft sells yet one more copy of Microsoft Office and can even disband the Macintosh teams working to port the existing applications.
Now, I don't really see Microsoft doing this. What I see happening is, as the time line progresses, that Microsoft will approach Novell and offer a licensing deal. This deal would allow Microsoft to package Mono for targeting Macintosh... and if they so chose... even Linux (not that I see that happening). In return (to Mono), Microsoft would offer assistance to flush out the necessary pieces of Mono that were required for Office. I hear the scepticism... even as I type this ;-) I did say this was pure speculation and opinion, right?
Why would Microsoft support Mono? Well, I highly doubt that *any* company could throw the necessary funds and bodies that Microsoft can commit toward making Microsoft .NET the preferred .NET platform on their own operating system(s). In addition, because they are Microsoft, for the foreseeable future... Microsoft sets the direction of where .NET goes. Oh, some would say that the Open Source community could easily surpass Microsoft's efforts and make Mono a “better” platform. Whether that is true or not is debatable. However, what is not debatable is that Windows is *not* going to disappear and Microsoft *will* continue to sell copies of newer versions of Windows. Longhorn (the next version of Windows for those that don't know) is slated as being the first “.NET-centric” Windows platform. *ALL* new API's will be .NET... no more new API's targeting C/C++ Win32 style applications. If you wish to leverage new features in the operating system, you'd better be using something that can at least consume .NET assemblies. In addition to being the first Windows platform that is .NET-centric, it will be the *ONLY* platform that is such within the next couple of years. Now, considering adoption rate, that means if Longhorn gets released in late 2006 or early 2007; it will take 18-24 months before it is deployed on a saturated number of desktops. That puts us into 2009... nearing the end of the decade. That's 4 years from now. That will mean .NET will be closing in on 11 years old (from inception) and nearly 7 years of being released as 1.0.
Microsoft is also shifting their focus from a software sales company to a consumer oriented products company. This is not to say they are getting out of the software business, rather that they are changing their focus from writing software for the “computer user“; instead writing software that is more about solving specific problems. In addition to writing the software, they are developing new hardware based solutions that augment this software. One example I can think of is solving the problem of media (pictures, music and video). Microsoft currently has several products that help to make your digital media accessible. Windows XP Media Center Edition PC, Windows Media Center Extender for Xbox, Windows Media Center Extender set top box and Portable Media Center. All of these products leverage technologies shared across the different devices and together make an excellent solution to the problem of how do I access my media. I see this only improving.
I've just started to scratch the surface of my thoughts on this, but I suppose this is a good stopping point for the moment (it's late and I really need to get some sleep). So if you want to leave a comment, ask a question or flame the hell out of me; please feel free to do so. (Trust me... I will speak on this some more... so you've been warned.)