Почему C# не может быть использован для разработки на всех операционных системах?

Почему C# имеет проблемы с кроссплатформенностью, в то время как Java решает эту проблему на 100%?
  • 12 января 2024 г. 21:17
Ответы на вопрос 3
На самом деле, C# в настоящее время довольно хорошо поддерживает кроссплатформенность благодаря фреймворку .NET Core (а теперь просто .NET 5 и новее), который является кроссплатформенным и позволяет разрабатывать и запускать приложения на разных операционных системах, включая Windows, Linux и macOS.

Однако исторически C# был тесно связан с Windows и .NET Framework, которые были разработаны Microsoft и изначально предназначались только для работы в экосистеме Microsoft. Это создало впечатление, что C# не может использоваться на других операционных системах. Тем не менее, с течением времени появились решения, такие как Mono — сторонняя реализация .NET Framework, которая обеспечила возможность работы C# на других платформах до того, как Microsoft сама представила кроссплатформенное решение.

Сравнивая C# с Java, Java была разработана как кроссплатформенный язык программирования с самого начала. Java Virtual Machine (JVM) служит абстракцией, которая позволяет Java-коду работать на любой операционной системе, для которой существует соответствующая JVM. Благодаря этому "Write once, run anywhere" («Написал один раз — запустил везде») стал одним из ключевых лозунгов Java.

В отличие от JVM, платформа .NET требовала специфических адаптаций для работы на разных операционных системах, что привело к задержкам в достижении полноценной кроссплатформенности.

Современное положение следующее:

- .NET 5 и новее (после объединения .NET Core и .NET Framework) являются кроссплатформенными и предназначены для создания приложений, работающих на разных операционных системах.
- Xamarin/Mono используется для создания мобильных приложений на C# для iOS и Android, а также для поддержки C# на других платформах.
- Blazor и MAUI расширяют возможности кроссплатформенной разработки в экосистеме .NET, позволяя создавать интерактивные веб-приложения и кроссплатформенные мобильные/настольные приложения.

Java по-прежнему очень популярна в качестве кроссплатформенного решения, но теперь C# и .NET тоже предлагают мощные инструменты для кроссплатформенной разработки. В любом случае, практически любой современный язык программирования может столкнуться с определёнными проблемами при переносе приложений между разными операционными системами, и как Java, так и C# требуют принятия во внимание различий в окружении среды выполнения и операционных систем при разработке кроссплатформенных решений.
Если почитать обучающий портал A tour of the C# language 
https://learn.microsoft.com/en-us/dotnet/csharp/to...
то там вообще нигде не пишут про кросс-платформенность.

Мне кажется что этот миф пошел из обсуждения что платформа .Net создавалась MS в противовес
Java чтобы иметь конкурентное преимуществое для чисто своей Windows-разработки но при этом
обеспечить удобства (Managed Memory, CLR e.t.c).
C# на .NET - кроссплатформенный. 
Именно это его выделяло с 2001 года на фоне других языков после Java.
Про CLR ты сам почитаешь, надеюсь?
Похожие вопросы