Зачем вам нужно ориентироваться на JVM? Если это необходимо исключительно для работы с Android, то, возможно, обратите внимание на MonoTouch , который представляет собой стек .NET для популярных мобильных платформ, разрабатываемых Xamarin (тех, кто был за Mono, когда он разрабатывался тогда в Novell ). Mono сам по себе является способом нацеливания на Mac и другие платформы POSIX, используя X Window System для графического взаимодействия (то, что вы назвали «Linux»).
Однако вы должны знать, что вам все равно может понадобиться переписать части графического интерфейса для различных платформ: во-первых, подход к интерфейсам, используемым на устройствах с сенсорным экраном, довольно сильно отличается от подхода на «настольных» устройствах и второй, в то время как MonoTouch вероятно, обеспечит унифицированный интерфейс на целевых платформах (Android, iOS, WinPhone) для настольных ПК. Платформы Windows, Mac и X имеют собственные предпочтительные стеки графического интерфейса, доступные через .NET или Mono - WPF или Winforms в Windows, MonoMac в Mac OS X (с использованием Cocoa) и Gtk # на платформах POSIX с использованием X. Mono, по-видимому, предоставляет унифицированный стек графического интерфейса для всех этих настольных платформ, поскольку делает поддержка Winforms , но общий внешний вид может быть неоптимальным на платформах, отличных от Windows, поэтому вам придется искать.
Но, по крайней мере, логику основной программы не нужно будет переносить на каждую платформу.
P.S.
Также обратите внимание, что большинство современных программных стеков, основанных на JVM, которые мне приходилось просматривать в различных случаях, поддерживали CLR через IKVM , который «оборачивает» CLR, делая вид, что это JVM в глазах Java-кода.