Good post. It's funny, because C# has been ubiquitous for a long, long time - just not in cool areas like the startup scene. I was a C# web dev for years before moving onto using Node or Ruby as a backend in order to be able to work on more interesting projects.
I look forward to a future where C# is more ubiquitous, because, as the post states, this will largely come at the expense of Java, which has always felt like C# Only Not Quite So Good. Cross-platform these days means a lot of mobile work, and if we can write our server backends, iOS Apps and Android apps in one language that's a big win.
I used C# for a long time before moving on as well. Mostly web stuff, but also desktop software and services (Windows equivalent of a daemon). I always really liked the language, and the libraries are mostly pretty good, but it being tied to Windows and especially IIS was always a real problem.
But I think .NET has also long suffered from a more anemic ecosystem than other platforms have. Things like a package manager have just recently come around. Things like tooling and educational resources seem more spotty than for other platforms. (Although some of the for-pay .NET tools are really, really nice.)
So, I too would like to see it used in more interesting ways than line-of-business desktop/web apps. But I wonder how the above things will play out. I'm really glad it's not so tied down to Windows anymore. But maybe there are other issues to resolve, now.
I'm just hoping that the stability and ease of deployment approaches what it is on windows for server-side apps. Also, I wonder where VS will wind up with all of this. If I could use VS on OSX or Linux that would be my preference at this point.
I'd looked into mono (mod-mono/fcgi) a number of times, and it was always painful, with some performance/stability issues, and in the end worth the server license to just not deal with it.
For the past few years, I've been doing more node work than .Net and loving it. That said, I wouldn't mind doing some pieces in C#/.Net because it has a lot of niceties as well. It's generally the "enterprise" tooling, and excessive use of design patterns that has made it more painful in practice.
I'm not sure about this statement: "Of these platforms, Linux is clearly the most important. Today, Microsoft earns much of its (record) profits from enterprise software packages (SQL Server, SharePoint, Exchange, etc.). By running .NET on Linux, it now has the ability to run those apps on a significant majority of server platforms."
Are significant portions of SQL Server, SharePoint, and Exchange written in .NET managed code? I would have thought most of the code base for that stuff would still be in non-managed C++. Will having .NET on Linux make it significantly easier for them to release SQL Server on Linux?
I don't think so and I don't think that's the reason behind this move.
I'm pretty sure this is about gaining back some developers. All the cool things happening these days on mobiles and on the web are not happening with Microsoft's platforms.
It's important to remember from where .NET comes from. It was part of a larger vision of Microsoft that included Windows Longhorn, .NET Passport, project Greenwich and Trusted Computed. Of course this vision screamed "Lock-In" and it was about just that (too bad that it is happening anyway, yet people aren't paying attention anymore). So .NET wasn't opened because it was seen as a way to keep people on Windows. Sure there was an ECMA standard, but that was just like putting lipstick on a pig (though ironically that ECMA standard is much stronger and useful than Java's JCP, which is a complete farce).
Unfortunately they missed the forest from the trees. The web developed outside of their walls, mobiles developed outside of their walls. All the cool things happening right now are happening outside of their walls. And now all of a sudden, a Windows-specific platform becomes a liability, a way to keep people out of Windows or whatever Microsoft wants to do.
Personally I'm happy about it. It's a pretty solid platform and a good alternative to the JVM. Given the dickish moves by Sun against Apache Harmony and by Oracle against Android's Dalvik, I think it's about time the JVM had some competition. .NET is still missing a healthy ecosystem though. For Java / the JVM the ecosystem is intimidating at first (e.g. so many choices, so much open-source, multiple IDEs, multiple languages, WTF), but it's actually its biggest strength. On the other hand if there's enough interest, then .NET can catch up as the basics are taken care of.
I think what's meant is that it will be easier to create software on Linux that uses MS enterprise packages, like SQL Server, Sharepoint, etc.. So devs can make use of the MS ecosystem without being totally locked into it. Especially since cloud-based services like Azure means never having to buy/host/maintain any Windows boxes at all, if you don't want to.
" .NET has a key advantage over Java in its support for clients. Despite the significant improvement JavaFX delivers over Swing, Java is no one's first choice for writing desktop UIs, whereas .NET is standard for business applications. "
This will be interesting. Obviously, .NET is the best way to make desktop GUI in Windows; I wonder what they will do to support GUI creation on Linux and OSX.
A WPF like framework for each platform would be very nice. Code the interface three times and share back end code between them.
I also like Xamarin.Forms' way. Describe, in general terms, what you want the interface to look like, and it generates native GUIs for Windows Phone, Android, and iOS that follow each of their different UI conventions (tabs at the top, tabs at the bottom, menu button, etc. depending on the OS).
"Java is no one's first choice for writing desktop UIs, whereas .NET is standard for business applications"
From my PoV neither Java nor .NET is the first choice for UI. HTML and JS is. Especially for large multi-million dollar software. I know what I'm talking about here. Yes, HTML&JS are bad and crap, but may times better than applets or desktop apps. Nobody likes vendor lock-in.
When it comes to server side .NET is much worse than JVM.
So now, you got the picture why Mincro$oft made this desperate move. Developers, developers, developers...
But the quote specifically calls out desktop UIs. HTML&JS might be standard for UIs, but what about specifically desktop UIs? Not everyone has the option of putting their UI on the web.
[+] [-] untog|11 years ago|reply
I look forward to a future where C# is more ubiquitous, because, as the post states, this will largely come at the expense of Java, which has always felt like C# Only Not Quite So Good. Cross-platform these days means a lot of mobile work, and if we can write our server backends, iOS Apps and Android apps in one language that's a big win.
[+] [-] serve_yay|11 years ago|reply
But I think .NET has also long suffered from a more anemic ecosystem than other platforms have. Things like a package manager have just recently come around. Things like tooling and educational resources seem more spotty than for other platforms. (Although some of the for-pay .NET tools are really, really nice.)
So, I too would like to see it used in more interesting ways than line-of-business desktop/web apps. But I wonder how the above things will play out. I'm really glad it's not so tied down to Windows anymore. But maybe there are other issues to resolve, now.
[+] [-] tracker1|11 years ago|reply
I'd looked into mono (mod-mono/fcgi) a number of times, and it was always painful, with some performance/stability issues, and in the end worth the server license to just not deal with it.
For the past few years, I've been doing more node work than .Net and loving it. That said, I wouldn't mind doing some pieces in C#/.Net because it has a lot of niceties as well. It's generally the "enterprise" tooling, and excessive use of design patterns that has made it more painful in practice.
Good times indeed.
[+] [-] andyhnj|11 years ago|reply
Are significant portions of SQL Server, SharePoint, and Exchange written in .NET managed code? I would have thought most of the code base for that stuff would still be in non-managed C++. Will having .NET on Linux make it significantly easier for them to release SQL Server on Linux?
[+] [-] bad_user|11 years ago|reply
I'm pretty sure this is about gaining back some developers. All the cool things happening these days on mobiles and on the web are not happening with Microsoft's platforms.
It's important to remember from where .NET comes from. It was part of a larger vision of Microsoft that included Windows Longhorn, .NET Passport, project Greenwich and Trusted Computed. Of course this vision screamed "Lock-In" and it was about just that (too bad that it is happening anyway, yet people aren't paying attention anymore). So .NET wasn't opened because it was seen as a way to keep people on Windows. Sure there was an ECMA standard, but that was just like putting lipstick on a pig (though ironically that ECMA standard is much stronger and useful than Java's JCP, which is a complete farce).
Unfortunately they missed the forest from the trees. The web developed outside of their walls, mobiles developed outside of their walls. All the cool things happening right now are happening outside of their walls. And now all of a sudden, a Windows-specific platform becomes a liability, a way to keep people out of Windows or whatever Microsoft wants to do.
Personally I'm happy about it. It's a pretty solid platform and a good alternative to the JVM. Given the dickish moves by Sun against Apache Harmony and by Oracle against Android's Dalvik, I think it's about time the JVM had some competition. .NET is still missing a healthy ecosystem though. For Java / the JVM the ecosystem is intimidating at first (e.g. so many choices, so much open-source, multiple IDEs, multiple languages, WTF), but it's actually its biggest strength. On the other hand if there's enough interest, then .NET can catch up as the basics are taken care of.
[+] [-] custardcream|11 years ago|reply
So we might see SharePoint for Linux yet.
The other two I suspect are very tied to win32.
[+] [-] mtVessel|11 years ago|reply
[+] [-] pm90|11 years ago|reply
This will be interesting. Obviously, .NET is the best way to make desktop GUI in Windows; I wonder what they will do to support GUI creation on Linux and OSX.
[+] [-] gagege|11 years ago|reply
I also like Xamarin.Forms' way. Describe, in general terms, what you want the interface to look like, and it generates native GUIs for Windows Phone, Android, and iOS that follow each of their different UI conventions (tabs at the top, tabs at the bottom, menu button, etc. depending on the OS).
[+] [-] megaman821|11 years ago|reply
Java has many more high-quality open-source libraries than C#, but hopefully over time C# will catch up.
[+] [-] unknown|11 years ago|reply
[deleted]
[+] [-] palindrone|11 years ago|reply
From my PoV neither Java nor .NET is the first choice for UI. HTML and JS is. Especially for large multi-million dollar software. I know what I'm talking about here. Yes, HTML&JS are bad and crap, but may times better than applets or desktop apps. Nobody likes vendor lock-in.
When it comes to server side .NET is much worse than JVM.
So now, you got the picture why Mincro$oft made this desperate move. Developers, developers, developers...
[+] [-] chrisbro|11 years ago|reply
[+] [-] rayiner|11 years ago|reply
That's a real vindication of the "worse is better" theory.
[+] [-] cognivore|11 years ago|reply
Yes, it's multi-million dollar because that's the budget it takes to make anything complex.
[+] [-] freehunter|11 years ago|reply