今日のチャットより。
10:52 <B> しかし、.NET F/W は Windows じゃないよん、ってとこを理解してくれてない。 (--;
こういう話はよくありますね。
このあたりの話は、ソフトウェア技術者であれば、的確に把握しなければならない領域ですから、注意しましょう。たとえ、.NET Frameworkを是とするのであれ、非とするのであっても、それについて意見を述べるなら、それが何であるかを正しく理解する必要があります。そのあたりがルーズになっている事例は、インターネット上でよく見かけます。もちろん、この話題に限らず、"Linux"や、"オープンソース"といった言葉に関しても、相当怪しい解釈を見かけます。
それはさておき、そもそもWindowsとはいったい何でしょう?
.NET Frameworkとはいったい何でしょう?
Windowsはマイクロソフト製の一連のOSの名前ですね。実は特定のOSを示す言葉ではありません。とはいえ、マイクロソフト製のOSでもWindowsと呼ばれないものがあります。MS-DOSはWindowsとは呼ばれていません。Windowsという言葉は、グラフィカルなユーザーインターフェースを持つ一連のOSの名前かというと、そうでもありません。純マイクロソフト製ではありませんが、IBMと共同で開発したOS/2というものも歴史的にあります。これに含まれるプレゼンテーションマネージャは、グラフィカルなユーザーインターフェースを持ちます。
では、OS/2とWindowsを分け隔てるものは何か、と考えると、Windows APIを持っているか否か、ということができます。Windows APIはAPIの一種ですが、これもたった1つのAPIを指し示す言葉ではなく、16bitと32bitの違いや、その他の相違など、様々なバリエーションがあります。それでも、多くの名前や概念が共通しています。たとえば、ウィンドウを作るのがCreateWindowで、ウィンドウにメッセージを送るのがSendMessageで、ウィンドウが作成されたことを示すメッセージがWM_CREATEといったことが共通になっています。ですから、これらは同じ体系の上にあるAPIと言えるでしょう。
では、このような同じ体系の上にあるAPIを持っているOSがWindowsであると考えたとき、それと相反するものとして、同じ体系の上に無いAPIを持ったOSも考えられます。たとえば、OS/2もUNIXも、そういうOSであると言えます。
しかし、ここで注意すべきことが1つあります。あるOSが持つAPIがワンセットに限定されるという制約はないということです。実際にWindows NT系の世界では、Windowsの他にPOSIXサブシステムなど、複数のAPIセットが提供されています。
ここで注目することは、APIは後付可能だということです。それはJavaを見ると分かります。Javaの環境は、あとからWindowsにインストール可能ですが、Javaはそれ自身の独自のAPIを持っています。それは、Windowsと同じ体系上にあるAPIではありません。つまり、WindowsというOSが、Javaという異質なAPI体系を持つことができるということです。
ここで、このWindows上でJavaアプリケーションを開発したとします。Java標準APIだけを利用しているとすれば、このJavaアプリケーションは、WindowsではないOS上でも動作します。つまり、これはWindowsアプリケーションではないわけです。
さて、ここからが本題です。
.NET Frameworkは、独自のAPIを持っています。これは、Windowsと同じ体系上にあるAPIではありません。その点で、Javaと同様です。同じように、.NET Frameworkを用いて開発されたアプリケーションソフトは、.NET Frameworkアプリケーションであって、Windowsアプリケーションではないわけです。
「しかし、Javaと違ってWindows上でしか動かないではないか」と反論する人がいると思いますが、それはいくつかの意味で間違っています。
まず第1に、.NET Frameworkの相当部分と互換性のあるAPIがオープンソースとして開発されていて、Linuxなどの上で動いているということがあります。この範囲内であれば、Windows上の.NET Frameworkで開発されたアプリケーションがそのままLinuxで動くことも当然あり得ます。
第2に、仮にWindows上の.NET Frameworkでしか提供されたAPIを用いたアプリケーションソフトを開発したとしても、それがWindowsでしか実行できないアプリケーションであるとは言えないのです。つまり、WindowsがWindowsと同じ体系のAPIを持つOSの名称であるなら、.NET Frameworkアプリケーションを実行させるためにこのようなAPIの存在は必須ではない、ということです。つまり、Windows APIを持たないOSがフルセットの.NET Frameworkをサポートしている、という事態も当然あり得る話ということです。今は、そのようなOSを作ることは実用上意味がないかも知れません。しかし、未来のいつかの時点で、Windows APIはほとんど利用されないレガシー機能だから切り捨てよう、という話もあり得ることだと考えられます。また、互換OSを開発する際に、.NET Framework APIは互換を取るが、Windows APIは互換を取らない、という選択もあり得るでしょう。
そのような事態を、「あり得るもの」として考えておくことが、責任ある技術者として必要だと思います。.NET Frameworkという技術を利用するにせよ、利用しないにせよ、それを判断するには、そういう的確な考えが必要でしょう。
「.NET FrameworkはWindowsじゃない」ということです。