Davvero un'ardua domanda...
Io risponderei...dipende dal tipo di linguaggio...
Ci sono i linguaggi interpretati e quelli compilati
I linguaggi compilati vengono trasformati in assembly dal compilatore e poi tramutati in codice macchina: è quindi semiquasiimpossibile risalire al codice sorgente: al massimo puoi risalire all'assembly, ma comunque è molto arduo da capire (quindi sei al sicuro.
Linguaggi compilati sono:
C, C++, Delphi, Visual Basic 6.0
I linguaggi interpretati invece vengono appunto interpretati da una virtual machine che esegue il loro codice al volo. Quindi questi possono essere meno sicuri e quindi,con molto impegno, disassemblati. Però hanno una maggiore portabilità: è da segnalare, infatti, che Java, ad esempio, è completamente multipiattaforma, e quindi ovunque tu eseguirai un programma Java, questo funzionerà senza avere niente da obbiettare.
Linguaggi interpretati sono:
Java, Python, Tutti i linguaggi della piattaforma .net