Sie können problemlos plattformübergreifend entwickeln, unabhängig davon, ob Sie ein Systemprogrammierer, ein Webentwickler oder ein Entwickler von Desktopanwendungen sind. Wenn Sie sich für Systeme interessieren, funktionieren Dienstprogramme und / oder Treiber, die Sie für Linux schreiben, wahrscheinlich mit sehr geringen Änderungen gut für andere * nix. Vorausgesetzt, Sie schreiben Standard-C-Code und verwenden nicht zu viele systemspezifische Aufrufe, können diese möglicherweise sogar einfach auf Windows portiert werden.
Wenn Sie ein Entwickler von Desktop-Anwendungen sind, können Sie auf GTK, QT oder wxWidgets abzielen, und Ihre App wird heute wahrscheinlich auf den drei wichtigsten Plattformen (* nix, Windows, Mac) gut funktionieren. Halten Sie systemspezifische Aufrufe auf ein Minimum oder isolieren Sie sie in eine Wrapper-Bibliothek, die systemspezifisch sein wird. Sie rufen auch eine virtuelle Maschine wie die JVM und / oder die CLR an, mit der die Anwendung auf der ganzen Linie arbeiten kann.
Wenn Sie ein Webentwickler sind, werden Sie wahrscheinlich auf zu viele verschiedene Alternativen stoßen, aus denen Sie auswählen können. Ich bevorzuge einen kleinen Webserver namens Cherokee und entwickle und starte ASP.NET- (Mono-) und Django-Apps, die darauf ausgeführt werden und ein PgSQL-Backend verwenden.
Die Schlussfolgerung lautet also, dass eine plattformübergreifende Entwicklung unter Linux durchgeführt werden kann, vorausgesetzt, Sie können den Code auf der Zielplattform kompilieren und dies beim Schreiben Ihres Codes oder bei der Ausrichtung auf eine VM berücksichtigen. Der andere Punkt ist, dass Sie möglicherweise auf das Paradox der Wahl stoßen und nicht wissen, was Sie verwenden sollen. Lesen Sie dazu unten meine Antwort auf die zweite Frage.
In Bezug auf die zweite Frage heißt die beste Ressource, die ich gefunden habe, Open Source Alternatives . Diese Website listet kommerzielle Software und ihre Open Source-Alternativen auf. Fast alle Alternativen laufen unter Linux und FreeBSD.