I also don’t want to use a language with questionable hireability.
They've effectively dropped it a couple times in the past, and while they're currently putting effort in, the company as a whole does not seem to care about stuff like this beyond brief bursts of attention to try to win back developer mindshare, before going back to abandonment. It's what Microsoft is rather well known for.
The effort of .NET Framework to .NET Core to .NET 5 and now up to .NET 9 is well over a decade long of steady and increasing progress.
1. only supports the three main operating systems and two architectures (or four if we're stretching things and being very generous)
2. large parts of it still don't work anywhere but Windows (UI being the primary one)
3. the level and quality of official tooling provided for Linux and macOS is incomparable to their Windows offerings
No, its cross-platform story is far from the best we have.
The JVM includes no GUI framework. .NET also includes no GUI framework. .NET happens to have a specific framework for Windows. But just like the JVM, there third-party GUI frameworks such as MAUI, Uno, Avalonia, and others.
So no, there's isn't a "large part" of .NET that isn't cross-platform.
> 3. the level and quality of official tooling provided for Linux and macOS is incomparable to their Windows offerings
What are you referring to here?
This is provably wrong, unless you want to insist despite the facts because that's what your social bubble tells you to do.
The most popular deployment target for .NET is Linux: https://dotnet.microsoft.com/en-us/platform/telemetry
Equating whatever else MS is up to with the way .NET evolves and is managed is no different to equating YouTube and Golang.
But Microsoft's most consistent legacy across its entire existence has been Embrace, Extend, Extinguish. Any Linux-supporting project is directly opposed to their core business, aside from Azure - if it starts becoming a threat, they'll turn it into a way to force people onto their other money-makers.
Cross compilation, package manager and associated infrastructure, async io (epoll, io_uring etc), platform support, runtime requirements, FFI support, language server, etc.
Are a majority of these things available with first party (or best in class) integrated tooling that are trivial to set up on all big three desktop platforms?
For instance, can I compile an F# lib to an iOS framework, ideally with automatically generated bindings for C, C++ or Objective C? Can I use private repo (ie github) urls with automatic overrides while pulling deps?
Generally, the answer to these questions for – let’s call it ”niche” asterisk – languages, are ”there is a GitHub project with 15 stars last updated 3 years ago that maybe solves that problem”.
There are tons of amazing languages (or at the very least, underappreciated language features) that didn’t ”make it” because of these boring reasons.
My entire point is that the older and grumpier I get, the less the language itself matters. Sure, I hate it when my favorite elegant feature is missing, but at the end of the day it’s easy to work around. IMO the navel gazing and bikeshedding around languages is vastly overhyped in software engineering.