Most active commenters
  • jiggawatts(8)
  • cyberax(8)
  • herbst(6)
  • mrcsharp(6)
  • majkinetor(5)
  • thefz(4)
  • tiahura(3)
  • whatevaa(3)

←back to thread

Microsoft Dependency Has Risks

(blog.miloslavhomer.cz)
176 points ArcHound | 100 comments | | HN request time: 2.5s | source | bottom
1. bob1029 ◴[] No.44382065[source]
The trick with Microsoft is to very carefully separate the good parts from the bad ones.

Labeling all of Microsoft as banned is really constraining your technology options. This is a gigantic organization with a very diverse set of people in it.

There aren't many things like .NET, MSSQL and Visual Studio out there. The debugger experience in VS is the holy grail if you have super nasty real world technology situations. There's a reason every AAA game engine depends on it in some way.

Azure and Windows are where things start to get bad with Microsoft.

replies(9): >>44382293 #>>44382372 #>>44382784 #>>44383037 #>>44383467 #>>44385139 #>>44385191 #>>44385341 #>>44385567 #
2. gerdesj ◴[] No.44382293[source]
"There aren't many things like .NET, MSSQL and Visual Studio out there. The debugger experience in VS is the holy grail if you have super nasty real world technology situations. There's a reason every AAA game engine depends on it in some way."

I'm not interested in AAA games engines writing and nor is most of the world. If that is it, then you have damned MS with (very) faint praise.

replies(5): >>44382385 #>>44382410 #>>44383208 #>>44384422 #>>44402675 #
3. nordsieck ◴[] No.44382372[source]
> There aren't many things like .NET, MSSQL and Visual Studio out there. The debugger experience in VS is the holy grail if you have super nasty real world technology situations. There's a reason every AAA game engine depends on it in some way.

The reason all the AAA games are on it is because they're on the Windows platform, and more importantly their customers are on the Windows platform.

If 95% of gamers ran MacOS instead of Windows, you'd see a very different tech stack among game developers.

replies(3): >>44382863 #>>44384433 #>>44402647 #
4. privatelypublic ◴[] No.44382385[source]
I think you misunderstand- game engines are complex beasts and visual studio and/or .Net (in any of its incarnations) have the best debugging workflow I've seen.

Typescript is also Microsoft. So is ONNX.

replies(3): >>44382551 #>>44384967 #>>44387382 #
5. jiggawatts ◴[] No.44382410[source]
To paint a picture: I’ve worked with Microsoft technologies almost exclusively for decades but recently I was forced to pick up some Node.js, Docker, and Linux tooling for a specific app.

I can’t express in words what a giant step backwards it is from ASP.NET and Visual Studio. It’s like bashing things with open source rocks after working in a rocket manufacturing facility festooned with Kuka robots.

It’s just… end-to-end bad. Everything from critical dependencies developed by one Russian kid that’s now getting shot at in Ukraine so “maintenance is paused” to everything being wired up with shell scripts that have fifty variants, no standards, and none of them work. I’ve spent more time just getting the builds and deployments to work (to an acceptable standard) for Node.js than I’ve spent developing entire .NET applications! [1]

I have had similar experiences every few years for decades. I touched PHP once and recoiled in horror. I tried to get a stable build going for some Python ML packages and learnt that they have a half-life measured in days or hours after which they become impossible to reproduce. Etc…

Keep on assuming “Microsoft is all bad” if you like. You’re tying both hands behind your back and poking the keyboard with your nose.

PS: The dotnet SDK is open source and works fine on Linux, and the IntelliJ Rider IDE is generally very good and cross-platform. You're not forced to use Windows.

[1] The effort required to get a NestJS app to have barely acceptable performance is significantly greater than the effort to rewrite it in .NET 9 which will immediately be faster and have a far bigger bag of performance tuning tools and technologies available if needed.

replies(4): >>44382506 #>>44382561 #>>44384745 #>>44384883 #
6. cyberax ◴[] No.44382506{3}[source]
I tried developing an MS .NET app and it's indescribably bad. The deployment story is non-existent, monitoring, tracing, alarming is barely there. You have to work with MS libraries that are on life-support with glaring bugs still present.
replies(3): >>44382601 #>>44385368 #>>44385426 #
7. gerdesj ◴[] No.44382551{3}[source]
"I think you misunderstand- game engines are complex beasts and visual studio and/or .Net (in any of its incarnations) have the best debugging workflow I've seen."

I think you misunderstand: the market, ie the number of people who actually care about developing game engines, is tiny.

How many games developers do you know as a subset of the people you know of?

OP only managed to find a niche product area for MS to shine in and maintain traction - the moat thing. Nothing else apparently.

I for one would not miss MS one jot. I wasted so much time with things like autoexec.bat and config.sys back in the day. I got good at it - Novell gave me a T shirt on Cool Solutions for a boot floppy image that managed to try several popular NIC drivers (3c595, 3c905, 3c509, ne1000 and a few others) and get you to a network connection for imaging or whatever. Later on I get to ignore SFC /SCANNOW answers to searches. Do you remember WINS? What about the horror of time sync? The PDC emulator FSMO role is basically a NT domain controller. AD was a bodge from day one, tacked onto ...

Sorry, got carried away there.

Again, Typescript is cared about by whom and what on earth is ONNX?

replies(4): >>44382643 #>>44384493 #>>44384499 #>>44385394 #
8. th0ma5 ◴[] No.44382561{3}[source]
I have a lot of respect for organizations that get a lot done with Microsoft technologies. I think your perspective could be thought of as the benefits of vertical integration and vendor lock in. These do help people get things done!

In the academic and open source world those things are fought against because you don't want to be at the mercy of the software developer in the context of certain rights.

I think for every negative you mention on either side a positive could be found on either side. And like many things on the net, you're not wrong but not necessarily talking about the same kinds of things.

My remaining complaints about Microsoft are the inflexibility of their solutions that command abstractions that just don't work for many organizations, and the general viral nature of software sales in general of which they are one of many with similar issues, however Oracle is the worst of course.

replies(1): >>44382713 #
9. jiggawatts ◴[] No.44382601{4}[source]
Unless you found yourself in some bizarre dark corner of a huge ecosystem of products, that's just not true.

Deployments are just "file copy". You don't even need Docker, because Windows isn't Linux, it has stable user-land APIs so apps are portable.

Not to mention that the dotnet sdk can create container images directly without even needing Docker installed: https://learn.microsoft.com/en-us/dotnet/core/containers/sdk...

There are pre-built Linux and Windows ASP.NET base docker images: https://learn.microsoft.com/en-us/aspnet/core/host-and-deplo...

Visual Studio's ASP.NET templates all have a literal checkbox for "Docker support" which is all it takes to have a hot-reload debugging/editing experience.

The dotnet runtime has very good Docker support, including automatic memory usage tuning to prevent it getting killed by Kubernetes or whatever.

The underlying "App Host" below ASP.NET has fantastic support for layered configuration, which by default supports environment variables, command line parameters, named environment configuration files, and "user secrets" in IDEs. All of it is strongly typed and supports runtime refresh instead of Linux style "restart the process and interrupt user file uploads to get a new config". There's plugins for Key Vault, AWS KMS, App Configuration, feature flags, and on-and-on.

Open Telemetry is fully supported and now the default: https://learn.microsoft.com/en-us/dotnet/core/diagnostics/ob...

Everything in ASP.NET uses the standard built-in ILogger interface, so wiring up any kind of audit logging or custom observability is a piece of cake: https://learn.microsoft.com/en-us/dotnet/api/microsoft.exten...

The really fancy logging uses the high-performance ActivitySource APIs, which are used for lower-level tracing of dependencies and the like. Again, these are standardised throughout not just Microsoft libraries but most third-party packages too: https://learn.microsoft.com/en-us/dotnet/api/system.diagnost...

Aspire.NET can orchestrate multiple cloud emulators, multiple apps, Node.js front-end apps, and wire up the whole thing with Open Telemetry and a free local trace viewer (with span support) with zero config: https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals...

Windows GUI App deployments use standardised installer packages (MSI) that have simple devops pipeline tooling: https://github.com/wixtoolset Now... name the one package format that you can use to distribute client apps to all Linux distros!

When you run "dotnet build", the result is built, unlike Node.js where you end up with 150K tiny little files that need to be rebuilt again "in production" because oh-my-god it's a scripting language with C code blended in randomly, so it doesn't... actually... build. I just had the fun of trying to figure out why PM2 doesn't like musl or running under non-root user accounts, why starting a Node.js app takes frigging minutes whereas ASP.NET starts in milliseconds, and on and on.

replies(3): >>44384289 #>>44385925 #>>44387988 #
10. AppleBananaPie ◴[] No.44382643{4}[source]
A game engine is often an example of a 'complex beast'.

No one is arguing that developing game engines specifically is common.

replies(1): >>44383201 #
11. jiggawatts ◴[] No.44382713{4}[source]
Perfectly valid points. I've worked in academia, and their insistence on non-Microsoft technologies was helpful in certain fields where openness and long-term reproducibility is critical.

The downside is that this produces a microcosm of obscure technologies that can have... strange effects on industry. Some FAANG-like companies have a habit of hiring only recent graduates, so their entire staff is convinced that what they saw at their University is how everybody else does things.

It leads to Silicon Valley clique that has a fantastically distorted perspective of the rest of the world.

Some comments I've seen here on HN are downright hilarious to anyone from the "rest of the world", such as:

"Does anyone still use Windows Server!?" -- yes, at least 60% of all deployed servers world wide, and over 80% in many industries.

"Supports all popular directory servers such as OpenLDAP, ApacheDS, Kopano, ..." -- hello!? Active Directory! Have you heard of it!? It's something like 95% of all deployed LDAP deployments no matter how you count it! The other 5% is Oracle Directory and/or Novell eDirectory and then all of the rest put together is a rounding error.

replies(1): >>44386203 #
12. iimblack ◴[] No.44382784[source]
How do you separate the good from the bad? What do you do when Microsoft changes the good things into bad things?

My take is that Microsoft consistently makes bad things and makes "good" things into "bad" things; so, I don't have much expectation or faith that anything that I currently think is "good" will stay that way.

replies(2): >>44384957 #>>44385941 #
13. Spooky23 ◴[] No.44382863[source]
Everything feeds everything else. If Apple had a stack and a business model that worked for game developers, you’d see a different stack.

Microsoft is where it is because they are viciously competitive at different layers of the stack. Apple wants a piece of every nickel, Microsoft wants a piece of every computer. They license windows for every Mac user in a company.

14. duped ◴[] No.44383037[source]
Microsoft, for all their warts, has the absolute best documentation for every public API in Windows. I'd go so far as to say it's better on average than manpages in Linux and BSD and light years better than the actively hostile bullshit from Apple.

Submitting a bug report though, you gotta know people or know where to ask.

replies(4): >>44383132 #>>44384046 #>>44386037 #>>44387986 #
15. viraptor ◴[] No.44383132[source]
It really depends how far you go. The basics - they're pretty good. But for the more complicated things they just ignore all context and pretty much restate the names of functions/arguments without explaining how/why things work. See for example https://learn.microsoft.com/en-us/windows/win32/api/tsvirtua... and https://learn.microsoft.com/en-us/windows/win32/api/tsvirtua... What does the terminal services renderer do? "It renders bitmaps you dummy, just look at those arguments!"
replies(1): >>44385056 #
16. privatelypublic ◴[] No.44383201{5}[source]
Thanks for trying to expound on my expounding on the original. But, the response indicates they don't know and actively avoid learning. Thus, nothing would change their mind.

PS: to throw some shade- I'm surprised they didn't (mis)spell it M$- after all everything they mentioned is making me nostalgic for phpBB based tech forums in 2004.

17. mamcx ◴[] No.44383208[source]
Well. this is clearly just a example of a hard problem where MS tools are good for.

The MOST common developer that work on MS stack is in business apps and web, data, integration stuff.

There is much better fit for MS and there is NO good counterpart in OSX or Linux.

One of the major shocks I get when starting to work on OSX is how much less developed EVERYTHING is outside the ms stack.

The only good reason you have a life working in OSX and less in Linux is because the web lower the playing field.

But if this were a contest of "native" vs "native" is clear MS stack is ahead.

(Much more before, because of course the web change the equation so you can claim things FOR THE WEB are better on linux and even osx)

18. briHass ◴[] No.44383467[source]
Azure has some things about it that I don't like (compared to AWS), but it wins over AWS for Azure App Services. Essentially, IIS (webserver) as a service (PaaS), with autoscaling, auto-deployment, hot swap slots, auto-recovery, backups, etc. At it's core, it's basically a managed Docker container (either Windows or Linux) with IIS, so you can customize it quite a bit like a familiar VM, but unlike a VM, updates and security is all managed for you.

Beanstalk is a joke compared to AAS, and I'm more than happy to stay far away from Docker/K8s until that complexity is actually required, which it usually isn't until an entire department handles your K8s clusters/EKS.

19. userbinator ◴[] No.44384046[source]
The old documentation was the best. The new stuff is a mix of barely acceptable and absolute crap, and some of it is even AI-generated. Here's a recent funny:

https://learn.microsoft.com/en-us/windows-hardware/drivers/u...

"The characteristics of the endpoint determine the size of each packet is fixed and determined by the characteristics of the endpoint."

20. majkinetor ◴[] No.44384289{5}[source]
All that, and finally, PowerShell, literary light years ahead of everything Linux has to offer. I have PTSD from bash and friends. It is so good, that I rarely even write C# nowadays for most of the critical government stuff and simply run smallish scripts as services, and change them on the server when intervention is needed in notepad, in a couple of minutes, while my colleagues still worm up their full-blown Visual Studio.

I love it like it is the hottest wife that have a great job, do the dishes and cooks like a grandma (I am bad at this :))

replies(2): >>44384638 #>>44385441 #
21. thefz ◴[] No.44384422[source]
Bah, leaving out .NET like this is ignorance, considering the amount of custom applications every company has written on it.

RAD was a game changer and I think you don't know the extent and penetration of .NET in the enterprise

22. thefz ◴[] No.44384433[source]
Game customers are on Windows because DirectX has been superior to OpenGL - development wise - for what, 30 years?
replies(4): >>44384706 #>>44384884 #>>44385032 #>>44395225 #
23. giancarlostoro ◴[] No.44384493{4}[source]
ONNX is a format that allows you to run AI models without Python in any language that implements ONNX, there's even an ONNX implementation in Go, meaning you can churn out even more performance out of AI models and waste drastically less resources (Go, Rust, C++, Zig, C, D etc could be used to squeeze performance). Think of it how Java produces a JAR file, well an ONNX file is a file that could be run by any runtime built for it. Another reasonable analogy would be WebAssembly, but to a degree.
24. boolit ◴[] No.44384499{4}[source]
Typescript is used by web developers over the world and ONNX for deploying deep neural networks. Two huge markets.
25. bluefirebrand ◴[] No.44384638{6}[source]
> change them on the server when intervention is needed in notepad

How is this any different than a Linux setup where you can just ssh into a box and edit your scripts in the shell using something like nano or vim if you're into that sort of thing?

replies(1): >>44385607 #
26. dismalaf ◴[] No.44384706{3}[source]
No, they're on Windows because it was the only viable gaming desktop environment during the 90's and 00's. Apple was all but dead and hardware was limited, Linux was in its infancy, Unix vendors didn't care about normal desktop users, etc...

In the early days of 3D gaming, there were studios that used OpenGL over DirectX on Windows. ID Software were the best known example of choosing OpenGL over DirectX.

replies(1): >>44384861 #
27. dismalaf ◴[] No.44384745{3}[source]
Everything you describe has more to do with the state of JavaScript development than MS vs. Linux tooling.

I wouldn't touch .NET for ideological reasons (and fear of a rug pull) but I also wouldn't touch any server side JS because I value my sanity.

28. thefz ◴[] No.44384861{4}[source]
Of course excellent OpenGL products exist (ID software is the worst example because they were... geniuses), but from the developer point of view, DirectX was the full package.
29. m_st ◴[] No.44384883{3}[source]
Thanks for writing this. I couldn't agree any more. We've worked with .NET for decades and it really just works or lets you debug easily. Then we've started working on projects with Angular, React and Docker and it's just a nightmare to get a stable version.
replies(2): >>44385401 #>>44387028 #
30. h4ck_th3_pl4n3t ◴[] No.44384884{3}[source]
> OpenGL

OpenGL is legacy tech, just as DirectX

Vulkan is the new shader thing, and has been for at least a decade by now.

replies(2): >>44384912 #>>44385505 #
31. thefz ◴[] No.44384912{4}[source]
> has been

I was talking about the past.

32. mrweasel ◴[] No.44384957[source]
> How do you separate the good from the bad?

Developer tools and enterprise stuff good (mostly). Consumer products bad.

replies(2): >>44385354 #>>44386920 #
33. ruszki ◴[] No.44384967{3}[source]
What makes it better than say IntelliJ? Is there some feature which helps you more with debugging?
replies(1): >>44385350 #
34. kookamamie ◴[] No.44385032{3}[source]
Yes, that's the essential reason. Even though that barrier has been lifted with Vulkan matching DX12 in many ways, the accumulated mass moves slowly.
replies(1): >>44385172 #
35. pimeys ◴[] No.44385056{3}[source]
Some of the advanced stuff has great docs. E.g. SQL Server and its wire protocol. When you need to write client to a language that doesn't have one, the TDS doc from Microsoft is amazing. Compare that to e.g. Oracle and you know what I mean.

In general SQL Server is such a great product. If you cannot choose PostgreSQL for some reason, make sure your buying manager plays golf with the Microsoft sales people, not with Oracle.

36. zdragnar ◴[] No.44385139[source]
Setting aside the debugger, visual studio has to be the worst IDE I've used. There are so many rough edges it is astounding.

On an ancient project, among other things I've been editing JavaScript code both in js files and inline script tags in aspx files. The indentation auto-formatting appears to choose new levels of indentation using a random number generator.

You can't add a new file to the project while it is running, or even create a file through the context menu, but it can detect when the files have changed externally and recommend restarting the project.

There's a thousand little things, but the indentation auto-formatting abomination is a constant burr under my saddle.

37. jofzar ◴[] No.44385172{4}[source]
Has there been a game where vulkan performance has been better then dx12? Whenever they are side by side vulkan always performs worse in my experience.
replies(2): >>44385218 #>>44387505 #
38. msgodel ◴[] No.44385191[source]
If you're not doing C++ gdb is pretty good, most people just don't know how to use it.
replies(2): >>44385358 #>>44402680 #
39. kookamamie ◴[] No.44385218{5}[source]
There have been cases like that, e.g., RDR2, but I think it mostly comes down to implementation quality.
40. windward ◴[] No.44385341[source]
This isn't a coincidence. Microsoft have spent a lot of money, including billions in acquisitions, to maintain some positive developer mindshare.
41. dagw ◴[] No.44385350{4}[source]
It's been a few years since I've used Visual Studio, but for longest time its support for debugging multithreaded and GPU code was unmatched. This is one of the main reasons game developers loved VS. It also had good support for mixed language debugging which is very useful when your C# code calls a C++ library for example.
42. herbst ◴[] No.44385354{3}[source]
For whom? Microsoft?

I don't know which of their developer tools I would consider good. Or less worse than the competition

replies(2): >>44385514 #>>44393676 #
43. windward ◴[] No.44385358[source]
Maybe it's baby duck syndrome, but I've gone out of my way to use gdb over VS's debugger. A simple .gdbinit has more expressive scripting power than a GUI can ever allow.
44. herbst ◴[] No.44385368{4}[source]
I feel you. Having done sane programming before I tried it all the .NET stuff didn't feel right. Like they made Java even more ugly and brought nothing new to the table that works outside of their weird ecosystem. (At least that was the state 10-15 years ago, coding .NET on/for Linux)
replies(1): >>44385547 #
45. ◴[] No.44385394{4}[source]
46. jiggawatts ◴[] No.44385401{4}[source]
There was a study comparing the “half life” of code in different codebases as a measure of “churn”. Linux unsurprisingly is pretty stable. Meanwhile Angular is the worst with code lasting just months before it’s rewritten. Then again months later. And again. And again.

This is why it has so many breaking changes.

47. mrcsharp ◴[] No.44385426{4}[source]
> The deployment story is non-existent

Wrong! it is as simple as executing `dotnet publish`, zipping up the output folder and sending that package somewhere using whichever protocol and shell utility you like.

> monitoring, tracing, alarming is barely there

Also wrong. OpenTelemetry is fully supported by first-class packages and the dotnet runtime itself exposes a lot of counters. There are a lot of tools to monitor and collect traces of running dotnet processes [1]

> You have to work with MS libraries that are on life-support with glaring bugs still present

You don't have to. Every Microsoft.* library follows strict semantic versioning and is clearly labeled when it is deprecated. If you don't have a plan in place on how to manage your dependencies then this is on you.

[1] https://learn.microsoft.com/en-us/dotnet/core/diagnostics/to...

replies(1): >>44388032 #
48. mrcsharp ◴[] No.44385441{6}[source]
And now there is going to be support for `dotnet run app.cs` which, in my opinion, will replace most of my powershell scripts.
replies(1): >>44385601 #
49. z3phyr ◴[] No.44385505{4}[source]
DirectX12 is still much better to use than Vulkan.

Natively supports Xbox and PC. Can run on Linux with Proton. The Playstation API functionally resembles DX12.

Vulkan is extension management hell (but has gotten much better, I concede)

replies(1): >>44393644 #
50. mrweasel ◴[] No.44385514{4}[source]
I consider C# / .NET to be one of the best options for application development.

Many would consider both VSCode and Visual Code pretty good. There might be better alternatives, but generally I'd say they are more good then bad. Github is also a good product. Maybe not exactly a develop tool, but Power BI is also fairly good.

Borderline developer / enterprise solution: SQLServer is great to work with. Maybe not the best relational database server, but it's every bit as capable as MariaDB and I'd prefer it over Oracle.

replies(1): >>44394323 #
51. jiggawatts ◴[] No.44385547{5}[source]
It’s wildly different now.

The first release that would run at all on Linux was 9 years ago and was essential a beta or maybe just a proof of concept.

The current .NET 9 version has trivialised my development projects to the point that I feel bad for taking the customer’s money.

The only problem I’ve had with .NET is that it doesn’t have the same breadth of third party libraries that Java has. If you need something really obscure it either exists in Java or nowhere else.

replies(1): >>44385786 #
52. majkinetor ◴[] No.44385601{7}[source]
Yeah, that is a new thing, but honestly it existed a way back, its just that it is now officially supported.

But you are missing a point here. It's about the language, ecosystem and practicality. In shell, you need correct abstraction that lets you work in fast and efficient way and lets you interact fast when debug is needed. What is done using c# in 10 lines can be done in a single line in pwsh. In my book, lower amount of code, ideally no code, is the most important aspect of the development. Majority of things are not constrained by the performance, so pwsh is usually a good fit.

People used ruby, python etc. for infrastructure development long time ago and it was/is akward.

replies(1): >>44386931 #
53. majkinetor ◴[] No.44385607{7}[source]
It's not different. I am not talking about method, I talk about the language and ecosystem. Package manager for scripts? Yeah. Standardized names and params? Fuck yeah. Drop to dotNet on funky corners? Shut up and take my money.

Put pwsh on linux (I do, in all of them) and I will use ssh and vim no problem.

54. herbst ◴[] No.44385786{6}[source]
That sounds magical. What makes it so superior tho? You mean in terms of ready made libraries doing the heavy lifting? If so would nodejs or rails not be even easier?

Or do you mean specific on desktop applications? I have no idea about that field

replies(1): >>44386179 #
55. guappa ◴[] No.44385925{5}[source]
> Deployments are just "file copy".

Ah yes how the "works on my machine" meme started!

56. graemep ◴[] No.44385941[source]
Services are bad - that is what the first part of the story is about.

However I do not think it is different for any online service. Any American company would have to cut off services to an individual (or organisation) subject to sanctions (the main example given). The same might apply to other countries for various reasons. There are various reasons a service might fail, or cut off a particular customer (lots of reasons, lots of examples in previous HN discussion).

What has changed is that the typical MS customer is a lot more dependent on MS services - MS 365, Python in Excel ONLY works in the cloud, people used hosted email instead of their own Exchange installation...... That means MS cutting off a customer would mean all their IT would cease working. They can just shut down any organisation with that level of dependency if they are ordered to, or decide to, do so.

57. dspillett ◴[] No.44386037[source]
> Microsoft, for all their warts, has the absolute best documentation for every public API in Windows.

That is true in some areas of MS's output, but far from all. Some of their documentation is concise but understandable, complete, and up-to-date. Some of it is auto-generated garbage that is only of use if you already know what you are doing and looking for a remainder of a detail.

Some of it is absolutely awful, I've run into numerous issues with Azure related documentation. This is in part because that side of things is rapidly evolving, but sometimes the new information isn't even there, and sometimes it is faff to identify it from information about the previous couple of iterations that are now deprecated. One recent example: installing some of their SQL Server and Azure storage access tooling on the latest Ubuntu LTS release (24.04, now over a year old). The repos are there, maintained, and supported, but the documentation doesn't mention anything beyond 22.04. Yes it is easy to work out what to change, mostly just substitute 24.04 for 22.04, but the docs should be updated. Also, instructions from different documents, all from MS, put their public keys for package signing in different places, which can cause confusion (not an issue for someone like me familiar with apt & related tooling, but I can imagine it being very frustrating to someone less experienced with those parts).

replies(1): >>44387315 #
58. jiggawatts ◴[] No.44386179{7}[source]
ASP.NET Just Works and has Batteries Included.

As an example, just over the last few days, I hit all of these common issues with Node.js apps (that don't happen with ASP.NET):

1) Node apps are typically a "transpiled language on a language" because JavaScript is unusable for large-scale software development so everyone uses TypeScript compiled to JavaScript instead. But this is a hack! A clever, useful hack, but a hack nonetheless. You can't go two steps without finding the rough edges, such as "any" everywhere or the use of "monkeypatching" which makes static analysis impossible for either tools or humans. (This reminds me of the earliest days of C++ where compilers like Cfront transpiled C++ to C.)

2) It's single-threaded! Sure, this is simpler, right up until it's not. It means you need about one process per core. Which means that on typical hardware you get a max of 4-8 GB of memory per process, because that's what most hardware has per core. This means in-memory caching is generally too inefficient. (I finally understand why Redis is so popular!)

2b) Okay, let's take a look at Redis! What do you mean it doesn't properly support multiple databases per cluster!? It's single threaded too!? Wat!? Is this a database for children?

3) It takes minutes to start! I hope you never have an emergency update that needs to go out right now!. ASP.NET takes seconds at most. This is largely because it's precompiled and ships as a small number of large binary files instead of millions (literally!) of tiny files that are very slow on almost all server-grade storage. There's now ahead-of-time (AoT) compilation modes for ASP.NET that make it comparable to C++, Rust, or Go in startup performance!

4) I'm sure Node people have heard of certificates and HTTPS, but I'm fairly certain they think it's a fad and it'll just "go away" eventually.

5) NPM libraries are under constant churn. Just updating packages requires minutes of 100% computer power to resolve the dependency graph logic... which has changed. In a breaking way. Either way, it can be mathematically impossible to disentangle the mess before the heat death of the universe. I'm not kidding! It's possible to get into a situation where "error: timed out" doesn't quite do it justice.

6) In .NET land there's basically only two ORMs used: Entity Framework from Microsoft and Dapper from StackOverflow. They work fine. Someone at $dayjob picked "typeorm" for Node. Is it the best? Who knows! There's dozens to pick from! None of them work properly, of course. I do know that typeorm doesn't allow me to pick my own database driver. Why? Because they're too busy, according to the GitHub issue tickets. Entity Framework uses a pluggable interface with dozens of well-supported implementations. This is because the entire platform, all of its database support, and the ORM on top were written by one vendor in a coordinated way and is pluggable via interfaces in the standard library instead of a hodge-podge of random code thrown together by literal children. [2]

Etc, etc...

[1] Under-funded is the more generous reason.

[2] A very significant portion of NPM packages were written by people under the age of 18. This is either commendable or horrifying depending on your perspective. It's hard to prove though, because contributions are effectively anonymous.

replies(2): >>44386721 #>>44409418 #
59. ArcHound ◴[] No.44386203{5}[source]
I agree with this, I see the AD as critical. Do you please have a source for these numbers? Would love to include it in the article.
60. herbst ◴[] No.44386721{8}[source]
That's really an insightful answer I enjoyed reading. Really brings me back!

I dislike nodejs for the same reasons. But do get the feeling that rust and go, maybe even something more exotic like elixir would be good alternatives as well for your use case.

I have barely anything to compare to your requirements tho. I personally would get panic attacks and couldn't sleep anymore if my dependencies aren't open source and I would depend on a company for any reason. But that's just me, it definitely sounds very mature

replies(1): >>44394944 #
61. tiahura ◴[] No.44386920{3}[source]
MS office is 30 years ahead of open office.
replies(1): >>44389169 #
62. mrcsharp ◴[] No.44386931{8}[source]
> What is done using c# in 10 lines can be done in a single line in pwsh

Mostly, yes. The problem is that the moment I need something more than what a single cmdlet or bash utility can provide, now I have to use an awkward looking scripting language (bash is the worst offender here). Almost every time I found myself having to write a somewhat long script file, I wish I could just do it with a C like language instead.

For simpler tasks, I fully agree. It is better to use something immediately available like an OS shell utility over coding one myself.

replies(1): >>44388523 #
63. jsiepkes ◴[] No.44387028{4}[source]
Comparing .Net to Angular and Docker is comparing apples to oranges.

Now if you moved from .Net to say Linux and the Java ecosystem (Maven, Intellij, etc.) that would be something you can compare.

64. duped ◴[] No.44387315{3}[source]
That's why I said "windows" and not "microsoft." Azure is a dumpster fire.
65. OrderlyTiamat ◴[] No.44387382{3}[source]
So are LSPs- which by now are everywhere, they're a huge leap forward over previous implementations in (n)vim and emacs imho.
66. Arch-TK ◴[] No.44387505{5}[source]
If games run faster on linux with DX12 translated to Vulkan than they do on identical hardware running on Windows 11 then I can't imagine a particularly big performance difference.
67. xigoi ◴[] No.44387986[source]
This is peak documentation:

https://learn.microsoft.com/en-us/dotnet/api/microsoft.offic...

68. cyberax ◴[] No.44387988{5}[source]
> with C code blended in randomly

And now add a small Python neural network to a .NET app. Just to do some mild AI stuff. Go on, I'll wait.

Oh, and I forgot: don't forget about data migrations. It's a freaking disaster in .NET deployments. Apparently, the best practice is to apply them manually?

replies(1): >>44390411 #
69. cyberax ◴[] No.44388032{5}[source]
> Wrong! it is as simple as executing `dotnet publish`

Yeah. And now add a C/C++ component there. Or maybe a neural network in Python?

In my case, it was a ray tracer that used a GPU.

"Just zip it", yea sure.

replies(1): >>44392455 #
70. majkinetor ◴[] No.44388523{9}[source]
There are many simple tasks in a typical multiyear project. Most of my scripts are between 100 and 1000 lines of code.

Example: https://github.com/majkinetor/SSImport

That script made noticeable difference in speed, quality and pleasure on our recent project (production tests on payment gateway for half of the country) as before I wrote it, devs did it by hand which took 10s of minutes every day with awkward tools (if they made an error, even more) and they complained about the chore. The script literarry replaces entire feature of the Sql Server Management Studio and I did it during the weekend.

Regarding syntax, not sure why would you consider that awkward. IMO, it can't be easier to read in any language, both configuration and code.

replies(2): >>44391135 #>>44392440 #
71. blibble ◴[] No.44389169{4}[source]
did you get those the wrong way round?

office 95 (without the ribbon) is more usable than office 365 (with the ribbon)

replies(1): >>44389342 #
72. tiahura ◴[] No.44389342{5}[source]
no. the ribbon is fully customizable with greater functionality than traditional menu.
replies(1): >>44390021 #
73. blibble ◴[] No.44390021{6}[source]
> the ribbon is fully customizable

so was the one in office 95

> with greater functionality than traditional menu

you click a button and something happens?

except now the button isn't in a consistent place

a usability regression

replies(1): >>44390346 #
74. tiahura ◴[] No.44390346{7}[source]
Wrong about "inconsistent", the ribbon follows predictable patterns. Home tab always has basic formatting, Insert always has objects/media, etc. What changed is intelligent positioning based on context.

Office 95's menus were consistent in the worst way - consistently buried everything under nested submenus. Finding mail merge meant File→Tools→Mail Merge→Options→Setup. Now it's Mailings tab, right there.

replies(1): >>44396022 #
75. jongalloway2 ◴[] No.44390411{6}[source]
CSnakes integrates Python into .NET apps - https://tonybaloney.github.io/CSnakes/

https://www.youtube.com/watch?v=DqoxHNH9Iwo shows adding an LLM

There are several ways to manage migrations depending on the team structure and dev practices: SQL scripts, command line, bundles (single-file executables), and in-app. The team recommends SQL scripts since they can be reviewed, tuned, and managed by a DBA but take your pick. https://learn.microsoft.com/ef/core/managing-schemas/migrati...

replies(1): >>44390460 #
76. cyberax ◴[] No.44390460{7}[source]
And how do you _build_ it? "It works on my machine", yeah? "Just copy it", ya?
replies(1): >>44390935 #
77. jongalloway2 ◴[] No.44390935{8}[source]
dotnet build

https://tonybaloney.github.io/CSnakes/getting-started/#build...

What's with the "just copy it" thing? Nobody does that, we use NuGet packages, GitHub Actions, SDK supported containers, reproducible cross-platform builds from command line, etc.

edit: I'm sure some people use file/copy, but you sure don't have to. That stopped being a common thing 10+ years ago with cross-platform .NET.

replies(1): >>44392704 #
78. whoknowsidont ◴[] No.44391135{10}[source]
Your github link 404's, FYI.
replies(1): >>44391728 #
79. majkinetor ◴[] No.44391728{11}[source]
Sorry, was private repo, now its public.
80. mrcsharp ◴[] No.44392440{10}[source]
I think we are talking a bit past each other here. I don't contest the benefit of writing small helper utilities.

> Regarding syntax, not sure why would you consider that awkward

This is more true with Bash than Powershell. However, this is the same with programming languages in general. There are those who look at Julia's syntax and think it's absolutely beautiful and those who consider it to be absolutely bad and prefer Visual Basic.

81. mrcsharp ◴[] No.44392455{6}[source]
> Yeah. And now add a C/C++ component there. Or maybe a neural network in Python?

How do you compile and package those components up? Answer that and you have your answer for this scenario.

>"Just zip it", yea sure.

I don't understand this. You can zip it. You can XCopy it. You can RSync it. Doesn't matter. What's your objection to that statement?

replies(1): >>44392693 #
82. cyberax ◴[] No.44392693{7}[source]
> How do you compile and package those components up? Answer that and you have your answer for this scenario.

I have a Dockerfile that contains the build instructions? How would I do that with MSVS?

> I don't understand this. You can zip it.

Yes, and then my Linux machine that runs the server will happily run a Windows application. With all the dependencies, including the GPU toolkits.

But even if we stay _within_ the MS ecosystem, the "just copy it" deployment doesn't cover everything. E.g. it can't change the settings of the "App Service Logs" from within the app itself. Of course you can also use Terraform for the infra, but at this point you're way off the "just copy a folder".

MSVS also supports containers, but if you do that it just becomes a UI for their configuration, not really any different from JetBrains.

replies(1): >>44393228 #
83. cyberax ◴[] No.44392704{9}[source]
Nope. Try again.

> Nobody does that

Read the parent post.

> we use NuGet packages, GitHub Actions, SDK supported containers, reproducible cross-platform builds from command line, etc.

So basically, "NPM but different". Got it.

replies(1): >>44395410 #
84. mrcsharp ◴[] No.44393228{8}[source]
> I have a Dockerfile that contains the build instructions

So what's stopping you from doing this with dotnet? Going by your logic, no other programming language reaches your ideal "deployment story" the moment you reach for docker.

> Yes, and then my Linux machine that runs the server will happily run a Windows application. With all the dependencies, including the GPU toolkits.

Dotnet is cross platform. If you are targeting Linux then you can give that information using `dotnet build --os linux` and nuget packages that have platform-specific binaries would then supply the build with the correct binary.

> But even if we stay _within_ the MS ecosystem, the "just copy it" deployment doesn't cover everything. E.g. it can't change the settings of the "App Service Logs" from within the app itself. Of course you can also use Terraform for the infra, but at this point you're way off the "just copy a folder".

That's because it is not the job of any programming language compiler to make changes to cloud infrastructure. You know single responsibility and all that.

replies(1): >>44409374 #
85. queenkjuul ◴[] No.44393644{5}[source]
Forgive me for being an idiot but i was under the impression dx12 was closer to vulkan architecturally which makes it easier to port to Linux display drivers (and thus why it has)
86. queenkjuul ◴[] No.44393676{4}[source]
Only from personal experience: people in the Microsoft ecosystem absolutely love visual studio, and hate the idea of migrating
87. Lio ◴[] No.44394323{5}[source]
Github was a great service well before Microsoft bought it.

The best thing about Microsoft’s stewardship has been that they haven’t fucked that up.

replies(1): >>44394855 #
88. herbst ◴[] No.44394855{6}[source]
Before Microsoft bought it you could still search it / codesbases without making an account. Alone for that additional pain I would argue they instantly made it worse.
89. mrsmrtss ◴[] No.44394944{9}[source]
> I personally would get panic attacks and couldn't sleep anymore if my dependencies aren't open source and I would depend on a company for any reason. But that's just me, it definitely sounds very mature

.NET is open source.

replies(1): >>44403157 #
90. BanterTrouble ◴[] No.44395225{3}[source]
No

1) OpenGL is a (now legacy spec) and DirectX is an API on Windows. OpenGL spec is implemented by your GPU driver.

2) DirectX is a collection of multimedia APIs on Windows. OpenGL is just graphics. Direct3D is one of those APIs.

3) Thirdly OpenGL and Direct3D (before version 12) are pretty much the same in they can do. The code is pretty similar IIRC (though it been some time since I've done Direct3D programming).

4) Devs use DirectX because there is a full set of APIs for the target platform. Linux and Mac aren't typically targeted when making a game. Mac and Linux sales have been a very small percentage historically.

91. jiggawatts ◴[] No.44395410{10}[source]
My point was that "copy" is sufficient and works much more robustly than with NPM/Node, for example.

At $dayjob I use DevOps agents or App Service with pipelines. I'm not a savage.

92. lproven ◴[] No.44396022{8}[source]
Word is a word processor.

It is a tool for people who write words. That is its prime purpose.

People write words for people to read the words. That is the prime purpose.

It is a tool for readers and writers.

I am both.

I can read a menu, and scan through submenus, about 10-20x faster than I can page through buttons on a tabbed bar. The replacement is dramatically inferior in legibility and so in efficiency.

That is 1 way it is worse.

A menu bar takes a single line of text. It works perfectly in a text-only display. A ribbon bar takes many lines of small intricate graphics. It is dramatically and measurably and demonstrably inferior in its use of screen space, its use of pixels, its adaptability to other displays, its functionality for those with restricted vision or restricted computer display abilities.

This is a 2nd way it is worse.

It is not re-orientable; I can't move it to one side to use a widescreen more efficiently. Because of its poor and fixed layout I can see less of my document, meaning it hinders the primary purpose of the tool.

This is a 3rd way it is worse.

It does not interoperate with other UI paradigms. Right now I am typing on an old Mac with macOS. Word is the only Office app on it. The oldest 64-bit version of Word I can find. It has to duplicate the entire UI both in the Mac's mandatory global menu bar and in the clumsy bolted-on Windows-centric ribbon. This demonstrates the inefficiency and poor design.

This is a 4th way it's worse, although for me, it means I can ignore the ribbon and use the menus.

I read fast. I cannot squint at tiny icons and try to guess their functions quickly. It's slow. The ribbon defeats muscle memory and defeats fast reading.

This is a 5th way it's worse.

The ribbon is context-sensitive. I can't just remember what is where under where relative to the first menu, because it changes depending on where the cursor is, what is selected, what tab I left it on last time. In a menu tree, if it's left open, I tap ESC once and I am at a known place and can start over. Not with the ribbon.

This is a 6th way it's worse.

I speedread and I have good colour vision. Some people can't see colours. Some can't see fine details. Some can't see at all. A screenreader can just read all of a menu, but it can't describe icons and it can't say "then there's a vertical line and in the next section, it starts..."

The ribbon fails at accessibility.

This is a 7th way it's worse.

Menus can be accessed and manipulated in a consistent way with keyboard controls. Up/down/left/right/enter. 5 keys and you have total control. You can use this with a mouth control if you have no use of any limbs. This is good for people with motor disabilities but it is also good for keyboard-centric users with no disabilities. This is good design: it's adaptable and it's flexible and it fits different needs. But also, you can use letters to leap faster through the menu bar, so power users and touch-typists can navigate faster. All blind people who can type are touch typists; they have no other option. So this feature that aids accessibility also aids power users.

None of this applies to the state-sensitive context-sensitive ribbon. That is an 8th way it's worse.

You are wrong, and what's more, you are wrong on multiple levels, some of which I have itemised. I could get to 10, I suspect, but I have a job to do and this is not it.

Stop defending bad design. Learn to look deeper at good design that lasted decades and learn to ask why things you don't like so much survive and are widespread and have not been replaced by novelties you like.

93. whatevaa ◴[] No.44402647[source]
Are you a game dev?
94. whatevaa ◴[] No.44402675[source]
Factorio, with a custom engine and totally not a AAA game company, develops on Windows too, because of great tooling.
95. whatevaa ◴[] No.44402680[source]
Game devs absolutely use c++.
96. herbst ◴[] No.44403157{10}[source]
To my understanding the "batteries" as in "batteries included" from above aren't.
replies(1): >>44403244 #
97. mrsmrtss ◴[] No.44403244{11}[source]
That includes also all the "batteries" (https://github.com/dotnet).
98. cyberax ◴[] No.44409374{9}[source]
> So what's stopping you from doing this with dotnet?

Nothing. But then it's not any different from JS+NPM, Python+uv, etc.

> Going by your logic, no other programming language reaches your ideal "deployment story" the moment you reach for docker.

Pretty much. I guess the only real contender is Go. It can easily produce single-binary self-contained executables that can contain other assets, and it supports seamless cross-compilation.

> Dotnet is cross platform. If you are targeting Linux then you can give that information using `dotnet build --os linux` and nuget packages that have platform-specific binaries would then supply the build with the correct binary.

Now do that with Python libraries that do the neural network thingie.

> That's because it is not the job of any programming language compiler to make changes to cloud infrastructure. You know single responsibility and all that.

The brag here was that Dotnet has "just copy it" deployment. And I'm showing that it's not the case, it's "click like a madman for 15 minutes to set it up and then you can copy deployments as long as they don't have anything but .NET code that can work on the target machine".

99. cyberax ◴[] No.44409418{8}[source]
You clearly have not worked with in a competent JS-based project. Literally none of your objections are valid except for the single-threaded nature of JS.

Which is also not quite valid, given that .NET has async now, with all the same faults.

> 3) It takes minutes to start! I hope you never have an emergency update that needs to go out right now!

This clearly shows that:

1. "Just copy it" leads to messes that need sub-second deployments. Probably manual ones, because simply spinning up CI/CD and running the tests typically takes longer. Were you responsible for that CrowdStrike outage?

2. My JS project compilation takes 10 seconds from an empty directory to the compiled asset.

> 5) NPM libraries are under constant churn. Just updating packages requires minutes of 100% computer power to resolve the dependency graph logic... which has changed.

We're using PNMP and our library resolution takes seconds.

> 6) In .NET land there's basically only two ORMs used: Entity Framework from Microsoft and Dapper from StackOverflow. They work fine. Someone at $dayjob picked "typeorm" for Node. Is it the best? Who knows!

It's interesting that you think that not having choice of libraries is good.

I guess that's OK when your worldview has shrunk down to the confines of MSDN, and you can't see anything outside of it.

replies(1): >>44411590 #
100. jiggawatts ◴[] No.44411590{9}[source]
“Just deviate from the defaults and then you’ll have a good time!” is not a convincing argument for someone who’s used to being wildly productive… with the defaults.