Whenever we're discussing tech stacks, whether it's here or on X or on Reddit, the most commonly mentioned frameworks are Next.js/Remix/SvelteKit (for those who really like JS/TS) and Rails/Laravel/Django (for those who want "batteries included" and don't want JS in the backend). Occasionally, it's HTMX+Go (for those who don't like "magic" and also don't like JS). But .NET rarely, if ever, comes up, let alone any Java-based solutions like Spring Boot or Dropwizard. Are these tools particularly bad for non-enterprise projects? From what I've seen, they appear to be nearly identical in most ways that matter. Just like Rails et. al, .NET is "batteries included", cross-platform, MVC-based, favors "convention over configuration", has what appears to be a Turbo equivalent in Blazor, and has decent documentation. Does the runtime environment somehow make it harder or more expensive to deploy? Are the "batteries" included in Rails or Django somehow better?
But that changed a few years ago with dotnet being available for Linux and quite a bit more open. While you still effectively need VS to work with Blazor (or suffer), there are many other options for typical web apps. Whether you want to go MVC or something more bare bones, it's definitely a good option.
As to why it's not a popular option: I would guess that proper Linux dotnet has not been out for long enough to really change the idea of what .net4 was/meant. This applies to both sides too - there's lots of old .net people still unreasonably allergic to open source. I've used it for server apps on Linux when Mono was still the only option and was happy with it already then. It's a good system - go for it.
https://learn.microsoft.com/en-us/aspnet/core/security/authe...
All cloud/paid solutions. At one point they were all in on open source but the tune quickly changed when they saw how much profit they were leaving on the table.
Correction: At one point they said they were all-in on open source - 10 minutes after creating an innovative new open source product called ".net core", which is exactly like .net, but with all of the features you might actually be interested in stripped out.
Nobody in my circle talks about .net because we all saw immediately that it was just the same act again, if somewhat less openly hostile than Microsoft's previous MO.
I haven't been very deep in the .net ecosystem but haven't had any issues implementing an api woth auth and rate limiting etc using dotnet and nothing Microsoft licensed.
It may not be any more, but to most people in the Linux world it just smells, and that's enough. It's like asking why people don't drink box wine. It's just not cool.
A non-proprietary example of this is systemd and Wayland that Red Hat seems to be pushing. They are not really that bad on their own, but I expect many important downstream applications will eventually require systemd and Wayland. Locking out the BSDs.
It's about the motives
"it's open source"
"it now works on linux"
it all doesn't matter if they'll go after your ass if you dare build tooling with their debugger (jetbrains)
or when they want to remove a feature overnight to make it exclusive to visual studio windows and behind a paywall
https://github.com/dotnet/sdk/issues/22247
it's this kind of things that makes it hard to recommend it to people, and Microsoft can't be trusted
That is why things can go very toxic. Windows is not suitable for use, there is no concept of privacy and MS has shown many times it doesn't respect users ownership.
MS has a leadership problem. It should have made clear internally that the free cross-platform developer tooling should cover everything for 98% of the developer community. They could keep diagramming and other enterprise features as a paid offering.
On the other hand: There is no competition for modern .net + Avalonia UI for fast and sleek native cross-platform desktop applications. Maybe Java + JavaFX, but I don't know enough about its current state.
For at least ten years now I don't know why anyone would work with Microsoft unless they had no other option.
I'm almost regretting picking .NET because you are then forever cursed with "bitch, you live like this?" whenever trying out something different (the short list of issues alternatives suffer from: terrible sdk management, terrible package management or just lack of thereof, poor performance, a lot of unneeded boilerplate, unsound language semantics, poor tooling, poor quality ORMs (the main reason people hate ORMs is they never tried EF Core), few properly supported target platforms, limited languages do not let you express concepts nicely, no low-level primitives to write efficient impl., etc etc.)
When switching to AWS, I got to experience CloudWatch, and my first reaction was WTF is this ****? (and once again when I saw the bills)
All of it is by choice only. You don't need to use ORM or any inheritance in your code. Whether IoC happens depends completely on how you write code, but the service model in .net is there if you want it. (And you should try if you haven't - it's really good) You can go as basic as you want and rawdog everything without frameworks/libraries.
Guess which one is the only one which is a totally pain in the ass to maintain... Yeah, that is C#. As soon as a version is deprecated, we need to scramble around to find out which next version is the minimal supported by all of our customers.
Already did a full migration to latest version once, and was a total pain... customers having to install the .net framework and not having the prerequisites, or installing any other software that conflicts.
Zero problems with any of the other techs. So yeah, now we are building those .net components in go so we can ditch .net for good.
This is a desktop application, so, sometimes we have little control on the end user machine, but, well, even when we coordinate with customers for an entire year, it is difficult to predict what microsoft will do with their prerequisites in the future.
Our software has been on the market for over 25 years so far, and we do see the same problem with other companies developing .net products, since they will usually conflict with us. Some customers just give up and have specific computers to run .net specific features, not the best solution but at least a solution.
https://learn.microsoft.com/en-us/dotnet/core/deploying/nati...
https://devblogs.microsoft.com/dotnet/testing-your-native-ao...
https://charliereese.ca/y-combinator-top-50-software-startup...
I have no affiliation with Y Combinator itself or the author of the post.
The particular analysis is pretty skewed in its own way, so you can take it with a pinch of salt.
As a general rule, programming languages have ecosystems and communities, and if you pick a language where quickly delivering high-value features to users/customers is part of the community, it helps your startup; you'll probably meet founders and get business advice if you go to a Ruby meetup, but less so at a C# one.
It's not the whole picture, since it doesn't speak to the technical part of your question.
There’s still a list at https://www.ycombinator.com/topcompanies, but it doesn’t show valuation and can only be sorted alphabetically or by batch.
Some of us remember Ballmer calling our freedom a “cancer.”
Trust is built slowly yet dashed quickly. There are so many respectful choices today. Little reason to pick the once abusive but rehabilitated.
This comment about MS caught with its hands in the cookie jar always makes me laugh: https://news.ycombinator.com/item?id=31727293
I can’t believe people carry water for an organization as souless as ms.
And while .NET is batteries included like Rails, I just don’t enjoy using it. The docs and frameworks aren’t written for nimble startups, but slow-moving enterprise companies. I know modern C# allows me to code like Ruby/Python/JS, but all the docs are written like 1990s Java. And the frameworks are designed that way too.
I think he meant that open source third party add-on packages for .NET were basically non-existent. Not .NET itself. Your "_almost_" qualification has me concerned. Over the decades I've almost been fooled many times by Microsoft's claims of being open and/or interoperable only to find out that it's "almost".
As usual, instead actual valid criticism (of something that is better than the alternatives no less), the strategy seems to be “just make up stuff”, keep at it.
do you plan to use another db than SQL Server? .net 'prefers' SQL Server.
do you plan to deploy with containers? .net is not container first
do you plan to deploy outside of Azure? .net examples are Azure first (and same with EntraID and so on)
as for Blazor, silverlight then the 10 others attempts at UI after that still makes us hesitate to commit fully to it.
>is not-Windows your dev environment?
Rider & VS Code.
>do you plan to use another db than SQL Server?
PostgreSQL and SQLite are working great.
>do you plan to deploy with containers?
Did you try .net 8.
>do you plan to deploy outside of Azure?
All big cloud providers have their own docs for .NET
Just that, by default, it is assumed you run windows e.g. https://learn.microsoft.com/en-us/dotnet/core/docker/build-c... windows first, linux alt. no macos
at the bottom, 'container tools for Visual Studio'
Take all the video from https://devblogs.microsoft.com/dotnet/learn-dotnet8-beginner... how many are not using Windows?
You can use .net elsewhere. Just that it is on you to 'fix' the difference when they happen.
it is ok. Others languages might have a windows-second bias.
It works well, React/TS frontend plus ASP.NET Core/C# backend.
Now if you're talking about tech startups/firms, then you'd more likely be part of the Linux/open-source and AWS subculture. Your tech choices are going to cluster around that.
But if you're in the non-tech enterprise world, you're in the Windows and Azure subculture. .NET is very prevalent. There are many solo and small teams that contract for non-tech companies that, let's face it are mostly Microsoft shops, that develop in .NET. Microsoft and Azure own almost a huge proportion of the non-tech (think retail, industrial, etc.) enterprise world.
I used to develop in .NET Core and ASP.NET core and found the tooling to be surprisingly good. The IDE (Visual Studio -- the full one, not VS Code) does a lot of work for you. It was easy to spin up a CRUD app -- just some point-and-clicks and modifying some boilerplate code.
However, if you were a web developer who likes to write code in VS Code and likes to work from the ground up, I can see why the above might not be your style.
Also Microsoft software -- despite being very open-source these days -- is still very much backed by a commercial entity, and most people don't have the mental bandwidth to parse out what's commercial and what's not. Take SQL Server for instance. There's a free limited version, but licensing the full version if big bucks. Whereas in the open-source world, Postgres and MySQL are free, as in really free. (the only free Microsoft product I use is VS Code -- and it is excellent)
Mariadb != MySQL... Same API, not the same product.
Like, I get that they’ve been on a bit of a charm offensive for the last decade, and they’re the happy shiny new Microsoft, and all that, but I’d be cautious, myself.
And it’s just, well, not that compelling. C# a slightly better Java, but really Kotlin already has that covered, and the JVM ecosystem is generally better.
If you want to use Visual Studio, run it in a VM, detach it from the network or let firewalld keep the beast down.
That way you will build something of higher quality than all the Python and electron crap that floods github.
Do you see the pattern? It's corporations with huge marketing budgets trying to sell you things. That's why it's talked about a lot?
It's not just the companies directly but the entire ecosystem including the VC market. They fund companies that make "managed" services or "open source" frameworks and encourage other startups they fund to use it.
> Is there still a lot of stigma around it?
That's 1 thing - the worst part are the rumors. To this date I still see posts where people claim that NodeJs is async and faster than C#/Java by a huge margin.
Microsoft has made great big strides to simplify .net web development, where a simple hello world rest api is not much different than its counterpart in expressjs on node.
.net is truly a wonderful platform, but it carries too much baggage.
Tooling is also a bit bloated.
Back when I was still young and impressionable, I had several frustrating experiences with it at university. Most due to my inexperience, a few times due to Windows being Windows. Also, back then the various $$ and time costs. IIRC $125+ for a windows DVD, $150+ for a VS.Net install DVD, and higher hosting prices for Windows. Also, installs and updates OS, .NET, etc were frequent and time consuming. When I'm making $2.50/hr + tips to get by I couldn't afford that kinda investment.
Now, most of my career has been using Linux, and a variety of interpreted languages. I'm comfortable with them. I boot my Windows partition maybe 2 times a year. There would be a huge cost for me to completely transition to .NET.
In order to get me to try it now would require you to show me some set of features that make it a much better choice than what I currently know. For example, if I someday choose to do Windows apps.
I don't know about that. HTMX is ultimately a lot of magic javascript hidden away from the devs. That's objectively worse than just knowing how to write a web page "for real".
Deployment and Cost: For solo projects, I do 1-click deploys to a load-balanced Azure App Service. I was using GitHub Actions for a while, but it was slow and I kept pushing up against the need for a paid plan. I keep things local.
Dotnet is dramatically more scalable than Rails or Django, which means much simpler infrastructure for a lot longer. Poor performance leads to the need for more complexity. More servers, caching, queueing, etc. Then you need things like docker and k8s to manage all that infrastructure. For me, I can scale up or out by changing a single flag, and entire apps are just single dotnet apps (aside from the DB), so there's no need for docker.
Batteries Included: My team that ran Rails was burned by the magic, repeatedly. Over the years, developers made decisions that turned into maintainability nightmares. With Python/Flask, the lack of structure was like a Wild West after several years of rotating contractors. In some of my older solo-dev work with Flask, it was nearly impossible to come back to because all the disparate dependencies wouldn't play nicely any longer. And in both Ruby and Python, the lack of static typing was also a source of inscrutability (so please use type annotations in your Ruby and Python projects - your future self will thank you).
As for why people don't use it more, I think it's largely due to "resume driven development". It's the same reason every startup thinks they need k8s or they need to be using React. That's not necessarily a bad thing. Choosing dotnet is definitely not going to lead to job opportunities in the startup world. But, in my opinion, any startup that chooses dotnet will have a competitive advantage over those that choose Rails, Node.js, or Python because of simplicity and maintainability.
As for the argument that "time to market is faster with rails or python", I disagree. The biggest factor will be using what you know. The second will be the complexity of your infrastructure, which will be much simpler on dotnet. Avoid analysis paralysis as much as possible.
Other folks may have very different opinions, but as someone who has worked on several major platforms, each for years at a time, I have found dotnet to be the best option. However, no choice will be perfect, and dotnet has many warts. My recommendation if you do choose dotnet, is to go with MVC + HTMX. It's not sexy, but it's stable and mature. I don't recommend Blazor, yet. I think it needs another version. Last note: I've never bought any third party libraries/controls to do anything in my dotnet projects.