見出し画像

コンピューターの進化の歴史から読み解く。プログラムとは翻訳だらけ (2): OSの登場から Java / .NET まで

前回は、高級言語登場までのいきさつを見ていきましたね。
その続きをみていきましょう。

OS の登場 - IBM System 360

ハードウェアを扱うライブラリー。それを体系立てて一つのパッケージにしたものが OS = Operating System と言えます。
これによって、個別に作る必要のある業務フローやデータにより集中できるようになりました。

この図の様に。
プログラムは、OS に対しての命令になっていくわけです。裏を返すとOSを超えてハードウェア命令をする事が減るわけです。無くなる分けではないですよ。そうするとOSの支配下に置かれる、とも言えますよね。

ここで理解したいのは、OS そのものはあくまでCPUなどのハードウェアを扱うソフトウェアであるという事です。画面やテキストエディターなど利用するユーザーが目にする部分は、補足的な位置づけと言えます。ただ、そこが重要なんでうすよね。プログラマーであっても、OSのユーザーでもありますから。

オペレーティングシステム - Wikipedia

1964年登場の IBM System 360 は、物凄い勢いで全世界のコンピューターが必要とされる人たちに受け入れられました。一時期シェア 70% とも言われています。もう独占状態ですよね。圧倒的に強かった。

System/360 - Wikipedia

この年代は覚えておいてください。その時代にプログラミングを始めた方にすると、IBM というブランド力が圧倒的だったわけです。
そして、このころのコンピューターをメインフレームとかホストコンピューターとか汎用機などと呼びます。ハードウェアからOSまで。単一のメーカーによってがっちりと組まれている。そして「汎用」の名の通り、1つのコンピューターが複数の目的で使えたわけです。

メインフレーム - Wikipedia

問題点
とにかく高価だったんです。ざっくり億円単位😲。
それが故に1台のコンピューターを皆で共有するという発想が必須でした。System 360 があって、そこに接続する端末が別に存在をしていて。モニターとキーボードだけがある状態と言っていいでしょう。現実的は別のハードウェア。ダム端末とも言われています。
このダム端末から、複数人でメインフレームに接続して、プログラムを投下するわけです。メインフレームに TSS (= Time Sharing System) といって1台のコンピューターのCPUを複数人で共有していました。
ところが、なかなか自分のプログラムが実行されなかったんです。数が少なかったんですよね…そして高価であるが故に、使うために予約が別途必要だったそうです。

ダム端末 - Wikipedia

ダム端末は、今でいうとリモートデスクトップとか SSH で、ネットワーク上のコンピューターに接続して操作しているのと、ほぼ一緒ですよね。

UNIX - Windows / Mac OSなどの登場 - OSの大衆化

技術的に新しいものではありません。新製品といっていいでしょう。
その根拠として、図の右上のテクノロジースタックは同じです。何が違うかと言えば、ビジネスモデル、つまり社会実装が違うんです。

UNIX は、特定のリソースのふんだんにある企業・組織しか使えない価格設定だった OS そのものを、誰もが使えるようにしたいという目的で開発・販売がされました。

UNIX - Wikipedia

UNIX の一つ新しかった事は C言語の開発です。これまでの OS はアセンブラで作られていました。UNIXは、C言語で書き直されます。これで OSのコードから、OSの仕組みを理解しやすくなりました。つまり経験の少ないプログラマーに、コンピューターそのものを伝えやすくなったんですね。

問題点
UNIXそのものの目的は素晴らしいんですが。実際には、一般家庭で購入できる価格ではありませんでした。数千万円しましたからね。

そこでPC = Personal Computer が登場してきたわけです。

再度、画面右上のテクノロジースタックを見ましょう。何も変わっていません。ターゲットが一般家庭になったんです。そのために価格破壊を起こした。値段の殆どがハードウェアでしたから。安価なハードウェアでも動くOSを作った。これが当時革命でした。

Apple の Mac は、ハードウェアは Apple製のみです。このモデルは今の iOSと全く同じですね。Apple以外のハードウェアは存在していません。

Microsoft の Windowsは、ハードウェアは自由に選べました。ただ、どんなハードウェアでも動くわけではありません。当時のコンピューター業界の大巨人だった IBM製のコンピューターとの互換性が高かったんです。表現が悪いですが廉価版でした。AT互換機といいます。

PC/AT互換機 - Wikipedia

これによって、実に自由なPCを世界中の人が Hack しまくって、弄りまくって、市場が出来ていきました。Open Innovation と言っていいでしょう。今の言葉だと。
当時コンピューターを業務でやっていた方からすると PC は「おもちゃ」だったんですよね。未だにメインフレームで業務をしたことがある方からすると、PCなんておもちゃだと思います。それでも、市場が受け入れ、一般家庭にも受け入れられ、そして法人の業務にも広まっていきます。

問題点
OSは、CPUに強く依存をしています。その差を完全に吸収するところまで行きません。そのため、x86用の Windows と x64用のWindowsがあります。IA64用のWindowsもありますね。
プログラムは人がわかるテキストファイルで記述した後、コンパイル、つまり翻訳して、そのコンピューターで動きます。機械語になると思ってください。コンパイルしたコンピューターが x86であれば、x86の機械語になるので、x64では動きません。つまり、CPU毎にコンパイルをする必要がありました。

さらに言えば、UNIX上で動くアプリケーションは Windows や Mac OS では動きません。プログラムから呼びだす OSの API が別です。同じファイルであっても。互換性がありません。

OSとCPUに強く依存する。プログラムは書き直すことが多かったんです。

仮想マシンと 賢いJITコンパイラーの登場 - .NET と Java

Java がセンセーショナルに登場したのが 1995年です。Write Once, Run Anywhere が Java の世界観です。

このころになると、ハードウェアの高速化と小型化が進み、所謂、組み込み用のコンピューターでも、アセンブラではなく、C言語などの高級言語でも使用に耐えうるようになってきました。
そして、Windows 95と共に爆発的に世界中の家庭と職場にコンピューターが普及して、インターネットへの接続が始まります。インターネットでは、どんなOSや言語で書かれているか分からないコンピューターとも通信が出来るようにする必要がありました。しかも制御ができないですよね。一般家庭ですからね。Windows / Mac / UNIX に加えて Linux も登場してきます。

アプリケーションも巨大になっていきます。

そこで、1度書いて、プリコンパイルしたアプリケーションが、どのOSでも動くようにする仕組みとして Java が登場します。
Javaは、プログラミング言語でもあり、Java VM (Java Runtime Environment) も含んでいます。仮想マシンですね。この仮想マシンは、皆さんが良く知る Windows や Linux の仮想マシンではありません。あくまでJavaのプログラムのホスティング環境です。Java VMはコンパイルされたソフトウェアですので、Windows 版、Mac版、Linux版。x86版、x64版、ARM版など、それぞれの OSや CPU毎に事前にインストールしておく必要があります。

この Java VM が大事なんです。
コンパイルすると機械語の様になりますね。そのコンパイル時に、OSやCPUに依存しない中間言語にコンパイルするにとどめます。
そして、アプリケーションとして、実際に実行するときに、実際の機械語にコンパイルされます。これを Just in Time Compiler = JIT (「じっと」と呼びます) Compiler が登場しました。
このコンパイラーの進化は凄いんです。自分の動くCPUだけでなく、ネットワーク帯域やメモリ容量などに合わせて、コンパイルもできます。しかも、基本的には1行ずつコンパイルします。実際はもっと賢いですが。つまり、動いているメモリ内のデータなどを参照して、よりよい機械語にする事もできます。環境適応力が半端ないんですよね。 

Java の革新は、この適合力を生み出したことにあると言えます。

Java - Wikipedia

これはアプリケーションが Windows 以外でも動く事を意味します。それに加えて 64bit CPUが登場する過渡期であったこともあり、Microsoft も .NET構想を発表します。
Java VM と同じように .NET Framework があり。JIT Compiler の性能で、競争が加速されていきます。
ただ、.NET Framework は実質的に Windows版しかなかったんです。.NET構想に賛同した方が、.NETを Windows 以外でも動かそうとして Mono の開発がオープンソースで進められます。

Mono (ソフトウェア) - Wikipedia

複数OSのあったスマートフォン向けに Xamarin が登場しますが、これは Mono があったが故に登場したと言えます。

.NET については、別途、取り扱いますが。
2022年2月の今。 .NET はこの仮想マシンの面で大きな進化を遂げています。プログラミング言語の実行環境としては、Windows 以外のOSの対応範囲が非常に広くなったんです! Mac や Linux は勿論、スマートフォンや組み込み系デバイスまでも視野にいれて、非常に短いサイクルで開発が続けられています。


まとめ

OS と 仮想マシン+JIT Compiler の存在まで来ました。
技術の発展だけでなく、社会でのコンピューターの使われ方と一体になっている事が読み解けますよね。
そうなんです。技術的にいいものだけが生き残るわけではありません。社会に受け入れられるのか?課題は何か? それを常に問いながら進化し続けます。

追記:

TSSについてフィードバックを頂きました! ありがとうございます!

荒井 省三 | Facebook

この記事が気に入ったらサポートをしてみませんか?