openSUSE® Leap は 64 ビットプラットフォームで動作します。ですが、開発者側で全てのアプリケーションを 64 ビットプラットフォームに移植しているわけではありません。本章では、 64 ビットの openSUSE Leap プラットフォームで、どのようにして 32 ビットアプリケーションを動作させているのかについて、概要を説明しています。
openSUSE Leap は AMD64 や Intel 64 の各 64 ビットプラットフォームで動作しますが、この 64 ビット環境内で 32 ビットアプリケーションを標準で動作させることができます。 このサポートにより、 64 ビット環境に移植されるのを待つまでもなく、既存の 32 ビットアプリケーションをそのまま使い続けることができるということです。
openSUSE Leap では、 32 ビットアプリケーションのコンパイルには対応していません。 32 ビットアプリケーションの実行のみをサポートしています。
あるアプリケーションに対して 32 ビット版と 64 ビット版の両方が存在する場合、両方のバージョンをインストールしてしまうと、問題が発生する場合があります。このような場合は、いずれかのバージョンをインストールしてお使いください。
ただし、 PAM (プラグイン型の認証モジュール; Pluggable Authentication Modules) ついては例外です。認証処理時の PAM は、ユーザとアプリケーションとの間での仲介として動作します。 32 ビットアプリケーションを動作させる 64 ビットオペレーティングシステムの場合は、両方のバージョンの PAM モジュールをインストールする必要があります。
また、アプリケーションを正しく動作させるためには、様々なライブラリが必要となります。これらのライブラリの 32 ビット版と 64 ビット版は全く同じ名前になっていますので、名前以外の手段でこれらを互いに違うものとして扱わなければなりません。
32 ビット版のアプリケーションの互換性を維持するために、 32 ビット版と 64 ビット版のライブラリは同じ場所に配置する必要があります。たとえば 32 ビット版の libc.so.6
は、 32 ビットオペレーティングシステムでも 64 ビットオペレーティングシステムでも、 /lib/libc.so.6
に配置します。
一方の 64 ビット版のライブラリとオブジェクトは、 lib64
以下に配置されます。 32 ビット版で /lib
や /usr/lib
に配置していたオブジェクトファイルは、それぞれ /lib64
と /usr/lib64
に配置します。このような仕組みにより、 32 ビット版のライブラリは以前と同じ配置のまま、 64 ビット版のライブラリを同時に配置することができるようになっています。
ただし、 32 ビット版の /lib
ディレクトリには、ビットサイズに関係のないデータも含まれていますが、これらについては移動されておらず、従来通りデータが配置されています。これは LSB (Linux Standards Base) と FHS (Filesystem Hierarchy Standard) の仕様に準拠しているためです。
AMD64/Intel 64 の 64 ビットカーネルでは、 64 ビットと 32 ビットの両方に対して ABI (アプリケーションバイナリインターフェイス) が提供されています。しかも、 32 ビット版の ABI については、 32 ビット版のカーネルと全く同じ仕様になっています。これにより、 32 ビットアプリケーションであっても、 32 ビットカーネルの場合と全く同じ方法で 64 ビットカーネルにアクセスできることになります。
64 ビットカーネルでの 32 ビットシステムコールは、システムプログラムが使用する全ての API まではサポートしていません。これはプラットフォームに依存して決まります。このような理由から、 lspci
のような少数のアプリケーションでは、同じビット数のライブラリを使用しなければなりません。
なお、 64 ビット版のカーネルは 64 ビット版のカーネルモジュールだけを読み込むことができます。 32 ビット版のカーネルモジュールを読み込むことはできません。
アプリケーションによってはカーネルモジュールを提供していて、それを読み込まなければ正しく動作しないものがあります。 64 ビットシステム環境で、このような 32 ビット版アプリケーションを動作させたい場合は、このアプリケーションの製造元に連絡をとって、 64 ビット版のカーネルモジュールを作成してもらい、 32 ビット版のアプリケーションで動作するよう依頼する必要があります。