Just about a week ago we installed a fresh 64-bit Ubuntu 9.04 on one of our AMD64 systems that was only running 32-bit Windows Vista before.
Up to this point, we had done all our development work on 32-bit systems only, or more precisely, under the ILP32 data model under Windows and Linux. ILP32 means that the basic C/C++ data types like int, long int and pointer (e.g. void*) are all 32-bits wide.
The Microsoft Visual C++ compiler chooses to change the data model to LLP64 on 64-bit Windows systems, where only pointers get 64 bits wide but the int and long int types remain at 32-bits width.
Most other compilers however use the LP64 model, including the GCC compilers under Linux. In LP64, both long int and pointers are 64 bits wide, which seems like a more challenging, but also a more natural and logical model than LLP64.
Thanks to the very portable and clean code of the Cafu engine, our port to the LP64 model on our x86_64 Linux system was effectively straightforward and simple.
However, things got somewhat thrilling when it came to reading and writing our binary file formats: world files, texture images, model files, etc. - we found that we too had made some (in hindsight "problematic") assumptions about the sizes of data types when they are written to or read from a file.
Making all required changes turned out to be very easy though, and we're very happy that Cafu and all it's programs (map compilers, world editor, ...) work wonderfully now on true 64-bit systems!
The next release of the Cafu engine will be available as both 32- and 64-bit downloads.
Apropos the next release: We've been working on many other great enhancements in the meanwhile, and will announce them in separate news posts soon!