Quote Originally Posted by User137 View Post
It's not that difficult when you are making apps with Lazarus Simplest requirement is not to include Windows in the uses list. Second is converting all paths to fit operating system. For this there is a internal constant PathDelim, which is \ or / depending on OS. But also you can get tips from nxPascal FixPath() function

That should be all there is to crossplatform. Use OpenGL, not DirectX. Some differences with dll libraries, but that's a problem outside of compiled executable.
Actually, this is much easier to say than to do. In reality, when you have worked on Windows platform for too long, it *is* difficult porting to other platforms. OpenGL is nice, but its initialization differs (unless you use GLUT or similar helpers, which have its own problems - for one, they are not readily available on Windows and are outdated). Sockets (anything beyond trivial) are considerably different due to WinSock specifics. Other helpers such as temporary path folders, registry configuration, dynamic libraries, etc. all all different too.

Also, you need to be very careful with the code you write to keep it portable.

To resume, for some very basic or crippled games/applications that will work and look poorly on all platforms - sure, it is relatively easy to acomplish, but as soon as you start working on features beyond trivial you *have* to start using platform-specific routes, which makes the code considerably more complex by adding many different code paths. Just take a look at actual LCL source code to see the real scope of a cross-platform project.

However, it is still a good idea to pursue multi-platform PGD challange and it will help people to work out issues in their code. Making and running your applications on different platforms is an ultimate challenge for writing applications, that requires discipline and experience to make proper architectural decisions.