Sobre a questão da portabilidade, vale lembrar que o famoso slogan do Java ("Write once, run everywhere"), embora seja verdadeiro para a maioria dos casos, tem limitações. A mais óbvia é quando precisa de algo muito específico de um sistema operacional, que não funcione em outros (exemplo).
Mas tem outros casos também. Por exemplo, certa vez - há muito tempo - migrei um sistema para WebSphere, que usa a JVM da IBM (que é diferente da JVM da Oracle). Certos trechos que usavam as libs de criptografia e algumas partes que usavam threads tiveram que ser reescritas, porque a implementação era diferente.
Por isso muitos dizem que na verdade o lema deveria ser "Write once, test everywhere" (e tinha também a piada "Write once, pray everywhere").