Problem solve Get help with specific problems with your technologies, process and projects.

Unix to Linux: Migration steps and porting

Initiating, planning, executing, controlling and closing must be considered when migrating from Unix to Linux. In this tip, an expert describes the issues involved in each of these phases and then discusses technical implementation.

The porting process for a Unix to Linux migration involves five distinct groups of processes from initiating to closing -- and these issues must be considered before you tackle the technical implementation. In this tip, we'll look at each of these processes and how they affect your migration, and then we'll turn our attention to the technical implementation.

More on Unix-Linux migrations:
Lucky 7: From Unix to Linux in 7 steps 

Linux or Unix: Pros and cons

For the purposes of this article, we will use IBM's AIX. We'll walk through an outline of the migration steps and provide a more detailed summary of the porting process.

Though you have a choice of several methodologies to use during a migration/porting process, most usually involve the processes that can be organized into five distinct groups.

  • Initiating
  • Planning
  • Executing
  • Controlling
  • Closing

These process groups are outlined in the PMBOK body of knowledge (PMI institute) and are not specific to IT projects. PMBOK leaves the methodology out of the equation, allowing the customer to choose the methodology for running projects.

The methodology we will use here is geared towards this type of project and includes initiation, planning, execution and testing. Each step will kick start the next step in the project lifecycle.


From a project management standpoint, the initiation phase is where the project charter and preliminary scope statement would lie. During the initiation phase, you need to research all the versions of your applications, databases, middleware and third-part software. Confirm that everything you're looking to port to Linux is in fact portable.

To understand the development components, ask yourself the following questions.

  • What language is the application written in? Does it use Java, which ports easily or Cobol, which will require more effort?
  • Are there any hardware dependences on the existing code?
  • Identify your testing group and test envirenment. Who will own the testing. Do they have resources to even test?


Before going forward with a migration, analyze all possible porting issues to make sure that you have a detailed risk management plan. This plan should include the formation of other components of the formal project plan, such as a staffing management plan, a procurement plan and a scope management plan.

As any project management professional can attest, scope is critical. During the initiation process, a preliminary project scope statement can be defined after a project charter is developed, but eventually a final scope statement and plan must be developed.

The work breakdown schedule will be another important part of the plan, as will the identification of the project team and the key stakeholders. From a technical point of view, the analysis is the step where the porting engineers will examine the architecture in detail to start to identify the APIs and shell scripts.

Execution -- Porting

Porting is the step during which modifications to the application take place. Most, if not all, technical aspects and dependencies of the application should have already been uncovered during the initiating and planning stages. In this phase, we need to modify the source code so that it compiles and runs on the Linux platform. In other words, here is where the work gets done.

Engineers will execute the tasks as detailed in the project plan. Compiling the code on Linux will include identifying and removing any dependencies that are platform dependent.

Once the application has been compiled on the Linux platform successfully, the engineering team can run tests on the application and determine if there are any runtime errors. Any errors should be fixed before the formal hand-off to the testing team.

Let's get specific here. What do we migrate and what do we install? Usually, the application software is installed fresh on the Linux server. The server must be built, directories made and patches installed. Third-party software must also be installed. Are you using Samba in AIX? If so, you'll need to get it working in Linux.

Some areas to watch:

  • To build an executable in Linux, one must use the gmake utility. The traditional Unix System V make is just not compatible in Linux. AIX traditionally uses the System V version of make.
  • AIX and Linux linkers differ in so many ways. AIX uses the XCOFF binary format, whereas Linux uses the ELF format. In addition, AIX and Linux build runtime linkable objects differently, which has affects the library search behavior when using the –l parameter. Linux has library versioning and AIX does not. Users must run any newly created library through the versioning tool under Linux before it can be used.
  • For template instantiation, AIX and Linux must use a repository to store templates. Then the code is compiled along with other code as a final step in the compile process, before linking is started. The equivalent AIX command to –qtempinc and –qtemplateregistry is –frepo in Linux.
  • AIX and Linux have a long list of compatible system and library APIs. Along with other differences, notable differences are in the return value of ERRNOs.
  • AIX fully supports POSIX threads and Linux supports Native POSIX Threads Library (NPTL), which has support for POSIX, but AIX and Linux implement kernel threads and user threads differently.
  • Large page support can be turned on in AIX in a number of ways, including changing the linker or compiler flags. With Linux, one must reconfigure the kernel.
  • GNU does not have shorthand methods to invoking the compiler like AIX (xlC_r, xlC and xlC128), which will automatically include pthreads, DCE threads or 128-bit libraries. You must include these parameters and libraries separately on the gcc/g++ and ld line when building the executables.
  • Both AIX and Linux support some common parameters for building executables, such as –c Compile only, but many other parameters control the behavior and output generated by both AIX and Linux.

The following are a few additional tips.

Don't forget to set-up a change management system. This will help you track changes. I would also set up a code management system for changes to the application. CVS is the tool I'm most accustomed to, but many others exist.

The AIX SDK for the Java platform provides the Java 2 (version 1.4) programming tools and runtime environment. Many Java environments are available for Linux, though you may want to download one from IBM just to be cautious.


The application team may have a group of end-users banging away at the systems or scripts to help automate the process. Stress testing is an essential part of the process to ensure the functionality and performance of the new environment. Engineers will need to help solve any problems until testing is repeated and the system is signed off and the project is closed.

In conclusion, if you are looking to migrate your environment from Unix to Linux, understand that the process involves a lot of work. Do not underestimate the importance of hiring top-notch project managers; you may find out that the project manager is even more important than the most highly skilled porting engineers.

At the same time, don't be intimidated. This migration has been done before many times, and although challenging, you have a wealth of resources at your disposal. Many consultants and vendors specialize in server migrations and consolidations. If this is your first time, don't be afraid to ask for help.

Dig Deeper on Linux servers