You can easily do cross-platform development whether you are a systems programmer, a web developer or a desktop application developer. If you are into systems, then any utilities and/or drivers you write for linux are likely to work well for other *nix with very minimal modifications. Provided that you write standard C code and don't use too many system specific calls, they may be even easy to port to windows.
If you are a desktop application dev, you can target GTK, QT or wxWidgets and your app will likely work well across the major 3 platforms today (*nix, Windows, Mac). Again, keep system specific calls to a minimum or isolate them into a wrapper library that's going to be system specific. You call also target a Virtual Machine like the JVM and/or CLR which will allow application to work across the board.
If you are a web dev, then you are likely to run into too many different alternatives to choose from. I prefer a little web server called Cherokee and I develop and run ASP.NET (mono) and Django apps that run on it and use a PgSQL backend.
So the conclusion is that cross-platform development in Linux can be done, provided that you can compile the code on the target platform and you keep that in mind while writing your code or if you target a VM. The other point is that you may run into The Paradox of Choice and not know what to use. For that read below my answer to the second question.
As to the second question, the best resource I have found is called Open Source Alternatives. This web site lists out commercial software and their open source alternatives. Almost all the alternatives run on Linux and FreeBSD.