Comment by antonymoose

18 hours ago

Not OP here - but for me it’s the open source ecosystem. Java just wins in terms of scope, scale, and stability.

I love C# the language, but the ecosystem is a ghetto.

I see this reason a lot but what are some actual examples of what is lacking in the .NET ecosystem vs. Java?

  • Large Apache ecosystem (Spark, Flink, Pinot) is completely missing and third-party SDKS (looking at you AWS) almost ALWAYS have worse SDKs. The java Kinesis consumer and producer libraries are amazing, the ones for C# are simple wrappers around the AWS APIs which means there's a few foot guns waiting for developers to run into, even if they should know better.

    • Good point. The majority of Apache projects are Java. Amazon is also mostly Java internally.

  • Dev tools. The debugger is something for example that Microsoft ostensibly keeps to their own products, and how they totally slaughtered omnisharp.

    It killed my daily csharp vscode driver couple of years ago, only now catching back up somewhat, but still unusable for bigger solutions.

    That move made me gravitate towards vscodium, and avoiding csharp where possible.

    Microsoft's move only recently got more understandable to me, because Cursor and others basically stole vscode to establish their "empire".

  • Support for OpenAPI 3.1 in .NET sucks. Up until recently, a third-party library (Swashbuckle) has been the heavyweight, but lagged for years in supporting new features & fixing old bugs. Microsoft created a first party option (Microsoft.AspNetCore.OpenApi) that supports 3.1, but it’s nowhere near feature parity with Swashbuckle yet.

    I also find serialization/deserialization to be weak in .NET. Third-party Newtonsoft was king for years, then Microsoft released System.Text.Json. Years later, it lacks feature parity, including an easy way to debug like Newtonsoft did.

  • Lots of implementations and industry standards, many mix Java with OpenJDK.

    It is not, Java is like C, C++, JavaScript and co.

    There are many implementations, the language and runtime are evolving by industry partners, you get bare metal implementations with real time GC like PTC and Aicas (doing AOT for decades), JIT caches, cloud based JIT compilers (OpenJ9 and Azul), pauseless GC, an LLVM like compiler development framework (Graal),....

    There are industry standards like Microprofile and Jakarta EE, which several vendors base their frameworks and application servers on.

    And a mobile phone platform, which while isn't proper Java compliant, has enough pieces into it that makes it easier to integrate Java code and libraries, than using Xamarin.

    Microsoft actually bothered with ECMA during the early days, however it hasn't been updated since C# 7.3, .NET Framework 4.8.

  • I mean I haven't done much in c# recently, but few examples that c# ecosystem is the subpar in quality

    Kafka client library sucks, I mean it was a nightmare to make it stable and there were a few of them.

    Pdfbox library

    And many other libraries. If you use c# Microsoft libraries only - then you are golden. outside of that its really bad.

    At this point I switched to Rust.