News: 1594285986

  ARM Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life (Terry Pratchett, Jingo)

.NET Core: Still a Microsoft platform thing despite more than five years open source

(2020/07/09)


Comment Key people working on the .NET platform at Microsoft are concerned about the continuing perception that it is tied to one company.

"Tell your friends that C# and F# are free, open source and run on Linux and Mac," [1]said Microsoft software architect David Fowler, who works on the design of .NET Core and ASP.NET and is also the co-inventor of the SignalR real-time messaging framework.

Fowler made the remark at the weekend, as part of a Twitter debate sparked by .NET developer Billy Collins, who [2]said : "What's up with non-.NET developers thinking C# is a Windows only, corporate bloatware language? It's not 2005 any more."

The problem is that although Microsoft [3]went open source with [4].NET in 2014 , there is a perception that it remains a Microsoft-platform framework which holds back the growth of a wider ecosystem.

[5]

The forthcoming .NET 5 is key to Microsoft's appeal to developers, but despite going open source it is still largely perceived as Microsoft's platform

It is hard to get solid data on this. C#, the main language of .NET, remains popular, used by 31.4 per cent of developers according to StackOverflow's [6]survey and ranked the fifth most used language in the Redmonk language rankings. According to [7]Redmonk's data , C# usage has remained steady since 2012.

That said, Microsoft's platform has a large community and this data is consistent with the idea that the evolution of .NET Core has been successful in keeping hold of existing developers but not so good at attracting new ones. In January, some members of that community [8]reflected on issues like: "In its current form .NET is for 40-year-old white men," and ".NET doesn't get much love from younger devs."

Microsoft has proved itself capable of creating open source projects with a broad user base, two examples being the Visual Studio Code programmer's editor and the Typescript language (created by the inventor of C# Anders Hejlsberg). Both are widely used on non-Windows machines, and with projects that have nothing to do with Microsoft.

Why is .NET different? Among the points made in the recent debate:

"Everybody sees StackOverflow as the only real example of an optimal system built in .NET. There needs to be more examples."

"The ecosystem is still far behind other languages and it's still very dependent on Microsoft … in the case of Java there is a big group of companies behind Spring Boot, you can't say the same about .NET Core as it's mainly supported by Microsoft."

"Outside of contributing, technical direction and roadmap is still highly driven by Microsoft."

Fowler tends to see this as a perception problem that can be fixed. He remarked: "We've been cross-platform for five years and Microsoft never endorsed Mono [a third-party implementation of .NET for Linux] before that. Some of the hurdles were technical and we've removed most of those in 2020. Now our ecosystem is catching up."

While it is true that Microsoft has struggled to communicate the value of .NET beyond its own platform, it is also possible that the company has failed to find the right balance between opening up the technology and retaining commercial advantage from it.

Microsoft had sound business reasons to make .NET cross-platform. Running well on Linux is critical given the dominance of Linux on the server and its role in platforms such as Kubernetes.

However, Microsoft also uses .NET Core and the web framework ASP.NET Core to steer developers towards its other products, not only the Azure cloud, but also the SQL Server database manager in its various forms. The .NET Foundation set up by Microsoft to oversee the open source project is inevitably skewed towards the company; it cannot be a neutral steward despite the involvement of other companies in its governance.

It's all about perception

Don Syme, inventor of F#, [9]said : "[This] is the perception we much change, isn't it? Why not bring more companies visibly on board in .NET leadership? Make .NET a proper DMZ consortium, to reflect the huge range of economic interests involved in it."

Syme is [10]supporting an initiative from .NET Core Principal Program Manager Richard Lander to "improve credit for community contributions", the idea being to raise the profile of non-Microsoft contributors and to promote diversity and inclusion. "There should be no specific different treatment for "The .NET Team" or "Microsoft" in the rules - Microsoft contributors are just part of the community like everyone else," said Syme.

Tweaks like this may help .NET perception. Microsoft has also learned that VS Code must play a part in broadening .NET usage. Senior Program Manager Philip Carter [11]popped into the debate to add : "People with 2-5 years experience with .NET used VS Code way more than people with 5+ years' experience with .NET (despite suboptimal tooling)."

It is not difficult to identify things Microsoft could do to make .NET a more neutral technology and therefore more likely to attract a broader ecosystem. Ideas include switching away from the .NET Foundation, revising the documentation to remove the strong ties to SQL Server and Azure, and making VS Code as good as the Windows-only Visual Studio for .NET development.

But would that fit in with the company's commercial goals? There is also a risk that if Microsoft distanced itself from .NET for the sake of broader usage, the company's customers might worry that it was losing its existing solid backing. It is a problem which the company needs to keep working on, if it does not wish to see .NET usage decline. ®

Get our [12]Tech Resources



[1] https://twitter.com/davidfowl/status/1279538339780063232

[2] https://twitter.com/ChaseAucoin/status/1279537579906535427

[3] https://devblogs.microsoft.com/dotnet/net-core-is-open-source/

[4] https://www.theregister.com/2014/12/18/untangling_net_core_microsoft_answers_questions_on_net_futures/?page=1

[5] https://regmedia.co.uk/2020/07/08/dotnet5_platform.png

[6] https://insights.stackoverflow.com/survey/2020#most-popular-technologies

[7] https://redmonk.com/rstephens/2020/02/28/redmonk-top-20-languages-over-time-january-2020/

[8] https://www.theregister.com/2020/01/22/developer_underlines_c_image_problem_by_running_it_on_windows_311/

[9] https://twitter.com/dsymetweets/status/1279545784438906881

[10] https://github.com/dotnet/runtime/issues/38349#issuecomment-654496761

[11] https://twitter.com/_cartermp/status/1279591670405709824

[12] https://whitepapers.theregister.com/

What's up with non-.NET developers thinking?

Smooth Newt

I'm thinking there are just too many programming languages and platforms doing exactly the same thing to be bothered with them all.

The problem as I see it

Zippy´s Sausage Factory

Basically I think the problem is perception, and certainly it is for me.

People think of the .Net Framework - that's what all the marketing hype has been around for years, and it's the proven, tried-and-tested, used in production, well known, considered stable and usable part of .Net. It's also considered tied to Windows and Visual Studio.

While .Net Core isn't as well known, and if anyone has heard of it then they think of it like "oh cute an open source version of .Net, how experimental. Come back in a few years when it's actually been used in production"

It isn't 2005 any more, yes. But Microsoft doesn't do marketing as well as other people - isn't Swift newer? And I'd imagine it already has a better takeup than .Net Core.

Re: The problem as I see it

LucreLout

While .Net Core isn't as well known, and if anyone has heard of it then they think of it like "oh cute an open source version of .Net, how experimental. Come back in a few years when it's actually been used in production"

Core has been stable enough for production use for a number of years now. My bank uses .NET Core on linux for all cloud based development. There are no new development projects in Java, some in C++ (front office), and Python is used for ML projects and automation scripts. That's pretty much our technology stack (with js for the browser components). Some of the Java guys are moving to Kotlin, some are moving to Go, but one side of that group will have to give way to the other in the short term.

Fringe languages such as Go, F# etc are being phased out as the cost implications of supporting them all into the future eliminates the use case. Too many languages have been borne of Java's failure to modernize and lack of what people can see to be a stable future (thanks Oracle!), and there's no way more than one of them will make the grade.

If I were learning to program as an undergrad today, the only languages I'd consider would be C# on .NET Core, C++, JavaScript (including TypeScript, React, Angular etc), a bit of Python (one flavour of this language will be around for a while), and some Kotlin (I could be persuaded by Go but its a coin toss which one makes it really). The rest don't have the gas to go the distance.

Always seemed an uphill task

NerryTutkins

I was always rather skeptical about the whole idea of cross platform .NET.

I just didn't see people on non-MS platforms enthusiastically adopting it. Most developers on those platforms would have a natural reluctance to invest time and effort in a Microsoft technology.

I kind of expected that all MS would achieve was to gut .NET features for compatibility and as a result lose some of the advantage of having a Windows specific framework, while achieving hardly any market outside of Microsoft devices regardless. And even if they were successful, they would be doing so at the expense of Windows and Azure, so at some point the suits would say "why are we pushing technologies that take users away from our server platform"?

Unsurprising

DrXym

The only cross-platform adoption I've seen of .NET is in the middle of Unity which uses a fork of Mono that calls mostly to a proprietary gaming framework.

For general purpose programming I honestly don't see .NET having any attraction because most real world software would be tainted by Windows in some way. And any software that is intended to be cross-platform from the beginning would have chosen a portable language / framework.

Re: Unsurprising

LucreLout

For general purpose programming I honestly don't see .NET having any attraction because most real world software would be tainted by Windows in some way.

And yet I only write cross platform software in C# for .NET Core and I usually only build it for Linux. I've never actually deployed it on Windows, but I've no specific reason to think it wouldn't work, after all it's written on a Windows laptop and it works there first.

Java is too EOL and Oracle no longer invests in the language, rather its sweaty asset time with charges for their JVM. I know there are alternatives such as Open JVM etc, and while that may be a good choice to keep legacy Java apps running, it isn't a sensible farm bet for the future.

Robert Grant

It's all about perception

Don Syme, inventor of F#, said: "[This] is the perception we much change, isn't it? Why not bring more companies visibly on board in .NET leadership? Make .NET a proper DMZ consortium, to reflect the huge range of economic interests involved in it."

This is just the wrong way round. It's not a perception; it's reality. Change reality, don't just pressure people to help you change perception.

karlkarl

If you look at C (and even C++), you see hundreds of compilers from different vendors.

C-sharp has two or three. I think all owned / run via Microsoft or Microsoft subsidiaries.

This is the big issue I believe. Lack of diverse vendors.

Also, .NET is "big"! If your vendor drops support, you will barely be able to maintain it for a few years. Certainly not be able to port it yourself to alternative architectures or even newer OS versions. A C or C++ compiler for a specific architecture, yeah, much more feasible.

I.e, I am fairly confident I could port GCC from Windows 10 to "Windows 11". I am not confident that I could port Java's JVM or .NET's VM and CLR.

Smooth Newt

I.e, I am fairly confident I could port GCC from Windows 10 to "Windows 11". I am not confident that I could port Java's JVM or .NET's VM and CLR.

And how long would the open source versions of .NET Core, C# or F# last if Microsoft decided to drop .NET, as they have for so many other developer products - J++, J#, Visual FoxPro, Silverlight, Direct X etc. etc.

LucreLout

If you look at C (and even C++), you see hundreds of compilers from different vendors.

C is a great language, you'll get no argument from me there. A junior dev could build a great career on this one language choice and expect to work through to retirement. It's not what I chose but I still see real value in that option.

Also, .NET is "big"! If your vendor drops support, you will barely be able to maintain it for a few years.

.NET is 20 years old. 20. That most of my 20 year old .NET code is no longer executed isn't down to the platform or language choice its due to business changes requiring systems of a different scale, business failures, and rewrites to make things cloud native due to the opportunity there.

Microsoft aren't dropping support for it in our lifetimes - its baked into everything they do and most of what they've produced for the last two decades.

I am fairly confident I could port GCC from Windows 10 to "Windows 11". I am not confident that I could port Java's JVM or .NET's VM and CLR.

I'd probably not bother - I mean, the CLR runs just fine on linux, which is where I deploy most of my code and its open source so readily maintainable. If, and it is a ludicrously large sized if, but if there is a future version of windows in my lifetime that does not support the CLR, then I'll just leave the code hosted on linux, and worst case, switch to a linux desktop or virtual Win 10 machine for development on what would by then be my legacy products. I'd likely have adopted C#'s replacement, whatever that was and from whichever vendor it comes from for my new projects. Hell, I may just give up then and join you folks writing C and C++!

Stuart Castle

I think the problem is that those who run Linux are often vehemently anti-Microsoft and they, given the choice between using a Microsoft product and killing themselves would likely chose the latter. Then, of course, there are those who have genuinely tried .NET (core or not) and found it doesn't work well for them (or they plain don't like it).

Personally, I haven't tried .Net Core, but the only real problem I have with .NET is the need a for potentially massive runtime to be installed. Note: I know that the runtime is <100 Meg, but that *is* massive if the utility you are writing using .NET is only a few K, and have no other need for .NET.

That, plus from a security point of view, I don't really want unnecessary software of any kind installed. More code=greater chance of a vulnerability.

Microsoft reputation

Flocke Kroes

Microsoft worked really hard to earn a certain reputation: Embrace, extend, extinguish.

When there was an opportunity to use .net on Linux my first question was about the patents. I fully expected anyone making money from .net or a clone to have their profits taken away by Microsoft's patent lawyers. Clearly I was not alone in this concern because Microsoft made a public statement resembling a promise not to use their patents until the wind changed. As this convinced hardly anyone Microsoft came out with more weasel worded non-commitments.

I stopped paying attention years ago. Perhaps there is some legally binding commitment by Microsoft not to patent troll .net (or clone) users. It is simpler to use other tools than to look for and hire a lawyer to check such a commitment.

What would be the point?

dajames

I have a lot of trouble seeing anything in .NET that offers any real advantage to developers on any platform.

When .NET was a new shiny thing Microsoft made much of the fact that Visual Studio could generate a lot of boilerplate Windows GUI code for C# automatically, and I can see that that may have offered a productivity boost on Windows ... but only on Windows. Mono never supported Windows's GUI APIs on other platforms. This led to a drop in popularity for Microsoft's previous favourite language, C++, on Windows, and a big "Meh" from people working on and targeting other platforms.

Microsoft have since lost the way badly on the GUI front with ribbon bars, their fascination with the abomination formerly known as "Metro", store apps, and suchlike, and all that old C# GUI code is looking less and less like a good investment.

Meanwhile, other languages have appeared on the scene and gained in popularity, but are poorly served by .NET -- making .NET itself seem less and less relevant. Where are Kotlin.NET and Rust.NET, for example?

Re: What would be the point?

Warm Braw

Where are Kotlin.NET and Rust.NET

Given that Kotlin started off as an alternative to Java and its Java version depends on the Java Class Library, I'm not sure what you would gain by targeting the CLR. One of Rust's features is a lack of garbage collection, so again it's not clear why you'd target a system that uses GC extensively.

There are a lot of things that .NET offers as opposed to traditional C/C++ development in terms of speed of development and safety of the relevant code. But you really need Visual Studio to get the best development experience and, as you say, you lose the convenience of being able to knock up a quick UI as soon as you move off Windows.

Visual Studio + C# is probably the most productive development environment I've ever used, but I'm not sure that "Develop on Windows, Deploy on Linux" is a compelling message, even though my experience of .NET Core is that it works well and is commendably fast.

Job Ads?

Teiwaz

I don't think I've seen any Job ads specifying .Net that didn't also mention most of the rest of the Microsoft stack (not in the last six or seven months)

And if not, why would a hobbyist coder bother with .Net on a non-windows platform except from some perverse masochistic challenge project (granted, some are inclined to odd language picks, just because) - girls won't be particularly impressed, and it doesn't seem like employers are looking for the combo.

Microsoft .Nudge

Anonymous Coward

It's all a nightmare:

If you want to use modern TLS with ALPN in .NET Core/,NET Standard that will run on both Windows and Linux, Microsoft forces you down a path that precludes use of Windows 7, because of lack of support of ALPN for any versions of .NET libraries that run on WIndows 7.

If you want your code using ALPN to run on Linux, you're forced to use Windows 10 on the Windows side, otherwise, on Windows 7, you have use a native C++ layer to rely on the ALPN support from openssl, and then it you can't use it on Linux because it is mixed-mode code.

When the going gets tough, the tough go grab a beer.