prendi in considerazione C# che offre non pochi vantaggi rispetto a java non solo rispetto alla performance ma anche alla sintassi del linguaggio
su linux è supportato tramite mono che a breve verrà integrato su tutte le distribuzioni linux ... anche se già comunque ci stanno i pacchetti appositi per le varie distro
inoltre hai la possibilità di usare le GTK, le wxWidgets o le windows forms a tua scelta ... ovviamente ti consiglio quest'ultime
Le windows forms sono ormai completamente sviluppate, manca poco, però sono in fase di testing quindi potresti trovare qualche difficoltà quindi a software ultimato ti consiglio di iniziare a testare l'applicativo su mono
Un'ultima cosa: non utilizzare chiamate native o assembly che lo fanno perché ovviamente se non hai una contro parte che funzioni correttamente anche sugli altri sistemi operativi ... altrimenti il tuo applicativo perde in blocco la portabilità
Di soltio io preferisco fare un'interfaccia standard che mi espone tutta una serie di funzionalità e una volta stabilito una struttura specifica mi carico l'assembly dinamicamente e lo uso tramite interfaccia mantenendo un'estrema semplicità nel codice e nello stesso tempo avendo una velocità superiore rispetto a tutti gli altri sistemi di caricamento dinamico ^^