Историческая причина:
C# и .NET в целом это долгие страдание MS в попытках потеснить JAVA SUN . Тут дело в том что они сначала делали свою JAVA (J++ MSJVM) но проиграли долголетние суды против SUN. Если бы они не проиграли, то есть вероятность, что .net не появился бы.
Когда названные компании отстраивали разработку MS ничего не мог им предложить, кроме неопределённой судьбы своей версии JVM.
Прагматичная причина:
На каждый чих нужно лицензировать что то из стека MS технологий/продуктов, даже если это небольшие деньги на фоне оборота, то это не удобно ибо таких чихов у них 100 500 в день.
Практическая причина:
Для этих компаний очень болезнен vendor lock. Отчасти конкурентные преимущества этих компаний построены на подпиливании открытого ПО, на MS стеке это не возможно.