Porting x86 Linux applications to IBM POWER
The definitive how-to guide

Get support

Get support from the experts

If you have comments or would like to contribute to this guide, we welcome your feedback.   Learn how

Suggest new content or make a comment on the existing content by using one of these methods.

Note: If you’re a non-IBMer and you want to comment – please use the email option for now.

  1. Log an issue in GitHub.
    • Go here:
    • Note which page and section you are referring to in the issue title. For example, “Add dancing chipmunk graphic to the Get ready page:Why Linux section”
    • Include the page URL in the Comment section and add your comment. Use the markdown function if you have formatting suggestions or add a file if that is appropriate.
  2. Send an email to Include page name/section, URL, and as much detail about the comment as possible.

Port the application

Do you know how to build your application?

Yes, I have build instructions and know how to build the application

Great. Go ahead and try building it and then go to the test and troubleshooting topic

No, I need help building the application

Most of the time, you’ll follow the instructions for building the application that are found in the project’s build instructions. If you don’t know how to build the application or don’t have the build instructions, or both, here are several things you can try:

  • Check availability of build instructions
    Build instructions, which often specify the application dependencies and prerequisites are sometimes available at one of the following locations. Check each to see if they are useful or applicable to you either in part or in whole:
    • Project web page
    • GitHub home page of the project
    • Project README file/install script
    • Intel x86 Docker files
  • Check if the community has an external CI engine, such as Travis or Jenkins
    Often, build instructions can be interpreted from the build logs or the travis.yaml file.
  • Check for project specific dependency lists in the source code
    This varies from project to project and to a large extent depends on the underlying language in which the source is written. Some examples:
    • Gemfile (Ruby Projects)
    • Requirements.txt (Python projects)
    • package.json (Node.js projects)
    • Makefile (C/C++ projects)
  • Install common dependencies
    This includes the common set that may or may not have been covered in in the previous bullet and includes build essentials such as gcc/g+++, make, node.js & npm (for Node.js packages), ruby/ruby-dev (for Ruby packages) and so on.
  • Trial and error
    This is generally the last and final step. Try what you were able to find and install using the recommendations above and attempt to build the package. Other dependencies will be identified and installed if the build fails.

Did your application build without errors?

After the program is successfully built, make sure you test it for runtime errors. Runtime errors are usually related to your program logic in this phase. You should also run the test programs you defined during planning to verify that the output of your application is the one you expected.

Potential issues and solutions

Dependencies (libraries, runtimes, packages and proper versions

  • Check all dependencies, especially closed-source, that are not contained in the enterprise Linux distributions or new, emerging technologies, such as a new language
  • Check OSPAT to see if dependent packages have been ported to POWER
  • Submit a request for missing source

Assembler code, including hand-coded vector (SSE) instructions

  • Intel Assembler does not run on Power
  • If you decide to install the SDK for Linux on Power, it includes helpful porting tools such as the Migration Advisor, which recognizes some common x86 assembler instructions and recommends Power equivalents

Platform-specific compiler flags and intrinsics

  • POWER-specific differences from x86
  • Often, generic compiler intrinsics can be used in place of platform-specific
  • For your C/C++ application the SDK for Linux on Power includes a tool called the Build Advisor, which scans your project build output and recommends “best practices” you can implement for improved results. It looks for compilers (type and version), optimization levels, processor-specific optimization, and other compiler and linker flags.
  • Read this blog, Porting x86 vector intrinsics code to Linux on Power in a hurry

Do you need tuning and optimization tips?

This section is coming soon. In the meantime, check out this article that provides tuning and optimization tips for Linux applications running on IBM Power Systems: Application tuning tips for Linux on Power

For even more tips and techniques, visit the the Performance Best Practices library page.

Do you plan to package and deploy the application?

If your ported application is a commercial product or you want to distribute it to third parties, you need to package the application, including libraries, documentation, and sometimes source code. Linux provides several ways to package your application: