年三日坊主のKKです。
拙僧、コンピュータ大好き坊主でITエンジニアという両極端な属性ゆえ、いろいろなギャップを感じることが多いです。
エンジニアではない方には意外に思われるかもしれませんが、エンジニアにだって得意/不得意もあれば専門分野もあります。
そんなギャップの一つをご紹介したいと思います。
先日、弊社の「おれちゃん」ことレイが講師となってTerraformを基礎から学ぶ社内セミナーが開催されました。
(セミナーの内容は「Terraformの紹介」、「Terraformの基礎基本」として公開していますので是非ご覧ください。)
Terraformのインストールと設定を進めていたところ、セミナー前からTerraformを触っていた同僚ならたけぽんのTerraformのバージョンが古いというので、バージョンアップしようとインストーラのダウンロードをしようとしていた時のことです。
あれ?なんでわざわざ32bit版のインストーラ「386」をダウンロードしたんです?
え?インテルCPU用のインストーラは「386」でしょう?
社用PCは64bit CPUなので「AMD64」のインストーラで良いんですよ。
セミナー資料にあるパッケージ管理ツールの Chocolatey でも、AMD64版がインストールされますよ。
いやいや、インテルCPUのPCにAMD用のアプリ入れたら不具合が起きるかもしれないじゃないですか。
「AMD64」はAMD用って意味じゃないですよ?
え?
え?
TerraformのダウンロードページにはOS別に複数のインストーラが登録されています。
これは同じOSでもコンピュータのCPU仕様に合わせてインストーラが分かれているからです。
ここで問題になるのは「CPU」が同じ/違うというのは何を根拠に同じ/違うと言っているかです。
同僚はインテル社のCPUとAMD社のCPUは「違う」と言っていたのですが、今回の場合は「同じ」が正解でした。
なぜ、このような勘違いが起きたのでしょう。
実はこの歴史的経緯だけで何本も記事が書けるのですが、端的に説明すると次のようになります。
-
昔々インテルは8086や80186、80286など自社の16bit CPUの製造をAMDなど複数の企業に許可していました。
インテルからCPUの製造を許可された各社はインテル製CPUより低価格や高速で動作するバリエーションを作って差別化していました。
-
インテルは16bitだけでなく32bitにも対応したCPU(Intel386)を開発しました。
インテルは32bit対応のIntel386とその次のIntel486の製造もAMDなどに許可していました。
AMDを含めインテルからCPUの製造を許可された各社は32bit CPUでもインテル製CPUより低価格や高速で動作するバリエーションを作って差別化していました。
-
インテルはIntel486の次の新しい32bit CPU(Pentium)から他社に製造を認めないことにしました。
しかし、AMDを含めインテルからCPUの製造を許可されていた各社はその後も「物凄く高性能化したIntel486」という名目でインテルの32bit CPUと同じソフトウェアの動くCPU(インテル互換CPU)を作り続けました。
-
これら16bitと32bitのインテルCPUおよびその互換CPUの仕様はまとめて「x86」と総称されています。(8086、80286、Intel386、Intel486などPentiumまでのインテルCPUは「~86」という名前だったなので「x86」)
また、Intel386以降の32bitのインテルCPUおよびその互換CPUの仕様は最初のCPUの名前から「386」と呼ばれることが多いです。
-
さて、その後もインテルとAMDなどインテル互換CPUメーカーは「386」仕様のソフトウェアが動く新しいCPUの開発競争を続けます。
ところがインテルはこれまでの16bit/32bit CPU(x86や386)とまったく互換性の無いIA-64という仕様の64bit CPU(Itanium)を開発しました。
(インテルはこれ以降、自社の32bit CPU仕様を「IA-32」と呼びます)
これがヒットすれば忌々しいインテル互換CPUメーカーを滅ぼすことができるというわけです。 -
一方、AMDはインテルが386を開発した時のように、386仕様にも対応した64bit CPUを開発します。
この386仕様にも対応した64bit CPUの仕様は当初「x86-64」と発表され、その後AMDは正式名を「AMD64」としました。 -
このままなら「AMD64」はAMD独自の64bit CPU仕様となるはずでした。
ですが、インテルのIA-64には様々な問題があり最終的に失敗します。そこでIA-64が躓いた段階でインテルはIA-64とは別にIA-32を64bitに対応させたCPU、つまり386仕様にも対応した64bit CPUを開発します。
このインテルの386仕様にも対応した64bit CPUの仕様は当初「IA-32e」と発表され、その後インテルは正式名を「Intel 64」としました。
ここで逆転現象が起きます。
これまでAMDなどインテル互換CPUメーカーはインテルの仕様を後追いしてきました。
しかし、インテルは「Intel 64」を「AMD64」互換仕様としました。
つまり、64bitにおいてはインテルはAMD互換CPUメーカーになりました。
そして、x86系の64bit CPU仕様は「AMD64」互換で統一されます。
ただし、その呼び名は様々な事情でばらつきがあります。
一番最初の「x86-64」というのは、8086から続くインテルCPUの64bit拡張仕様という意味ではわかりやすく、また最初期からこの仕様をサポートしている製品やプロジェクトが採用している傾向があるように感じます。
もっとも一般的なのは「x64」です。
Intel 64、AMD64が「~64」なので「x64」でもあり、「x86」や「386」などと同じ3文字で納まりが良くインテル、AMDどちらにも依存しない名称でもあります。
その次に元々の仕様名である「AMD64」が使われている印象があります。
今回の話題のきっかけとなったTerraformでも、すべてのOSで「AMD64」表記になっています。
macOSが動作するIntel MacにAMD CPUモデルは一つもありませんが「AMD64」であることからも仕様名であることが明白です。
なお、厳密にはIntel 64、AMD64には違いがあります。
しかし、実際には新モデルが出るたびにインテル、AMD相互にその差異を埋めてきており、通常のアプリケーション開発においてはその差異を意識することはありません。
と、いうわけで近頃のインテルの64bit CPUでも「AMD64」を使えば良いんですよ。
へぇー、そうなんですね。「386」でも普通に使えてたから疑問に思いませんでしたわ。
(話長げぇんだよ。)
「386」版も動くというか「AMD64」って仕様の恐ろしいところは64bitだけじゃなく32bitも16bitも動く互換性なんですよね。
というわけで、こういったCPUの仕様の変遷というのはコンピュータ大好き坊主の大好物な話なので、ついついITエンジニアなら誰もが知っていそうな気になりがちですが、そんなことは無いというギャップを感じたという事例紹介でした。
なお、本記事の執筆にあたっては本文中に記載したサイトの他、以下のサイトを参考にさせて頂きました。
・[フリー写真] マザーボードに装着されたCPU - パブリックドメインQ:著作権フリー画像素材集
・ロードマップでわかる!当世プロセッサー事情 第63回:x86初期からK5まで AMDの歩みを振り返る - ASCII.jp・大原雄介
・x86とは - 意味をわかりやすく - IT用語辞典 e-Words
・i386(80386 / Intel 386)とは - 意味をわかりやすく - IT用語辞典 e-Words