Linux/Unixでは64ビットへの移行はどのように処理されましたか? Windowsの世界にはまだ問題があるようで、* nixの世界でどのように処理されたか興味があります。
カーネルを64ビットにするために必要な作業は、DEC Alphaシステムを使用してlooooong時間前に行われました。ただし、プログラムは別の問題です。
私がこれまでに見た一般的なコンセンサスは次のようです。
/lib
および/lib64
バイナリが混在するシステムのディレクトリそれ以外は、32/64ビットの混合ビルドからの「悲しみ」はあまり見られません。
Windowsと* ixは、移行に異なるデータモデルを使用しました。このUNIX.org page は少し古いですが、それでもトレードオフの概要がわかります(long long
は後でC99に追加され、少なくとも64ビット)。同じトピックについて ウィキペディアの記事 も見ることができます。 UNIX.orgの記事の最後で提唱されているように、ほとんどのUNIXライクなシステムはLP64を採用しています。つまり、long
、long long
、およびポインターはすべて64ビットです。
Windowsは、LLP64データモデルと呼ばれるものを採用しました。これは、long long
とポインターのみが64ビットであることを意味します。 long
は32ビットのままです。理由の一部は、long
がint
に収まると想定した壊れたコードを調べて修正したくないということでした。
実際には、ACMキューで「64ビットへの長い道のり」を試してください: http://queue.acm.org/detail.cfm?id=1165766 これは後でACMのCommunicationsによって取り上げられました。最初の64ビットマイクロはMIPSR4000で、SGI Crimson 1Q1992で出荷され、DecAlphasはその年の後半に出荷されました。
R4000は、最初は32ビットモードで実行され、その後64/32モード、つまり64ビットOS、64ビットまたは32ビットのユーザーコードで実行されていました。 Alphaは常にUNIXを64ビットのみで実行していました(32ビットアプリのインストールベースがなかったため、妥当な選択です)。
1990年代後半、XFSがLinuxに移植された頃(本当に64ビットが必要だった)、SGIは64ビットサイズのLinux(Itaniumで実行するため)に貢献しました。
Linuxディストリビューションはほとんどがオープンソースであるため、すでに大規模な移行が行われています。独自のソフトウェア(Skypeなど)を使用しない限り、不利な点なしに純粋な64ビットシステムを実行できます。
ただし、IMHOの本当の違いは、通常、最初に移植されるのはオープンソースソフトウェアであるため(一部のボランティアは何かを再コンパイルする必要があります-おそらくいくつかのコンパイルの問題を修正する必要があります)、またはほとんどの場合、再コンパイルされたばかりを除いてすべて;)-そして最後に移植されたプロパティ。
おそらくLinuxにはさらにリポジトリがあり、インストールは自動的に処理されます。64ビットまたは32ビットバージョンを選択する必要はありません(システムが自動的に選択します)。 Windowsの場合、プログラムがダウンロードされ、64ビットバージョンと32ビットバージョンが別々になります。
これが、Windowsバイナリが通常32ビットである理由だと思います。これは万能であり、すべての人が64ビットバージョンに移行しているわけではありません。