Sun のスローガンをとても鮮明に覚えています... 「Write Once, Run Anywhere」 . プログラムは標準のバイトコードにコンパイルされるため、Java 仮想マシンを備えたどのデバイスでも実行できるという考えです。何年にもわたって、Java は多くのプラットフォーム/デバイスに採用されてきたようです。
これは意図されたものですか、それとも .NET の意図でしたか。もしそうなら、それを実現するためにどのような努力がなされていますか?
Sun のスローガンをとても鮮明に覚えています... 「Write Once, Run Anywhere」 . プログラムは標準のバイトコードにコンパイルされるため、Java 仮想マシンを備えたどのデバイスでも実行できるという考えです。何年にもわたって、Java は多くのプラットフォーム/デバイスに採用されてきたようです。
これは意図されたものですか、それとも .NET の意図でしたか。もしそうなら、それを実現するためにどのような努力がなされていますか?
ここで他の人によるいくつかのコメントを修正するために、.Net は常にマルチプラットフォームであることを意図していました。そのため、Microsoft は名前空間を "System.*" (プラットフォームに依存しない) と "Microsoft.*" (Windows 固有) に分けました。
Linux、Solaris、および OS X で動作するMonoがあります。実際には、.Net は依然としてほとんど Windows 専用のプラットフォームです。それどころか、それを WORA にすることをプッシュすることは、Microsoft の利益にはなりません。ただし、クロスプラットフォームのように見えます。多くの人が、Linux 上の Mono に対して非常に偏執的です。MS が想定している戦略は、まずそれを Linux アプリケーション プラットフォームの重要な部分に成長させ、その後弁護士を解放することです。.Net の移植性に自分の将来を賭けるつもりはありません。
答えは非常に不安定です。外部ライブラリを含めた瞬間、答えは No に変わります。
たとえば、Microsoft には 64 ビットの JET ドライバーがありません。JET は、MS Access データベースにアクセスするために .NET によって使用されます。
MS Access データベースを使用する任意の CPU ターゲット用にコンパイルされたアプリケーションは、64 ビット バージョンの Windows では失敗します。
(これは、前述のアプリケーションが Mono に移植できないことを無視しています。)
これを文脈に当てはめると、多くの人々の見解では、Java は「Write Once Run Anywhere」という約束を果たさなかったのです。
せいぜいあなたが得たのは、「Write Once Debug Everywhere」または「Write Once はどこでもがらくたのように見える」でした
成功している CLR ベースのアプリケーションはすべて、ターゲット プラットフォームにネイティブなグラフィカル フレームワークを使用して作成されています。
たとえば、次の非常に成功した Linux アプリケーションは、GTK# と呼ばれる GTK への c# バインディングを使用して記述されており、予想されるように winform を使用していません。
Banshee - iTunes のような音楽プレーヤー
fspot - 写真マネージャー
TomBoy - メモプログラム
GnomeDo - クイックランチャーとドック
同様に成功している Windows .net アプリケーションは、GTK# を使用して作成されているのではなく (クロス プラットフォームであっても)、winform または WPF を使用して作成されています。
Google が Chrome を作成するようになったとき、クロスプラットフォームの GUI フレームワークを使用しようとせず、代わりに各プラットフォームでネイティブの GUI フレームワークを使用することを選択しました。なんで?そうすれば、アプリケーションがその環境に適切に適合し、オペレーティング システムにネイティブであるかのように見え、感じ、動作するからです。
基本的に、どこでも write once を実行しようとすると、深刻な妥協をしなければならず、最終的にはどこでも正しく機能しないものになります。
業界は、一度書けばどこでも実行できるという崇高な目標を、実際にはうまくいかなかった良いアイデアとして、ほとんどあきらめました。
mono/.net での最善のアプローチは、下位レベルのバイナリを共有し、各ターゲット プラットフォームでネイティブ GUI フレームワークを使用することです。Linux では GTK#、Windows では winforms または WPF、Mac では CocoaSharp。このようにして、アプリケーションはネイティブ アプリのように見えます。
マイクロソフトはそのような主張をしたことはありませんが、WORA の分野で動きを見せています。たとえば、Silverlight 2.0 は .NET フレームワークのサブセットを使用し、Windows、Linux (Moonlight プロジェクトを通じて)、MacOS、Windows Mobile、および Nokia ハンドセットで利用できます。
他の人が述べたように、Mono プロジェクトはフレームワークを複数の環境にもたらしました。
Mono ではかなり近づいており、SilverLight ではすでにそこに到達しています。
.NET の公式の「意図」は WORA ではなかったと思います。.NET は、将来の MS OS 上で常に動作するように設計されていると言っても過言ではありません。しかし、.NET を他のプラットフォームで実行することを妨げるものは何もありません。Mono は、Windows 以外の OS 用の .NET ランタイムの実装例です。
はい、これは .NET の目標でしたが、Java と同じように強調されていたとは思いません。現在、私が知っている唯一の取り組みは、Linux 上で動作するバージョンの CLI を作成している Mono プロジェクトです。
興味深いことに、Silverlight には、Windows と Mac の両方で実行できるスリム化されたバージョンの CLR があり、同じ Silverlight アプリを変更せずに両方のプラットフォームで実行できます。
CLR (.Net の「仮想マシン」) はオープン スタンダード (CLI) に準拠しているため、理論的には可能です。問題は、その標準の他の実装があるかどうかです。Mono は進行中の別の作業ですが、私が知っている他の作業はこれだけです。
.NET の考え方は、「Write Once, Run Anywhere (Microsoft が選択)」だと思います。しかし、Monoプロジェクトはゆっくりと状況を変えています。
理論的には、そうです。.Net アセンブリは、起動時に JIT (「ジャストインタイム」) コンパイラを使用してネイティブ コードに変換されるバイトコードです。
実際には、Windows 以外に .Net JIT コンパイラを備えたプラットフォームは多くありません。MONOと呼ばれるLinux用のものがあります。
Mac、Sunなどについてはわかりません...
理論的には、この言語は、共通言語ランタイムによって解釈される Java のようなバイトコードにコンパイルされるように設計されています。このメカニズムにより、C# だけでなく複数の言語が連携して .NET フレームワーク上で実行できるようになります。
ただし、Microsoft は Windows 用の CLR しか開発していません。他にも MS 以外の代替手段が開発されていますが、最も顕著なものはMono、CLR 実装、または多数のプラットフォームです (リンクを参照)。
理論的にはそうです、実際には-わかります。
はいといいえ。.NET 環境の一部は標準であり、広く採用することができます。
たとえば、ランタイム (CLR) にはMonoと呼ばれるポータブル バージョンがあり、これはマルチ プラットフォームでオープン ソースであり、(たとえば) Second Life で使用されます。
意図、または少なくとも売り込みは、これが当てはまることでした。現実には、.NET は他のプラットフォームでは実際には実行できません。唯一の大きな例外は、オープン ソース プロジェクトであるMonoです。これは基本的に、Linux、Solaris、Mac OS X、Windows、および Unix で動作する .NET ランタイム (Java 仮想マシンに相当) を書き直したものです。
かなり成功していますが、公式にはサポートされていません。
モノリシックな Acme corp の雇用主に .Net と Linux を採用してもらうことを考えている場合は、忘れてください。現実的には、.NET では Windows マシンを使用しています。
はい、.NET には、JVM に相当する .NET である共通言語ランタイム (CLR) があります。Microsoft は、Java ほど多くのプラットフォームでサポートしていませんが、Mono プロジェクトの助けを借りて、通常の注意事項でクロスプラットフォーム アプリケーションを実現することができます。
.NET は単なる CLR ではありません。プラットフォーム全体です。
Microsoftが他のWindows以外のプラットフォームでのdotnetに真剣に取り組んでいたとしたら、同じライブラリを再度書き直す必要性を回避して、他の人が再利用できるようにクラスライブラリをリリースしていたでしょう。一方、Sunはこれを行っており、別のプラットフォームへの移植を希望しない場合は、障壁が少なくなります。当然のことながら、Javaを使用する場合でも、VMを記述してネイティブ処理を行う必要がありますが、クラスライブラリ全体を再実装するという頭痛の種を回避するのに役立ちます。言語の標準化は、ジョンの技術者をつかむためのマーケティング戦略です。libsのない言語は無価値です。次のプロジェクトをprjkitiveタイプで実行してみてください...そうです、独自の文字列クラスなどを記述して、ライブラリが利用できない場合に標準化言語がどれほど役立つかを教えてください...
これが.NETの設計目標であったとは思いません。Microsoftは、Windows以外のプラットフォーム用のソフトウェアを作成する人々には特に関心がありません。
ただし、The Monoプロジェクト(http://www.mono-project.com)があります。これは、「.NET開発プラットフォームのオープンソースのUNIXバージョンを開発するためにNovellが後援するオープン開発イニシアチブ」です。
それは、「どこでも」の定義によって異なります。Java 仮想マシンと .Net フレームワークにはいくつかの種類があります。また、ほとんどの場合、デスクトップ vm/フレームワーク用のコードを記述して、携帯電話で実行することを期待することはできません。
そう。ある意味では、Java でさえ純粋な「Write Once, Run Anywhere」ではありません。
ただし、Java の VM は現在複数のオペレーティング システムで実行されていますが、.Net フレームワークは Windows デバイスでのみ実行されます。
Linux、Solaris、Mac OS X、Windows、および Unix で .Net サポートを提供する「Mono」と呼ばれる興味深いイニシアチブがあります。こちらをお読みください: Mono サイト
dotNet は、JVM と機能が似ている CLR により可能です。しかし、私はMSがそれを意図していたとは信じていません。 http://www.mono-project.com/Main_Page は役に立つかもしれませんが、MS 製品ではありません。ところで、さまざまな j2ee コンテナーが j2ee アプリの WORA 概念を曇らせているのと同じように、IIS 以外で実行されている ASP.NET アプリは、異種のプラットフォーム間で実際には同じように動作しません。
.NET は Windows でのみ (公式に) 利用可能であるため、.NET は記述されておらず、どこでも実行できます。しかし、Mono チームは、Windows を超えて .NET を広めるのに力を入れていますが、公式のものには常に遅れをとっています。
Microsoft にとって、すべてのプラットフォームとデバイス用のランタイムを作成することは当初の計画ではなかったと思いますが、文書化された (?) 中間言語を使用してこれを奨励しました。
簡単な回答 -- いいえ。Microsoft は、.NET 用の MS オペレーティング システム (Windows Mobile を含む) のみをサポートしています。
長い答えです。Linux やその他の OS、特に Rotor やMono用の .NET フレームワークを複製する公開オープンソース プロジェクトがあります。すべてをサポートしているわけではありませんが、Silverlight を含む多くの .NET コードをデプロイできます。
他の回答者からの回答を考えると、Microsoft が .NET を WORA イニシアチブにすることを実際に意図していたのかどうかについては、まだはっきりしていません。本当のことを知る唯一の方法は、Microsoft .NET チームの誰かにこの件について話してもらうことです。
.NET の元の WORA の意図を明確に知ることはできないため、これを実現しようとしている取り組みを指摘できます (以前の回答で述べたように)。
この取り組みは、Microsoft 以外で行われているイニシアチブです。
Mono は Novell (以前は Ximian) が率いるプロジェクトで、C# コンパイラや共通言語ランタイムなど、Ecma 標準に準拠した .NET 互換のツール セットを作成します。Mono は、Linux、BSD、UNIX、Mac OS X、Solaris、および Windows オペレーティング システムで実行できます。
この取り組みは、Microsoft によって熱心に追求されています。Silverlight 2.0 は、.NET 3.0 と同じバージョンのフレームワークを実装しており、ブラウザーを通じてフレームワークを複数のプラットフォームにうまく配信しようとしているようです。
Microsoft Windows および Mac OS X オペレーティング システムで使用される複数の Web ブラウザ製品と互換性があります。Windows Mobile 6 および Symbian (Series 60) 電話以降のモバイル デバイスもサポートされます。
GNU/Linux への機能の持ち込みについて具体的には触れていませんが、[Moonlight]( http://en.wikipedia.org/wiki/Moonlight_(runtime))という名前のサードパーティのフリー ソフトウェア実装があるようです。
これは私たちが現在知っていることのようですが、前述のように、.NET チームの誰かがこれに参加して、WORA が実際に独自のイニシアチブであったかどうかを適切に明確にすることができれば、非常に役に立ちます。
アイデアは、WORA ではなく、異なるプログラミング言語間の相互運用性を作成することだったと思います。
WORA が本当に当初の目標だった場合、Microsoft によって完全にサポートされた .NET 実装がすべての主要なプラットフォームで見られるようになると思います。Sun が屋上から WORA を叫んでいたとき、Microsoft の反撃は "Write Any (language) Run on One (platform)" (WARO:-) だったことを思い出すようです。他の誰かが言ったように、彼らは常に WORASLAIW (Write Once Run Anywhere So Long As Its Windows) の確固たる支持者であったと思います。
ご指摘のとおり、戦場がデスクトップからブラウザへと大きく移行した今、Flash/Flex アクションの一部を取得しようと、Silverlight の方針を少し変更しているようです。
それは間違いなくWORAであることを意味していました. それは、MS が Anywhere and Everywhere が今では Windows になると考えただけです。Linux と MacOS がまだ存在することを誰が知っていたでしょうか。しかし、PDC に参加したすべての Mac から判断すると、半分は正しいか、半分は間違っていたと思います。
しかし、それはマルチプラットフォームの Win9x/WinNT/Mobile です