移植 (ソフトウェア)
互換性のあるコンピュータ上では、OSに用意されたAPIや、そのAPI経由で利用されているデバイスドライバの働きによって、ハードウェアのベンダーや機種の違いが隠蔽され、ハードウェア仕様の差異やデバイス構成の違いなどは気にせずとも同じアプリケーションソフトウェアの実行ファイル(バイナリ)が利用できる。アプリケーションソフトウェアは、OSが提供する標準化・抽象化された環境上で動作する。
しかし、WindowsとMacintoshシリーズなどのように、互換性のないコンピュータ上では、一部のソフトウェアを除き、同じ実行バイナリは動作しない。これらはOS側で提供している環境が異なるためである。また、OSによってサポートされる第一級(ファーストクラス)のプログラミング言語が異なることもあり、特にウィジェット・ツールキットを利用するGUIアプリケーションの移植に際して、それぞれの言語を使用してソフトウェアの一部またはすべてを書き直さなければならないこともある。例えばMac/iOSではObjective-C/Swiftが、AndroidではJava/Kotlinが、WindowsではC++/C#/VB.NETが主要な第一級言語としてサポートされ、公式のウィジェット・ツールキットはそれぞれの第一級言語から利用することを想定されている。