Not only Compact Framework. I know about Mono, but it will always be one step behind .NET.
This question is pretty impossible to answer definitively since no one here can predict the future, but I'm going to go out on a limb and say no. Other people developing portable runtimes is today and will probably continue to be encouraged, but I wouldn't count on first party portable runtimes.
Not unless there are some serious industry shifts. Everything MS does is to keep you tied to their platform and their products. .Net keeps people on windows which keeps them using MS Office etc.
There would have to be a big shift in the way MS does business before that changes.
EDIT: btw, this isn't a dig at MS... their business model works for them so good on them. The rest of us mightn't like it, but we're not the ones rolling in cash :)
This is in response to John's comment below:
I thought it would be obvious. Google sell ads. They aim to give everything away so that people use their products and see those ads. Yahoo are the same. Microsoft sell (primarily) products. They aim to keep people using their products. There are 3 ways they do this:
- Make good products (this is usually true of both consumer and developer products... minus sharepoint)
- Market aggressively
- Keep you using their products.
They're a lot less evil about how they do business nowdays, which is great. Back in the day they would do shady things like build code into Windows to make Lotus123 run slower (proven).
Like I said above, I'm not bagging the way they do business, it works for them so great. It is what it is.
Windows Mobile 7 is supposed to be a major upgrade, at least for the mobile phone aspect of compact framework. Let's hope that they start to get rid of this gap that they've created between .NET and .NET Compact Framework. Mobile devices are getting to the point where they could probably support the full framework, so maybe they'll be able to phase out CF in the long run.
It isn't much of a step behind. Especially now that Mono 2.6 "borrows" Silverlight's WCF implementation and provides a LINQ-to-SQL equivalent. It might not have the wide coverage of Java, but the code I write runs fine in all the places I care about.
Partially portable that's for sure, you mentioned Mono. However, there are aspects of .NET which require a lot of effort to code for other operating systems (WPF for one) which will discourage 3rd party companies from fully supporting it.
If you look at Microsoft's history, hell no.
http://en.wikipedia.org/wiki/Embrace,%5Fextend%5Fand%5Fextinguish
For portability, it already is portable for some definition of portable. You'll have to be more specific.
As for your other claim, there are several places where mono is ahead of .net.
SIMD as an example
I am going to bet you that .NET is already portable today. I'm pretty sure that Microsoft would never have decided to build the XBox 360 on a PowerPC platform if they hadn't already had a working build of .NET for PowerPC. Also, they wouldn't have started building Silverlight if they hadn't alrady had a working build of .NET for OSX.
So, .NET is portable. It's just that Microsoft will never port it.
(It's similar to how OSX was ported to the x86 platform. Apple's engineers were asked how they managed to port the PowerPC-only OSX to x86 that fast. They said it was pretty simple, because OSX never was OSX-only. They always had an x86 build going. They just didn't tell anyone.)
However, I'm also curious about your claim that Mono will always lag behind .NET. I find that curious for two reasons:
- Literally on the same line you list an example were Mono is lightyears ahead of .NET: Mono has been ported to much more platforms than .NET.
- You make this claim just two days after Mono introduced two new features in its implementation of C# that Microsoft's implementation is sorely lacking and many developers have long asked for: string interpolation and multiple return values.
Here's a couple of other features that Mono supports and .NET doesn't:
- SIMD
- Continuations
- Modularity
- static compilation (e.g. for building iPhone apps)
- 64 bit array indices
- Compiler-as-a-Service (Microsoft has announced this for some future version of .NET, and are talking about it like it's the best thing since sliced bread. What they conveniently forget to mention is that Mono had this feature for ages, whereas it's going to take quite some time until it will be available in .NET; definitely not in 4.0.)
- (related to Compiler-as-a-Service) C# compiler written in C#
- Oh, and let's not forget: Mono is Free Software, that's also a feature, in fact a very important one, that .NET doesn't have