Вы можете легко заниматься кроссплатформенной разработкой, будь вы системным программистом, веб-разработчиком или разработчиком настольных приложений. Если вы работаете в системах, то любые утилиты и / или драйверы, которые вы пишете для linux, вероятно, будут работать хорошо для других * nix с минимальными изменениями. При условии, что вы пишете стандартный код C и не используете слишком много системных вызовов, их может быть даже легко перенести на окна.
Если вы являетесь разработчиком настольных приложений, вы можете использовать GTK, QT или wxWidgets, и ваше приложение, вероятно, будет хорошо работать на трех основных платформах сегодня (* nix, Windows, Mac). Опять же, сведите системные вызовы к минимуму или изолируйте их в библиотеке-оболочке, которая будет зависеть от системы. Вы также вызываете виртуальную машину, такую как JVM и / или CLR, которая позволит приложению работать по всем направлениям.
Если вы веб-разработчик, то вы, вероятно, столкнетесь со слишком многими различными альтернативами на выбор. Я предпочитаю небольшой веб-сервер под названием Cherokee, и я разрабатываю и запускаю приложения ASP.NET (моно) и Django, которые работают на нем и используют бэкэнд PgSQL.
Таким образом, можно сделать вывод, что кроссплатформенная разработка в Linux может быть выполнена при условии, что вы можете скомпилировать код на целевой платформе и помнить об этом при написании своего кода или при назначении виртуальной машины. Другое дело, что вы можете столкнуться с «Парадоксом выбора» и не знать, что использовать. Для этого прочитайте ниже мой ответ на второй вопрос.
Что касается второго вопроса, лучший ресурс, который я нашел, называется Альтернативы с открытым исходным кодом . На этом веб-сайте перечислены коммерческие программы и их альтернативы с открытым исходным кодом. Почти все альтернативы работают на Linux и FreeBSD.