1) Chi ti ha mai detto che non puoi essere pagato dando il codice sorgente? Sarebbe la fine del business open source. Conosco delle imprese che creano programmi sotto GPL e li vendono benissimo, la licenza lo permette e ti protegge. Del resto i crack si fanno sempre e comunque, anzi dando il codice sorgente avrai una community a disposizione per aiutarti, o addirittura il cliente stesso.

2) Suggerisco Python invece di Java:
Ho cercato di riprodurre un programma Python in Java, con molte difficolta', non perche' non programmavo in Java ma perche' il Java non e' dinamico quanto il Python. Ammetto che in Java 5 hanno un po', IMHO, migliorato i tipi, quando nelle versioni precedentiti davano alla testa.
Oltretutto Java dispone di molti strumenti, tra cui Netbeans/Eclipse, che sono degli IDE spaventosi e aiutano parecchio, in qualunque environment sia esso Web, Console, GUI, ecc..

Ora parlo un po' del Python: questo linguaggio e' open source, e' attivissimo con una community molto grande, e sta entrando sempre di piu' nel campo industriale. Negli ultimi tempi si stanno creando delle librerie per produrre dei software scalabili e potenti ed e' tutta roba molto stabile ed open source.
Inoltre, puoi disporre della multipiattaformita' di Java anche in Python, visto e considerato che gira quasi su tutte le piattaforme supportate da Java (fatti un giro sul sito).
Python, con tutto quello che ti offre (moltissimo, a partire dalla dinamicita' delle applicazioni, senza tipizzazione proprio come il PHP) e' performante a volte meno a volte piu' di Java.
Inoltre ti troverai abbastanza bene agli inizi, visto che non avendo la tipizzazione come il PHP, avrai SICURAMENTE meno problemi che col Java.

Ora elenco alcuni software che utilizzo io personalmente per creare applicazioni con relativi concorrenti Java:
- Twisted Matrix: e' un network framework asincrono, permette di gestire protocolli internet in modo semplice e flessibile (dal semplice protocollo TCP manuale, al WEB, ai protocolli di messaging, a SSH, ecc.) ed ha molte release alle sue spalle.
In Java non lo so...

- Nevow: e' basato su twisted.web ed e' uno dei pochi framework web (finora ho visto solo lui) ad essere VERAMENTE diviso in codice e templates. Prima ero scettico, perche' volevo anche il codice nei templates, ma questo framework e' fatto benissimo. Vi posso dire che ho realizzato una base di CRUD da applicare a varie occasioni in 50 righe di codice.
Inoltre, essendo basato su Twisted, puoi attaccare qualunque tipo di servizio ad esso, oppure puoi collegare un sito gia' fatto con un altro sito in modo veramente semplice, e controllare le disposizioni degli URL in ogni resource.

In Java puoi trovare Tomcat o altra roba, il problema e' che i siti che farai saranno immantenibili in futuro se farai refattorizzazioni, visto che con il JSP il codice va nei templates.

- SQLAlchemy: per me e' il fratello di Hibernate. Solo che probabilmente Hibernate e' molto ma molto piu' complesso rispetto ad SQLAlchemy. Con SQLAlchemy si puo' fare di tutto, ma veramente di tutto, e' un ORM potentissimo.
Questo lo usi per interagire con qualunque database. Cio' permette di cambiare database in qualunque momento senza cambiare codice. Mentre su PHP siete abituati a crearvi i vostri proxy per il database, qui e' gia' tutto pronto e le query SQL verranno fatte per te. Logicamente se dovrai fare una query manuale c'e' sempre possibilita'.

- PyGTK: esistono vari tipi di GUI, tra i quali wx, qt, fox, tk, ecc. ma quelle che mi piacciono di piu' sono le GTK. Questo perche' dispone dei seguenti strumenti:
Gazpacho: che e' un GUI builder
Kiwi: che e' un framework GTK ed e' integrato perfettamente con Gazpacho
Questi due tools permettono di creare le applicazioni in un battibaleno. Qualche problema lo dara' Gazpacho, che a volte da' problemi perche' e' agli inizi, ma e' completo e funzionale e figurati che lo uso per applicazioni industriali invece di Glade.
In Java frameworks come Kiwi non ne ho mai visti, mentre GUI builders quanti ne vuoi. La differenza e' che col Python utilizzando Kiwi risparmi molto codice, oltre che utilizzando il GUI builder.

- PlugBoard: e' fatto da me. Permette di creare applicazioni plugin-based in modo semplice e veloce, e flessibile in tutte le sue parti. La sua struttura non porta problemi di dipendenze fra i plugins. I plugins hanno la possibilita' di emettere eventi in base all'engine che si utilizza nell'applicazione: ad es. se fai un programma GTK usera' i segnali gobject, se fai un programma in console, potrai usare l'eventistica offerta dallo stesso PlugBoard senza nessun engine particolare.
In Java non saprei...


Il porting di un'applicazione da Linux a Windows non e' un problema. Inoltre hai una community molto disponibile.