Windows 向けのソフトが Linux で動かないのはなぜですか? Windows 向けのソフトが動く Linux を作るのは、どんな部分が難しいのでしょうか。当方、難しいことはわかっておりません。

回答の条件
  • 1人5回まで
  • 登録:2007/02/24 18:46:39
  • 終了:2007/02/26 10:12:05

ベストアンサー

id:macos-x No.1

macos-x回答回数376ベストアンサー獲得回数382007/02/24 19:01:17

ポイント40pt

PC Watchにちょうど良い記事が載っていました。

http://pc.watch.impress.co.jp/docs/2007/0223/ubiq174.htm


上記からの引用ですが

『このWin32 APIはMicrosoftが定義したものなので、他のOSベンダはそのAPIを利用したOSを作るのは非常に難しい(厳密に言えばAPIは公開されているから、リバースエンジニアリングでなく同じ動作をするものを作ることができれば不可能ではないはず)ので、確かにWin32 APIを握っているという意味で、それがMicrosoftの強みであることは間違いない。』

ってところでしょう。


このWin32 APIをLinuxで動かすプロジェクトとしてWINEがあります。

http://ja.wikipedia.org/wiki/Wine

id:sample2

なるほど。それにしてもWin32APIっていい加減、歴史がずいぶん長いですよね。それほど再現が難しいんですかね……。

あとXPがVistaになったら動かなくなっちゃうソフトと、問題なく動くソフトがあって、その違いも私にはよくわからないです。なぜかメーカーソフトに引っかかるのが多い。フリーソフトはたいてい、問題なかったりする。ViXとか、ずっと開発が止まっているのにまったく問題ないですからね。どうなってるのか、と思います。

2007/02/24 19:14:07

その他の回答(6件)

id:macos-x No.1

macos-x回答回数376ベストアンサー獲得回数382007/02/24 19:01:17ここでベストアンサー

ポイント40pt

PC Watchにちょうど良い記事が載っていました。

http://pc.watch.impress.co.jp/docs/2007/0223/ubiq174.htm


上記からの引用ですが

『このWin32 APIはMicrosoftが定義したものなので、他のOSベンダはそのAPIを利用したOSを作るのは非常に難しい(厳密に言えばAPIは公開されているから、リバースエンジニアリングでなく同じ動作をするものを作ることができれば不可能ではないはず)ので、確かにWin32 APIを握っているという意味で、それがMicrosoftの強みであることは間違いない。』

ってところでしょう。


このWin32 APIをLinuxで動かすプロジェクトとしてWINEがあります。

http://ja.wikipedia.org/wiki/Wine

id:sample2

なるほど。それにしてもWin32APIっていい加減、歴史がずいぶん長いですよね。それほど再現が難しいんですかね……。

あとXPがVistaになったら動かなくなっちゃうソフトと、問題なく動くソフトがあって、その違いも私にはよくわからないです。なぜかメーカーソフトに引っかかるのが多い。フリーソフトはたいてい、問題なかったりする。ViXとか、ずっと開発が止まっているのにまったく問題ないですからね。どうなってるのか、と思います。

2007/02/24 19:14:07
id:HiroCom777 No.2

HiroCom777回答回数23ベストアンサー獲得回数22007/02/24 20:17:53

ポイント20pt

本来、プログラムを作るときには考えなければならない事が大量にあります。WindowsやLinuxは、それらの膨大な事をある程度代わりにやってくれるサービスをもっているのです。

WindowsやLinux向けのプログラムは、それらのサービスを使って動いているのですがそれぞれは殆ど互換性はないのです。

(と、言うか全く別物)

これが、両方で動くプログラムを作るのが難しい理由だと思います。

id:sample2

残念です……。

2007/02/24 20:49:03
id:imo758 No.3

imo758回答回数121ベストアンサー獲得回数192007/02/24 20:19:53

ポイント30pt

理由は簡単なことで、OSごとにお約束が違うからです。

OSはユーザーからプログラムの実行を要請されると、プログラムの概要を調べ、そのプログラムのための環境を用意し、適切なメモリにプログラムを読み込み、プログラムに実行を預けます。

しかし、OSによってプログラムの概要の書き方も、プログラムに与えられる環境も、全く異なります。例えば必要なスタックの大きさを示す場所であったり、プログラム間通信に使うメモリの場所であったり、ファンクションコールでどのレジスタが保存され破壊されるかが違ったり…あらゆることが違います。(あまり詳しくは無いので具体的には間違っているかもしれませんが)

大部分とまではいいませんが、OSの多くの部分がプログラムとのお約束の処理に割かれています。OSがCD何枚分、何ギガバイトに相当するか考えれば、いかにお約束が膨大であるかお分かりいただけると思います。

それと、OSに隠し仕様があり、それを使うプログラムがある場合、エミュレートするのはさらに困難になります。

時々あることなのですが、性能の追求や無作法などが原因で、一部のプログラムはOSで定められている規格を無視してプログラムされる場合があります。例えば特定のファンクションコールで保存が保証されていないレジスタが実際には保存されることを使って、プログラムすることがあります。しかしOSのバージョンアップやパッチなどで実際にそのレジスタが破壊されるようになると、そういった一部のプログラムは動かなくなってしまいます。

まあこの原因が多いかどうかは全くわかりませんが、そういうこともあります、ということで。

これらの壁を越えるためには、Windowsの真似をするLinuxのプログラム、つまりエミュレーターを作ればいいのではないか…ということになりますが、OSというのは機能が複雑多岐にわたるので、仕様としてわかっている部分をまねようとするだけでも膨大な手間がかかります。また著作権や特許などの問題もあります。

で…macos-xさんが紹介されたWINEなどはエミュレーターではないようですね。Wikipediaに書かれた内容によれば、どうやらWindows用のプログラムをLinux用に書き直して、Linux上でプログラムを直接動かすみたいですね(間違ってたら指摘お願いします)。こりゃまたえらく大変そうで…。

id:sample2

UNIX の再発明が Linux ならば、Windows の再発明も誰かやってくれないかな、と思っています。Windows2000 を使い続けられない唯一最大の理由がサポート終了。そんな理由で OS を新しくしなきゃならないのが悔しい感じです。

WINE については私もいまひとつ理解が及びませんが、Win32 API 向けの命令を受け取って Linux で処理できる命令体系に変換するものと解釈しています。

OS がバージョンアップすると使えなくなるソフトウェアの話ですが、仰るような事情だとすると、フリーソフトの作者の方がメーカーのプログラマーより仕様に忠実なことが多い、ということなんでしょうかね。ACDsee みたいな、そんなにすごいことしてる? みたいなソフトが Vista で動かないのに ViX は 98 から Vista まで全部対応ですからね。

2007/02/24 20:57:19
id:KazyN No.4

KazyN回答回数352ベストアンサー獲得回数322007/02/24 21:09:19

ポイント20pt

OS がバージョンアップすると使えなくなるソフトウェアの話ですが、仰るような事情だとすると、フリーソフトの作者の方がメーカーのプログラマーより仕様に忠実なことが多い、ということなんでしょうかね。ACDsee みたいな、そんなにすごいことしてる? みたいなソフトが Vista で動かないのに ViX は 98 から Vista まで全部対応ですからね。

このあたりの事についてですが....

フリーソフトの作者さんは、一般的に公開されている「比較的標準的なAPI」を組み合わせて開発されています。

こういった部分は、OS が新しくなっても互換性が保たれていることが多いため、結果的に「動いてしまう」ことが多いだけです。

それに対し、それなりのコストをかけて開発されている(まっとうな)製品版ソフトウエアでは、独自のチューニングなどで、かなりそのOSの内部の仕様に依存した機能を利用していることがあります。

こういった部分は、OS バージョンアップの影響を受けやすい部分でもあるため、これまた結果的に動かなくなるケースが出てくるわけです。

表面に見える機能のすごいかどうかと、内部処理の複雑さはあまり関係ないので、一概にフリーソフト作者さんの方がメーカーの開発者より忠実ということにはなりません。

id:sample2

チューニングの成果があってメーカーソフトの方が圧倒的に高速高性能に動作してくれるなら納得できる話なんですけどね。

例えばDVDのバックアップソフトとか、アクセスコントロールを解除する機能の問題を脇に置くとしても、DVD decrypterより高速に起動し、操作手順がシンプルで、短時間の内に作業を完了できるツールが他にありますか。ないと思います。それでいて8000円も9000円もするようなツールがSP2では動きません、Vistaでは動きません、バージョンアップ版は6000円です、とかやっている。何それ、って思いますよ。DVD decrypterはVistaでも相変わらず問題なく動作しているわけです。変な話だと思います。

Vistaで動かないACD seeもコノヤローと思う。バージョンアップで小銭を稼ぎたいだけなんじゃないのか、と邪推したくなります。

2007/02/25 05:49:21
id:b-wind No.5

b-wind回答回数3344ベストアンサー獲得回数4402007/02/24 22:36:53

ポイント20pt

Windows の再発明も誰かやってくれないかな

している人はいます。

Japan.internet.com Webテクノロジー - 『Windows』互換 OS 開発プロジェクト『ReactOS』が活動再開


ただ、UNIX に関しては POSIX という形で標準化されていますしソースコードも公開されていましたが、Windows の場合はソースコードは原則非公開です。

ブラックボックスの中身を外からの推測だけで組み立てなければならないわけです。

id:sample2

それにしても時間がかかるものなんですね。人員の問題とかいろいろあるんでしょうけど。ReactOSみたいなOSじゃないと、私のような一般人にはWinから乗り換えたくならないです。Linuxは仕事で2年くらい使いましたけど、自分の家のパソコンに入れたいとは微塵も思わなかったもの。

古いパソコンにLinux入れてみたら? みたいな話をもらったことはあったけど、ソフトウェア資産とか慣れ親しんで使いやすい設計とか考えたら、Win98の方がずっといいや、みたいな。

ReactOS応援したいな。

2007/02/25 05:55:33
id:from_kyushu No.6

from_kyushu回答回数50ベストアンサー獲得回数42007/02/24 23:01:39

ポイント20pt

Windowsの再開発とは言いがたいかもしれませんが、「Microsoft Windows NT/XPやWindows Server 2003のアプリケーションやドライバとオブジェクトコード互換を持ったオペレーティングシステムを開発することを目標としている」(引用元:Wikipedia)オープンソースのOS"ReactOS"があります。

まだアルファ段階であり実用に耐えうるものではないにしろ、なかなか面白いものですよ。

[ReactOS Homepage]

http://www.reactos.org/ja/index.html

[ReactOSまとめWiki]

http://reactos.yh.land.to/pukiwiki/

id:sample2

ちょっとだけだけど寄付してきました。

2007/02/25 05:55:59
id:kurukuru-neko No.7

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/02/25 13:06:07

ポイント20pt

もしかりにどこかの誰かがWindows互換OSを提供したと

してもMSがライセンス料を支払ってWindowsで利用できる

知的所有権がある部分や、MS提供の各種ソフトの機能を

前提に大多数のソフトは動作しています。

Win32API部分であればなんとかなるかもしれませんが

それ以外の部分に関しては最悪全て準備する必要があり

手間がかかりすぎます。

但し可能性があるのは、.NET/Javaのような方式なら

OSに依存部分を極力排除したソフトの開発

は可能です。 

http://www.mono-project.com/Main_Page

id:sample2

Java 流行りませんでしたね。私のよく使うソフトがみな Java で作られていたなら、Linux へ移行するのに障害はなかったのですが。

2007/02/26 10:09:32

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません