IMO, 15-ish years ago, Microsoft had nearly "won" as Java was on life-support; had they open-sourced .NET/C# then (as well as porting it to MacOS/Linux, Xamarin, etc.) that might have been the end of Java. Certainly, the efforts over the past 10+ years have been wonderful, but it was too late...