I think you got it wrong! C# is truly open source, from the specification to the inner libraries and the compiler. You can do what you want. Try that with Java/Oracle!
Regarding performance, C# beats Java most of the time. Can you believe that you cannot put an array of data in Java without using pointers all the time?
int[,,] true3DArray = new int[3, 4, 5];
In C#, this is continuous memory,
In Java, it actually creates: 1 + 3 + 12 = 16 separate array objects!