Porting to Multiple Distributions

Porting your application to multiple distributions is a task that conjures up images of large engineering and support costs, which detract from the real value of the Linux platform. It is the primary goal of the LDN to provide the skills and the tools to vastly reduce those costs by emphasizing portability techniques for cross-distro application development, or full LSB certification.

One of the best ways of enhancing portability is to use the LSB Application Checker to test your application and see how far along your are on the path to LSB compliance. In particular, you can visit the LSB Certification page of the Test Report to see which libraries and interfaces your application is using that prevent LSB compliance. Once these components are identified, there are four recommended strategies for developers to take to work towards LSB compliance. Even if such compliance is not your goal, the very process of moving towards the LSB ensures you will have a much more portable application when all is said and done.

Remove the non-LSB dependencies with these strategies in mind:

  • Using alternate interfaces (i.e., posix_memalign() instead of memalign())
     
  • Using alternate libraries (i.e., libnss instead of openssl)

Note: This is a good idea if you are explicitly targeting cross-distro portability, as openssl has different ABI's across different distributions and different distribution versions)

  • Statically link libraries

Caution: Care should be taken when statically linking libraries as some software licenses, such as the GPL, treat statically linked libraries are part of the main application body, and thus extend the license conditions to the main application.

  • Dynamically link with shared libraries shipped by the ISV

There are, of course, other more general strategies to use when porting your application:

  • Consider endianess (big versus little) This is typically done at the architecture level
     
  • Consider 32-bit versus 64-bit. Do not use anything that relies on one or the other
     
  • Avoid hard-coded addresses
     
  • Use sizeof when getting sizes of objects. This is especially true when going from 32-bit to 64-bit


  • Do not assume that char is signed or unsigned


  • Do not assume that float is the same size as double


  • Be very careful when using #ifdef


  • Always create function prototypes and have the compiler check for strict use by using the -Wstrict-prototypes option in compiling
     
  • Use POSIX interfaces and data types
     
  • Use only standard functions that are in the C and C++ libraries
     
  • Avoid extensions to libraries or libraries that are distribution-specific
     
  • Use the LSB tools found in the LSB SDK for building applications
     
  • Follow the FHS for file system hierarchy

 

Groups: