Liten kommentar kring C# och plattformsoberoende. Språket C# är helt plattformsoberoende och faktiskt helt standardiserat. Det finns två plattformar som implementerar detta språk, Microsofts .Net och det öppna alternativet Mono.
Däremot så sätter nog de flesta likhetstecken mellan språket C# och plattformen .Net. .Net är inte en standard utan något som helt kontrolleras av Microsoft och .Net finns endast implementerat för Windows. Till väldigt stor del så överlappar API:erna i Mono och .Net så det är möjligt att skriva relativt avancerade applikationer som fungerar på båda plattformarna.
Licensen kring Java är inget att oroa sig för. Dels så har det aldrig varit några tvivel kring de program som använder en "godkänd" JVM , vilket inkluderar den från Oracle, den från IBM samt även OpenJDK som finns för bl.a. Linux. Bråket var kring Googles variant av Java som använde en bytekod som inte är kompatibel med vanliga JVMer, men den rättegången slutade med att Google i princip vann på alla punkter och de patent de handlade om blev ogiltigförklarade eller fick ändras så det blev så smala att de blev irrelevanta.
Om du bara ska programmera som hobby och inte rikta in dig på spel (då du borde använda C++) så finns det betydligt enklare/roligare språk att titta på då Java och C# är system-språk som har samma abstraktionsnivå som C++. C++ har haft automatiskt minneshantering sedan det fick stöd för templates för runt 20 år sedan.
Du nämner Python och det är ett väldigt trevligt alternativ, andra har nämnt Clojure. JavaScript kan ju också vara ett alternativ med tanke på all hype som finns kring detta språk nu, fördelen med JS program är ju att de kan köras i webbläsaren på allt från vanliga datorer, pekplattor och telefoner.
Vill du testa på att skriva serverapplikationer som kan hantera riktigt många samtida sessioner kan du titta endera på Erlang (ja det kommer ursprungligen från Ericsson och har bl.a. används i AXE-växlar) eller på Googles helt färska språk Go (version 1.0 kom i våras).
Det som skiljer Erlang/Go från andra språk som t.ex. Java/C# är att de har ett speciellt koncept som kallas "process" i Erlang och "goroutine" i Go. Dessa beter sig väldigt mycket som en tråd i Java/C# men medan varje tråd tar minst 1MB RAM och belastar OS:et så tar en Erlang-process / goroutine kanske ~300 byte, vilket betyder att man utan problem kan ha 100.000-tals av dessa.
Erlang är relativt olikt de flesta andra språk (kommer från Prolog), men det är definitivt ett högre-nivå språk än C#/Java och relativt enkelt att lära sig. Go är på många sätt likt Python (som också är en av språken man inspirerats av), men Go är ett lågnivåspråk precis som C#/Java/C++.
Mina personliga favoriter just nu är Clojure och Go.