.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.
AKA mobile and Windows.
.Net is cross platform on mobile. Outside of it, if your project ever need to run in anything that isn't Windows, or communicate with anything that isn't Microsoft, then you can't use .Net. That makes it fit for enterprise CRUDs and not much else.
I mean it is honestly by far the best framework I've uses to communicate to everything from 40 year old hardware to modern web services and APIs.
As far as "run on anything that isn't windows" I'll grant you, that's a very emerging area, but you can run .net (or some flavor it) on a lot of different platforms.
Hell I've got a raspberryPi running windows 10 IOT with .net running on it, and it works like a top.
And statements like "If Microsoft doesn't pour a billion dollars into getting .Net ready for Linux in 2018, .Net is over." say's to me, you don't really have your finger on the pulse on the enterprise ecosystem at all.
You'll be hard pressed to find a language that has breadth and depth that .net has. Couple that with the new push to Open source, from an enterprise standpoint, it's a very attractive platform.
Windows 10 IOT is basically Raspberry Pi and Allwinner A64 only at this point, which excludes most of the ARM SBCs out there.
The problem with both these platforms is they are horribly I/O limited, to the tune of 1 full USB port worth of bandwidth. Other SBCs commonly push 4x that or more!
These programs can do anything, just like any other code in any other language, and the protocols (like HTTP or UDP) to talk between processes or programs have nothing to do with the code itself, which gets compiled down to the same machine level instructions anyway regardless of what language you use.
So what communication protocol are you using that .NET can't talk to? In Enterprise it's almost always SOAP or REST and .NET has some of if not the best technologies for producing or consuming both.
That's just plain wrong. Not only might .NET be a good option for a backend system (which can, of course, communicate with any platform), but people have been using .NET on non-windows systems via Mono for many years
With the emergence of AJAX though most competent WebForms developers dumped it because of then overheads and used the framework more like Classic ASP while integrating AJAX.
In retrospect, I'm not surprised MVC gained popularity so quickly.
The issues with FormState made it mostly unusable over the internet, it was relegated to intranet applications for the most part.
You meant stateful, right? I mean if we're being pedantic it's good to actually be correct.
Something that has success is successful, and when you're having trouble sleeping you might say you're feeling wakeful. Why then would it be state-full?
If you have a massive complex webapp then you should use MVC, or look at a separate frontend JS talking to a backend API, but WebForms serves its niche very well.
WebForms' selling point is that it is easy to bootstrap, but its limitations quickly become a liability in an enterprise setting, where small apps rarely stay small. Once you decide you need to extend your app and/or integrate with newer non-MS web technologies, you are backed into a corner.
WebForms is something that really ought to have been deprecated, but people are still clinging onto it because it's so easy to use and there are too many legacy apps that still depend on it.
I suspect it's the kind of Stockholm Syndrome that have kept Mongo users faithful over the years. At the back of your head you know you're going to have to pay down the technical debt later, but you can't resist because it's so easy to get started and to see results.
(though to be fair, Mongo 3.4 onwards has overcome some of the serious flaws of earlier versions)
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.
Go is definitely catching on but nowhere near passing Java, maybe it will someday
Neither Apple nor Microsoft use Java.
Facebook uses PHP, Google uses a lot of languages but mostly C++ for Search. Amazon does seem to use a lot of Java.
From what I understand Apple uses java/scala fairly extensively for backend services.
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.
And IntelliJ IDEA has been doing a good job with its support for multiple languages, having great support for Scala, Kotlin, Groovy and JRuby at least. There's also great support available for Clojure built by a third party.
Yes, I think you get most of the advantages of Java. There's a learning curve involved for Java developers of course, but it's very incremental because the underlying platform is the same and this matters.
Only Scala and Kotlin are feasible alternatives to Java for building applications on the JVM or Android. The others in that list are limited by dynamic typing to scripting only or didn't see much adoption for building large systems, e.g. Apache Groovy for glue code and build scripts.
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.
All the C# I run across is line of business stuff. So it may very well be great for that, but it’s less interesting from a development perspective.
Making it easy to setup a demo project means things may stay on Asure because that's the fastest path to production. Thus it's about business migrating from Demo (Asure) > Production (Asure) vs Production AWS > Azure.
The VS Code editor is also embedded in the Azure web portal. So by getting people using Code they may find it easier to up-sell to Azure. In fact, Code started life as the Monaco editor in Azure and was spun out into a separate product.
Dev here, our strategy for AI is Azure-first, but not Azure only. While we provide first class monitoring for ASP.net services running on Azure, we also have lots of open source SDKs available for major languages, as well as first class Java and node.js SDKs and are trying to bring some of our other open source SDKs to the same level.
We totally get that ASP.net isn’t the end all be all and that people run other types of services, so we’re trying to bring App Insights to as many of these services as possible.
I think you're right another factor is that there are more Python and Ruby devs looking to write Python and Ruby on the JVM then the clr.
In my world (Fortune 500) boutique tech carries inherent risk.
I wouldn't waste my time converting from a Java infrastructure to a .Net infrastructure and if I were a Linux shop, I probably would stick with Java for awhile, but if I'm already using Windows servers or have my choice today of using Windows only for the backend, I would definitely chose it because of the number of devs and network people available.
Please elaborate. This is the first I have heard from someone experienced in both F# and Scala to assert this.
Write a function that works with any monad? No?
Write a function that works with any numeric type? No?
You can fake type-classes, but it’s in no way a first class citizen. You can’t easily fake higher kinds.
You may not need those features, it doesn’t make my original statement any less true.
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.
It was overly complicated and there were so many gotchas I found in the proof of concept that I did, I backtracked and went with the ASP.Net Core Framework (aka Asp.Net 5) using Kestral on top of .Net 4.6 and using Hashicorp's Nomad for orchestration.
I'll try again in a year....
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.
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.
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).
I'm sort of surprised that Python on the CLR isn't more popular than it is; with the investments made in the DLR specifically for better dynamic language support, that seemed to be a natural move to me.
.net http client does not support http cookies rfc 6265 which is 6 years old.
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.
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
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.