top | item 15998856

Open Source .NET three years later

216 points| matthewwarren | 8 years ago |mattwarren.org | reply

185 comments

order
[+] jeswin|8 years ago|reply
What's holding .Net back is a lack of the vision thing. That's a shame, since in many ways it is a better designed framework, with a superior flagship language (C#) compared to the Java platform. Their framework and language designers are truly world-class, probably the best in the world.

The problem with .Net's vision has been painfully obvious to anyone following .Net over the years - it is still Windows First. While in Enterprises and Startups [1], Linux is what matters on the Server.

As an example, just last week I was looking for some http2 libraries in C#. Go and Java have mature libraries already in production, while .Net only supports http2 services on Windows. That in turn affects other ecosystems as well, such as gRPC Services. This to me is a red flag. Given how important something like http2 was going to be, how come Microsoft is so late to the party? What exactly is .Net's niche, given front-end wars are over?

Another example, the very promising CoreRT project (https://github.com/dotnet/corert) page says this about Linux: "Same as Windows, the libraries are less complete."

As a late comer, .Net faced an uphill climb. High-end web tooling is almost exclusively JVM based (Kafka, Cassandra, Elastic Search, Kibana etc). The upcoming competitor is Go, not .Net. If Microsoft doesn't pour a billion dollars into getting .Net ready for Linux in 2018, .Net is over.

[1] I've been a consultant to several Small and Medium sized businesses (especially in Medical) which predominantly use Windows and .Net, and that's still a huge market. But even they are looking to move off Windows.

[+] manigandham|8 years ago|reply
It's definitely not dead.

.NET runs everything from desktop apps to web infrastructure to mobile games - it's a lot more encompassing than building some websites. It also integrates into a vast ecosystem with Office, SQL Server, Active Directory and is backed up by the fast-growing Azure Cloud. Most small, medium and 100% of the Fortune 500 run on .NET code and services.

HTTP/2 is just not part of Kestrel yet, which is the default new .NET Core web server. You can always use other libraries and this doesn't affect GRPC at all (which can easily generate the server from .proto stubs).

And how are the front-end wars over? Asp.net has great integration with all these modern JS frameworks, along with MVC and WebForms which are both still viable and used often. Why does there need to be a "niche" when .NET already does far more?

It seems like you found 1 missing feature and are proclaiming it a failure when the reality is that it's one of the most common frameworks today, and now also runs great on Linux. It'll be around for decades.

[+] module0000|8 years ago|reply
I work in the finance sector, and I don't see any new projects being built around JVM (or kafka, or cassandra, but elastic search is still popular). That said, the existing java product deployments are solid and there is no terrifying rush port them. New web tooling is a split between go and python. Also it doesn't hurt that gigantic amounts of business logic are PLSQL, with more going that way every day.

We haven't seen .NET for a new project in 5+ years. Doesn't mean it's not a viable tool, but the deployment story is a cost nightmare to us, and our teams distrust the upstream vendor.

[+] avenoir|8 years ago|reply
I've been hearing that .NET is dead/dying for probably 8 years now. I work on an enterprise software platform comprised of mostly .NET microservices and some NodeJs sprinkled here and there on the back end. 80% of our .NET code is running in a container on a Linux distro. The other 20% just hasn't been ported to .NET Core or has some shitty dependency which can only run on a Windows environment. I see some of our devs switching to Macs for development already. All of this has occurred in just 2 years. I would say give it some time. The progress has been amazing in my opinion.
[+] bad_user|8 years ago|reply
> That's a shame, since in many ways it is a better designed framework, with a superior flagship language (C#) compared to the Java platform. Their framework and language designers are truly world-class, probably the best in the world.

While I'm happy about the progress and I hope that .NET Core succeeds, I've heard this claim repeatedly and I must say that it doesn't stand up to scrutiny.

The biggest problem of .NET's community and Microsoft's is that it fixated on Java the language, missing out on the improvements that happened in Java the runtime, not to mention the ecosystem.

Just to give a small example, the "tiered compilation" coming in .NET Core has been in Java since version 1.4, so we're talking about 2002. That was the Java version coming with the Hotspot VM, inspired by Self and Strongtalk. And it has only gotten better since then.

Java the language is terrible, we can all agree, however you can swap it with Scala, Kotlin, Clojure, Haskell (Eta), Groovy, JRuby and others, all of which benefit from running on the JVM, with the JVM itself turning out to be a much better host for other languages. Which is a little ironic given .NET's initial marketing.

Also another problem is that the community is waiting to be spoon-fed by Microsoft. In Java's ecosystem on the other hand the endorsement of Oracle is almost irrelevant. Outside the OpenJDK JVM itself most interesting projects are not built by Oracle. And even in the JVM area you've got interesting alternatives like Azul's Zing, featuring an awesome "pauseless GC".

Hopefully with the opening of .NET we'll see some actual competition to the JVM, but to those of us that have been in JVM's ecosystem for some time it's actually pretty clear why .NET lost thus far.

[+] maxxxxx|8 years ago|reply
"High-end web tooling is almost exclusively JVM based (Kafka, Cassandra, Elastic Search, Kibana etc). "

This is what's making me want to move away from .NET. Most really interesting development is done in Java and Linux. With .NET and Windows you are often a step behind.

[+] sercand|8 years ago|reply
Don't forget the Unity3D, most of the people who use Unity uses C# to make a game. Recently, Godot Engine also added C# support. So .Net is not just about web development.
[+] jsingleton|8 years ago|reply
I think .NET's vision is get people using Azure. You could say the same about VS Code. MS want to gain developer mind-share and get them using their cloud.
[+] Nullabillity|8 years ago|reply
Java may be the JVM's "flagship language", but why would I replace the whole platform with C# when Scala and Clojure exist, and stay compatible with the JVM?
[+] heartbreak|8 years ago|reply
> If Microsoft doesn't pour a billion dollars into getting .Net ready for Linux in 2018, .Net is over.

I feel very confident stating the opposite. If Microsoft halts all investment in .Net today, .Net will still be around another 30 years at least with maintenance work alone.

[+] spo81rty|8 years ago|reply
They are busy porting millions of lines of code to work on Linux. Cut them a little slack on HTTP2. It's coming I'm sure.
[+] scarface74|8 years ago|reply
I was hoping your footnote was going to be a cite from a reputable source when you stated most startups and Enterprises are predominantly Linux, not just your own anecdotal experience.

My own experience is that most large enterprises use Windows because that's what their network people are use to and finding Windows network admins and developers are easier.

[+] Matthias247|8 years ago|reply
Regarding HTTP/2: I felt the development of this feature went a little bit "strange". For a long time the feature was blocked by missing support for ALPN negotiation on SSL. There was some interest from the outside to work on it, but discussion on it was stuck for a loooong time (1.5 years). As far as I can see now ALPN support has finally been added to .NET core: https://github.com/dotnet/corefx/pull/24389

HTTP/2 itself requires ALPN to talk to browsers, however a large part of the implementation can already been done without it. Out of personal interest I poured quite a ton of work in the beginning of this year into writing a solid HTTP/2 library for .NET, which could have been the base for webservers as well as things like GRPC: https://github.com/Matthias247/http2dotnet

It's state should be good enough to enable HTTP/2 now with less than a 2 weeks of work. However unfortunately I never got any feedback around it or felt interest in it, even though I think lots of stakeholders should be aware about it.

It seems like the ASP .Net core team is implementing now their own HTTP/2 library, which was far more barebones than mine when I last looked at it (https://github.com/aspnet/KestrelHttpServer/pull/1991). Don't have the time and interest to review the latest state.

[+] mehrdada|8 years ago|reply
gRPC C# currently comes with its own HTTP2 implementation, and is basically a wrapper over the C code that implements gRPC and HTTP2 stack. It doesn’t rely on .NET’s implementation of HTTP2 at all. And it does run on Linux as well as Windows.
[+] cm2187|8 years ago|reply
> with a superior flagship language (C#)

and don't forget VB.net, which is an excellent language for non IT professional novice programmers, particularly if they come form VBA. .net provides a good language for novices that gives access to most of the flexibility and power of the framework (outside Xamarin basically).

[+] Dolores12|8 years ago|reply
http2? its too new to be supported.

.net http client does not support http cookies rfc 6265 which is 6 years old.

[+] hungerstrike|8 years ago|reply
> What's holding .Net back is a lack of the vision thing.

What gives you the impression that it's being held back?

> High-end web tooling is almost exclusively JVM based...

Pffffft. You can't just pick a few JVM tools and proclaim that those are the only "high-end" options. Far from it. Have you heard of Mongo? Redis? Azure Event Hub? ScyllaDB?

> But even they are looking to move off Windows.

Oh how convenient that your anecdotal evidence supports your argument. Well, I also consult for small and medium sized business including many, many Medical companies. None of them want to move off of Windows. Quite the opposite - some of them have Unix systems that they can't get away from fast enough.

[+] Meai|8 years ago|reply
The only thing that is holding .NET back is the significantly slower compilation speed when compared to Eclipse's incremental java compiler.
[+] forgotpassagan|8 years ago|reply
I abandoned .NET over a lack of http2 support as well. The reason? It uses an HTTP implementation baked into the windows kernel. Wtf?

So not only does it lack HTTP2 support on Linux but also non-evergreen versions of windows.

And yes Go is the new competitor for Java, .NET core is a footnote because it has no open source community support.

I'll agree that C# is perhaps the best designed language I've ever used, but it seems that Microsoft decided to open it up many years too late to save it's market share.

Their best bet is creating native Java library interoperability. Third parties have been offering for years, but if it was baked in MS might just have a chance

[+] hacker_9|8 years ago|reply
Always confused that people talk about .Net as if it's failed on here, any time I look for employment in the UK there is a seemingly unlimited amount of high paying C# jobs available and it doesn't take long to get hired. Even my university taught in C# for the first year.

Net core is a slow moving project for sure, and it's not at a stage to use in production yet, but it'll get there and I look forward to further improvements made in 2018.

[+] librexpr|8 years ago|reply
I'd like to switch away from Java in future applications, and C# seems like the top contender, but there are questions I'd really like answered before I make the switch.

I see a lot of people talking about Microsoft open-sourcing .NET Core. But as someone who's never used it, what is .NET Core? And if .NET Core was open-sourced, what about the rest of it? Am I likely to run into major parts of the ecosystem that are still proprietary?

Also, can I develop and use C# applications on Linux without feeling like a second-class citizen? The ability to easily develop on Linux using free software and then run on my clients' Windows computers is one major reason I use Java at all, and I definitely won't switch to a language that doesn't support Linux properly.

And finally, how likely is Microsoft to fuck free software developers over with proprietary extensions in the future? This is Microsoft we're talking about, after all.

[+] jsingleton|8 years ago|reply
I've written[0] and spoken[1] a lot about .NET Core, so I understand that it can be confusing. The similar naming certainly doesn't help. To summarize (and oversimplify) there are three main varieties of .NET: .NET Core, .NET Framework and Xamarin.

The new open source and cross-platform one is .NET Core and it is currently suited to writing server-side web apps (e.g. ASP.NET Core) and command line applications. It is a reimplementation of .NET and more use cases are coming (UWP, CoreRT, native tool-chain etc.).

The Windows only one is .NET Framework and it is better for graphical desktop apps on Windows. WPF and Windows Forms are not open and are Windows only, so are not in .NET Core.

Finally, Xamarin is also open now and lets you build native mobile and desktop apps on Android, iOS and macOS. Full details of all these are on the official docs site[2] if you want to read more, or you could buy my book on ASP.NET Core 2 :).

[0]: https://unop.uk/book/

[1]: https://unop.uk/talks/

[2]: https://docs.microsoft.com/en-gb/dotnet/

[+] blunte|8 years ago|reply
> And finally, how likely is Microsoft to fuck free software developers over with proprietary extensions in the future? This is Microsoft we're talking about, after all.

There's a radical change in public behavior of Microsoft since Satya Nadella became CEO. While at first I was skeptical, it's now been three years we have had to observe whether Microsoft's actions match their promises.

So far, I'm impressed. I think their new vision and approach to doing business is much improved from that of their previous two CEOs - it's better for consumers and developers, and frankly it was necessary for the long term survival of MS.

I don't expect to see nasty behavior from them like we have seen in the past.

[+] eddiezane|8 years ago|reply
I recently wrote about working with .NET Core on macOS and Linux [0].

The TLDR is the dotnet install script works great. Use Jetbrains Rider if you want the best experience (though not free). VSCode is just ok.

Overall I've really enjoyed my dive into this world I never thought I'd be a part of (let alone exist).

0: https://doesnotscale.com/developing-with-net-core-on-macos/

[+] oblio|8 years ago|reply
dotnet core = new, entirely cross platform runtime + core libs meant to serve as the new core of dotnet. In the future everything dotnet will be based on it, for now this isn't the case cause of legacy code. Basically you'd have dotnet core + Windows stuff for the Windows framework, dotnet core + various bits for Mono, etc.

Regarding the ecosystem, even Java has proprietary libs on top. For dotnet, Windows stuff is still proprietary, but even that is changing. You won't care about it anyway.

Just make sure you stay within dotnet standard (i.e. cross platform API standard for dotnet) and either use Open Source Microsoft extras or just use community-developed stuff.

For Linux C# dev, Jetbrains Rider or Visual Studio Code + C# plugin.

Regarding extensions, the battle has shifted. Microsoft is fighting Azure and GCE these days. The proprietary bits are in the services. The clients are Open Source to get mindshare, so no worries there.

[+] marcosdumay|8 years ago|reply
You can technically do everything with an all open-source stack. But you will have to create most of your workflow and integrate your tools by yourself. The all integrated official environment is closed-source only.

On Linux you'll be a second-class target for libraries. The language itself is well supported, but only it.

About future Microsoft behavior, your guess is as good as mine.

[+] Sylos|8 years ago|reply
> Also, can I develop and use C# applications on Linux without feeling like a second-class citizen?

I don't have much experience with C# development and basically none with .NET, but so far my experience has been a clear No.

The elephant in the room is the IDE. Visual Studio is the C# IDE and doesn't exist on Linux. There's MonoDevelop, which is now also owned by Microsoft and seems to share some components with Visual Studio, but it's still not nearly as powerful of an IDE. It feels more like a clunky text editor with a button that will make your program run.

Next thing is that I don't think, you can really develop GUIs on Linux. There seems to be some integration with GTK in MonoDevelop, but I sort of doubt that this works well, and my experience in Visual Studio has been that you practically cannot develop GUIs in C# without using Visual Studio, as so much of the design process is directly integrated into that. Also, developing a GUI application on Linux that will run on Windows, I don't think is possible at all, though I haven't spent much time researching that.

Last point that I have is sort of just a dumb bug, but it felt the most like I'm a second-class citizen. MonoDevelop does not currently support executing console applications on an external console on Linux when you install it via Flatpak (which is their primary distribution method).

But that by itself is not even the problem, it works fine with the internal console and I can live with that. The problem is that there's a checkbox to enable running on an external console and that checkbox is enabled by default. You cannot run console applications on MonoDevelop out of the box, solely because of this.

And console applications seem to be the main-thing that MonoDevelop is good for, so you'd think they would test that and ensure that it works, but apparently not. And really, just disabling this checkbox by default would fix the issue.

What makes this issue worse:

1. The error message is entirely cryptic, it says "Debugger operation failed - Cannot start process because a file name has not been provided.". Thankfully, the internet coughs something up quickly when you copy-paste that into a search engine, but at least I personally first thought I had forgot to give it a file name somewhere and tried to find that.

2. This isn't just one flag in the global settings that you have to flip once and you're done. Instead it's a per project setting, so you have to flip it every time that you start a new project and it's not particularly easy to find either.

3. This has been a known issue for a while (or at least, I hope that they know about it).

[+] severino|8 years ago|reply
Why would you want to do that? What do you find missing in 2017's Java and JVM comparing to other solutions?
[+] hacker_9|8 years ago|reply
.Net, C# and a version of Visual Studio have always been free since their release 17 years ago...
[+] draw_down|8 years ago|reply
Heck, I spent years earlier in my career as a .NET dev and I also don’t understand their naming. I wasn’t totally clear on what .NET core is. It’s not the biggest problem but the way they name things is quite confusing.
[+] dominotw|8 years ago|reply
> C# seems like the top contender

> can I develop and use C# applications on Linux

> I definitely won't switch to a language that doesn't support Linux properly.

I find this comment really strange. What makes C# top contender for you ? You seem to be asking really basic questions about it.

[+] pugz|8 years ago|reply
My 2c: I never had any interest in writing C# on the .NET platform until it was open-sourced and added first party-supported cross-platform support with the introduction of .NET Core.

Nowadays it's my favourite language I write in - it has _excellent_ tooling, especially JetBrains Rider IDE. The open-source library ecosystem might not be as broad as NodeJS or Ruby, but it's high quality and growing all the time.

[+] wenc|8 years ago|reply
Let me say something about the prejudice (mostly my own).

For most the late 80s-early 2000s, I was not a huge fan of Microsoft mostly because of their predatory practices and the shoddy quality of their software. But they had a few products that I thought were legitimately good, and Visual Studio (and the C# language) was one of them. Part of my admiration of it was partly because of Anders Heijlsberg, its architect.

I started my programming life with Borland tools (Turbo Pascal), and then later Delphi. Anders architected all of these tools. They are long in the tooth now but at the time, these tools were fairly well regarded because they reflected flair and good taste. When Anders created C#, I managed to look at it without being clouded by my Microsoft prejudice, because I knew who was behind it.

I started writing C# code a couple of years ago when I started working for a large enterprise. Even as a Linux/UNIX guy, I am able to say that C# is a truly elegant language that is fun to work with, and I would pick it over Java or Scala any day. I don't like its Windows centricity (Windows is still not my favorite platform), but outside of that, it is truly a well-architected language.

Silicon Valley types would do well to put aside their prejudices of the C# language and evaluate it based on its own merits.

[+] mandeepj|8 years ago|reply
FYI - there is support in .net to run any nodejs package
[+] foepys|8 years ago|reply
Do you use Rider professionally with other team members that use Visual Studio? If so, can you elaborate a bit how your experience was? I'm a Java developer that is now working with C# and Visual Studio is driving me crazy. I want to use Rider but I'm unsure on how it interacts with TFS and MS-centric workflows with other team members.
[+] mcny|8 years ago|reply
I have given up on .NET for the most part. Wake me up when we are in Fedora's repos because until then, there are pieces that Microsoft hasn't (won't?) release that we need to get out of COPR.

The people of Dot Net Special Interest Group at Fedora are too nice to say this but I am not. Microsoft is dragging its feet and it is ridiculous.

[+] polskibus|8 years ago|reply
.NET Framework is still closed source AFAIK. .NET Core is open source, but that's two different things. Moving existing applications from .NET Framework to .NET Core and running them on Linux is still troublesome (for example lack of proper ODBC support on .NET Core). Serialization between the two is often not possible or not easy (differences in byte layout). While I think .NET Core is better than nothing, it all has a long way to go, including MS-provided API dlls (like ADOMD, etc.).
[+] kilon|8 years ago|reply
It’s funny when Java devs mention that C# and .NET is a copy cat. The irony is the other way around , even though Java predates .NET , the same creator was then one that created Delphi which Java pretty much copy pasted not as elegantly. It’s great to see Delphi being around and it’s legacy continue through C# and .NET. The fact that Microsoft open sourced it brought a smile in my face. My Delphi days are over, nowadays I Code in Python, but .NET still feels like home.
[+] pnikosis|8 years ago|reply
I learned C# a while ago when started a project in the now defunct XNA. I loved how I felt like home when moving from Java bit with some really nice differences.

I thought that after open sourcing .Net the C# adoption outside the MS ecosystem would be wider by now, but I feel it's not the case. Or am I missing a trend I'm not aware of? (which is very likely too)

[+] oblio|8 years ago|reply
There is still wide resentment towards Microsoft, just go to /r/programming and check out threads about .Net, there's at least a few threads at the bottom going "EEE".

Plus dotnet core wasn't API stable until recently. I think we're still 1-2 years from mass adoption.

Also check @librexpr's comment above, there's a lot of confusion around.

[+] jayd16|8 years ago|reply
It's slow going but I'm not sure that's bad or unexpected. MS bought mono and that blessed it as a platform that isn't dead in the water. Most existing projects are fine staying where they are until Microsoft hardens .NET core.
[+] kuschku|8 years ago|reply
C# is significantly missing tooling. The tooling on Windows is okayish, but that's about it.

You have no cross-platform build and dependency management tool that runs on .NET Core (Using MSBuild and NuGet together requires Mono or the full .NET Framework), and there's only an early version of JetBrains' Rider IDE for non-Windows platforms, there's basically no working integration with any CI or CD system, and the library ecosystem is basically not existing, compared to the open source Java world.

[+] mmgutz|8 years ago|reply
Being open source is good but outside of Windows it's still perceived as a Windows solution with bonus Linux support. I have yet to hear someone migrate from Java, Go, Node, Ruby ... to .NET in meetups I attend. Is open source .NET penetration on Linux any better than Mono?
[+] Yuioup|8 years ago|reply

   What exactly is .Net's niche, given front-end wars are over?
.NET works as an awesome back-end for Angular 2+
[+] danthejam|8 years ago|reply
But so do most other programming languages and frameworks.
[+] romanovcode|8 years ago|reply
Can we have a link to the actual talk please?
[+] lafar6502|8 years ago|reply
Maybe because it hasn’t been the most popular tech among open source developers .net is now a very effective tool for almost any kind of work. The choice of libraries and frameworks is smaller than in Java but quality is better and purpose more clear. You can pick a few core libraries and build on that instead of sifting through millions of half-done or incompatible frameworks. And if you don’t demand that Windows is like Linux then it’s quite decent OS. The only thing missing is good desktop UI framework, but nobody has a better solution now
[+] dustinmoris|8 years ago|reply
I am extremely impressed by Microsoft. I think Microsoft has proven the world that nothing is impossible. Once a hip tech company at the beginning of the computer era, then transitioned into an old, boring and outdated corp has now turned into one of the healthiest, most innovative, brave and genuinely nicest tech giants of our time again. What Microsoft has done and achieved in recent years is astonishing.

They played many years catch up and I think at the point when they realise they cannot do everything themselves and started to embrace the open source world they quickly moved from catching up to being the innovator who pushes new limits again (Azure, Surface devices, Window 10, .NET Core, etc.)

It's already a bit old, but I wrote a blog post not too long ago where I tried to sum up some of the amazing things that happened at Microsoft over the course of the last few years:

https://dusted.codes/thank-you-microsoft-for-being-awesome

[+] flatline|8 years ago|reply
Literally none of these characterizations of Microsoft, past or present, resonate with me at all. Maybe the company has truly turned a new page, but I still mostly see them copying others’ ideas and playing second string as a result. I’m glad they finally have some real OSS offerings but I don’t yet see any as truly collaborative efforts which keeps them on the sidelines.

But, you know, hail corporate!