本節では、UNIX ベースのアプリケーションを Linux プラットフォームへ簡単に移植するために 調査する一般的な項目を記載します。
アプリケーションを他のプラットフォームで実行するように移植する作業では 、ソース・プラットフォーム とターゲット・プラットフォームが必要です。 コーディングを始める前に、最も基本的な段階として、次の質問を考えてください。 ターゲット・プラットフォームへ移植することで、何が変更されるのか? 純粋な「移植」とは、ハードウェアとオペレーティング・システムのみを変更することを指します。
理論的には、プログラムが良い形式で記述されており、プラットフォームに固有な点に依存せず、 業界標準 (POSIX など) に従い、標準の言語定義に準拠して標準外の言語拡張を使用しなければ、 新たなオペレーティング・システムに容易に移植することができ、 再コンパイルとデバッグ以外には最小限の追加作業しか必要としません。 ソース・プラットフォームが比較的最近の UNIX ベースのオペレーティング・システムである場合は、 変更する点は、業界標準により完全に準拠させることと、同じ業界標準の新しいバージョンに 準拠させることのみになることもあります。 アプリケーションがすでに Linux システムで実行している場合は、 再コンパイルしてネイティブに実行するという選択肢があります。 多くのアプリケーションは、変更せずとも再コンパイルして実行することができます。
しかも、異なる標準準拠コンパイラーでアプリケーションをコンパイルすることで、 コンパイラー間で言語標準の実装が違うために、ソース・コードのわずかな ぜい弱性を取り除くことができる場合があります。 その結果、アプリケーションがより堅固になります。
移植を行う際に起こる問題は、内部移植性問題と外部移植性問題に分類することができます。 内部 移植性問題では、プログラム言語に組み込まれる暗黙の前提事項を処理します。 例えば、C プログラムは、整数内での特定のバイト・オーダー、整数の相対サイズのセット、および構造体内の特定のフィールド・レイアウトを前提とします。 内部移植性は、ハードウェアに対するプログラム・コードの関係と関連します。 この移植性問題のクラスはプログラマーの制御下にあります。
一方、外部 移植性問題は、プログラムが使用する外部インターフェース、プログラムが前提とするこれらのインターフェースのセマンティクス、およびプログラムに渡される引き数とプログラムから渡される戻り値の選択と関連しています。
これらは、プログラムが依存するライブラリーおよびシステム呼び出し、
プログラムが呼び出す (ただし、外部の) コードを取り扱っています。
プログラムが標準化された外部インターフェースを使用する場合、外部移植性はプログラマーの制御下に置くことができます。