Non si capisce la domanda.
Qualunque linguaggio imperativo crea programmi eseguibili: C, Java, Python, Visual Basic, ecc.
La differenza è che alcuni si aprono da soli, altri hanno bisogno di un altro programma per essere eseguiti. Per es., su Winzozz, gli .exe si aprono da soli, e per aprire un .jar (programma Java) o un .py (programma Python) devi eseguire anche la macchina virtuale corrispondente, che a sua volta è un programma .exe.
La differenza però non sta nel linguaggio ma nel compilatore, cioè da un sorgente Java posso creare un .jar e un .exe, da un sorgente C posso creare un .jar e un .exe, da un sorgente Python posso creare un .py e un .exe. Dipende da quale compilatore scegli e quale formato di output configuri nel compilatore.
L'altra differenza è programmi che usano il terminale vs programmi che usano le finestre. Questa differenza non sta nel linguaggio, ma nelle funzioni di input/output che usi; in realtà non c'è neanche una vera differenza, perché nulla ti impedisce di usare entrambi i canali di comunicazione.
Per es., in C scrivi su terminale con cout, e crei una GUI (= interfaccia grafica) con le librerie di Win32 o GTK. In Java scrivi su terminale con System.out.println, ma crei una GUI con le classi di Swing.
Quanto alle estensioni. Su Winzozz le estensioni dei file eseguibili sono tre: .exe, .bat, .com. I .bat sono file eseguibili che si aprono da soli e comunicano SOLO con il terminale. I .com non sono più usati ad oggi. Quindi puoi scegliere solo tra .exe e .bat. Tutte le altre estensioni di file eseguibili (.jar., .py, ecc.) vanno lanciate avviando un secondo programma che ha estensione exe, per es. "python.exe abc.py". C'è però una funzionalità in più: se scrivo "python abc.py" il terminale si accorge che "python" deve essere un programma, quindi aggiunge l'estensione .exe che io non ho messo, ed esegue python.exe.
Su Unix e Linux, ci sono due tipi di eseguibili: quelli binari e gli script. I file binari sono i corrispondenti degli .exe di Winzozz, e non hanno estensione. Gli script, invece, possono avere l'estensione che vuoi, perché sono identificati dal testo: se ho uno script in python, lo eseguo banalmente scrivendone il nome sul terminale, non importa se non ha estensione, se finisce in .py oppure se ha una altra estensione che mi invento a caso, perché il terminale lo legge e capisce da solo che si tratta di un prg python. (in quanto è scritto in cima al file, per convenzione.) Quindi scriverò banalmente "abc" oppure "abc.py", a seconda di come si chiama il mio file, e il terminale riconosce in automatico che deve lanciare il prg python, che a sua volta è un eseguibile binario, e per questo non ha estensione.