Puede realizar fácilmente el desarrollo multiplataforma, ya sea un programador de sistemas, un desarrollador web o un desarrollador de aplicaciones de escritorio. Si le gustan los sistemas, es probable que las utilidades y / o controladores que escriba para Linux funcionen bien para otros * nix con modificaciones muy mínimas. Siempre que escriba el código C estándar y no use demasiadas llamadas específicas del sistema, puede que incluso sean fáciles de transferir a Windows.
Si eres un desarrollador de aplicaciones de escritorio, puedes apuntar a GTK, QT o wxWidgets y es probable que tu aplicación funcione bien en las 3 plataformas principales hoy (* nix, Windows, Mac). Nuevamente, mantenga las llamadas específicas del sistema al mínimo o aíslelas en una biblioteca contenedor que será específica del sistema. También se llama a una máquina virtual como JVM y / o CLR que permitirá que la aplicación funcione en todos los ámbitos.
Si usted es un desarrollador web, es probable que encuentre demasiadas alternativas diferentes para elegir. Prefiero un pequeño servidor web llamado Cherokee y desarrollo y ejecuto aplicaciones ASP.NET (mono) y Django que se ejecutan en él y usan un backend PgSQL.
Entonces, la conclusión es que el desarrollo multiplataforma en Linux se puede hacer, siempre que pueda compilar el código en la plataforma de destino y tenga esto en cuenta al escribir su código o si apunta a una VM. El otro punto es que puede toparse con La paradoja de la elección y no saber qué usar. Para eso lea a continuación mi respuesta a la segunda pregunta.
En cuanto a la segunda pregunta, el mejor recurso que he encontrado se llama Alternativas de código abierto . Este sitio web enumera el software comercial y sus alternativas de código abierto. Casi todas las alternativas se ejecutan en Linux y FreeBSD.