Plattformunabhängigkeit kann mann in 2 Dinge aufspalten:
Plattformunabhängig auf Bytecode ebene. Plattforumunabhängig auf Sourcecode ebene (Portabel).
Plattformabhängig:
Mann kann auch mit Java und C# plattformabhängig programmieren. Wenn du unter Java mit JNI funktionen der glibc aufrufst dann ist auch ein Java Programm auf jenen Plattformen die die glibc nicht bieten nicht lauffähig (bsp. Windows).
Die Sprache ansich garantiert keine Plattformunabhägigkeit. Sie kann dich da nur stark unterstützen. Um zu garantieren das mann keine plattformabhängigen Funktionsaufrufe tätigen muss ist Java sehr umfangreich auch in der Standard Edition.
Mann kann auch mit C++ plattformunabhängig auf Source ebene programmieren. Zwar musst dein Projekt für jede Plattform neu kompilieren aber das geht dennoch. Nur wirst du da relativ wenig unterstützt denn C und C++ entfaltet seine stärken gerade beim systemnahmen programmieren.
Wenn du nach einer Plattformabhängigen Sprache schaust, dann suche nach jenen die stark mit dem Betriebssystem verwoben sind. Hier wäre VB6 ein Beispiel das so stark mit der WinAPI verwoben ist das es nicht möglich ist ein VB6 ohne Emulation auf anderen Betriebssystemen zum laufen zu bekommen.
Also lautet nicht die Frage: Welche Programmiersprache ist Plattformunabhängig und welche nicht sondern die Frage lautet: Welche Technolgie greift mir als Programmierer am meisten unter die Arme beim plattformunabhängigen programmieren.
Und da kommt es auf die Konzepte der einzelnen Sprachen / Technologien an.
Java ist sicher unbestritten das Musterbeispiel was Plattformunabhängigkeit angeht. Weil die Konzepte es einen sehr leicht machen Plattformunabhängig zu programmieren.
Mono hat ebenso wenig Verbindungen mit dem Betriebssystem. Bei .net ist der Übergang fliessend, sprich mann muss aufpassen welche Technologien mann einsetzen kann damit dies auch auf Mono läuft, Bei C/ C++ gibts die Möglichkeit das QT Toolkit einzusetzen (und andere) welche einen unterstützt portabel zu programmieren. Sprachen wie Python, Ruby bieten ebenso die Möglichkeit portabel zu programmieren.
Grundsätzlich ist es schwer Sprachen zu finden die per default nur auf einer Plattform programmierbar sind.
Plattformunabhängigkeit ist das resultat: Plattformunabhängiger Technologien (Libraries/Virtuelle Maschiene), umsichtiger Programmierung als die einer Sprache