![株式会社匠技術研究所 簡明な情報基盤を構築 匠技術研究所](https://blogimg.goo.ne.jp/user_image/21/85/3bfc5e113e0e2df5940fb9c3ba4eed11.png)
Microsoft .NET Coreのオープンソース化が推進するCross-Platformソフトウエア
いつもアクセスありがとうございます。匠技術研究所の谷山 亮治です。
今回は2014年に情報公開とオープンソース化の方針が明確になったMicorosft .NETの影響について考えてみます。
Micoroft .NETのオープンソース化は、MicrosftがWindowsをオープンソース化したことと同値です。Micorosftがクローズドなソフトウエア開発システムから、オープンな開発戦略に舵を切ったことは、今後のソフトウエア業界に大きな影響を与えることになります。
Microsoftは古からあるソフトウエア開発・実行環境Win32 API(正確にどう呼ぶかを知りません)から.NET環境への移行を進めています。.NET環境は、Javaも目指すように以下の明確な方針があります。
1.ハードウエアとソフトウエアを明確に分離
2.UI(User Interface)とソフトウエアを明確に分離
3.ネットワークとソフトウエアを明確に分離
4.データーとソフトウエアを明確に分離
これが実現するとコンピューター上のソフトウエアにとって.NETは基本ソフトそのものの位置づけになります。すなわち、Microsoftにとって.NETの開発は、モダンな基本ソフトの開発そのものなのです。Microsoftは2000年頃に.NETのCLI(Common Language Infrastructure)を公開しており、2001年にはECMAで、2003年にはISOで、2008年にはJISで規格化されています。
これまでの規格化では「APIを公開する」ところまでで「APIをどう作ったか」は公開されていません。2014年11月の.NET Core等のオープンソース化の発表は「APIの作り方」を公開し、その作り方の再利用を許可するものです。.NETの作り方が判れば、様々なハードウエアと基本ソフトに移植することができます。このことはソフトウエア開発者にとって、作ったソフトウエアの利用範囲が広がります。
2000年ごろに.NETのAPIが公開されたことにより、.NETと互換の環境をオープンソースで実現するプロジェクトも立ち上がり、それをリードしているのが"Mono Project"です。Monoは「.NETの作り方を考えて」作っており「作り方」もオープンソースとして公開しています。ソフトウエアから見た場合「MonoはMicrosftの.NETと外見はそっくり」ですが、中身は全く違うものです。
Microsoftは、ハードウエアおよび周辺装置と密接に連携するWin32 APIプログラム環境から脱却できないでいることも事実です。それは.NETの登場以前から開発されたそれこそ莫大なソフトウエアが使われ続けているからです。Win32 APIプログラム実行基盤から.NETの実行基盤に移行するポイントは「ソフトウエア開発者の気持ち」そのものです。ソフトウエアの利用者にとっては、どちらでも差はありません。ソフトウエアの利用者にとって関心があるのはWindowsのバージョンではなく「今使っているソフトウエアが未来永劫使えるかどうか」です。
Microsoftは.NETという形で、プログラムの開発と実行間環境を提示し、さらに規格化も進めてきましたが、ソフトウエアの利用者は「新しいWindowsでプログラムが動けば良い」ので、Windows 32 APIプログラムを今でも使い続けています。またソフトウエアの開発者は古いとはいえ「今動くソフトウエア」をわざわざ新しい.NET環境で作り直すことはしないのです。
一方で、Windows PCの性能が画期的に向上し、.NETのように基本ソフトとアプリケーションの間に「一枚挟んでも」充分な速度でソフトウエアが実行できる時代になりました。同時にスマホやタブレットの普及により、ソフトウエアの実行環境が多様化しました。この分野の基本ソフトはAndroidとiPhoneで代表されるiOSが主流で、Windows Phoneの普及は微々たるものです。この分野もやはりハードウエアの性能が画期的に向上し、PCと同様に、基本ソフトとアプリケーションの間に一枚挟んでも充分な速度でソフトウエアを実行できる時代になっています。
Microsoftはこの分野に出ていくためにも、独自ハードウエアと独自基本ソフトを提供する従来型の開発手法を捨てたのです。.NETをオープンソースで公開することで、様々なデバイスの上で動く.NET環境を提供し、同じソフトウエアを様々なデバイスの上で使うことができることを実現する方向に転換しました。それも「Windows上ではこう作っているから、他でも宜しく真似て。」ではなく「Windows、Mac OS X、Linuxではこう作っているから、そのほかはよろしく真似て。」ということです。
アプリケーション開発者は.NETの上で開発すればWindows、Android、iOS、Linux上でアプリケーションを動かすことができます。もちろんユーザー・インターフェイスのデザインが違うので、その部分での機種依存はありますが、同じソースコードでこれらの基本ソフトに対応できることはソフトウエア開発者にとって素晴らしいことです。
既にJAVAで開発している方からすると「同じようなものがもう一つ立ち上がる」ことになります。お互いオープンソースになることで、互いの実装に影響を与え、お互いの品質が向上することにつながります。悪い話ではないのです。
引き続き、この分野にも注目していきます。