質問: 以前、よくwin32 APIを使用してGUIを作っていたんですが、このライブラリはwindows に依存しています。 **GUIなどのシェルは、OSに依存しているものなのでしょうか??** win32 APIがwindows上でしか動かせないのはOSに依存しているからですよね。 GUIはシェルとして扱われると思います。 Linux では着せ替え人形のようにシェルを変えることができます。 システムコールなどはOSによって違いますが、アセンブリ言語レベルでの命令はCPUによって違います。 しかし**シェルとカーネルは別物です。**arch linux などは最初からGUIが入っているわけではないです。 シェルがカーネルに依存していないなら、どうして他の環境に移せないのでしょうか? (windowsにしかないシステムコールがあるのかな?このシステムコールじゃないとGUIを使えないよ・・・と言うならOSに依存していることになりますが) ・・・**GUIはあくまでシェルなので、OSに依存していると言えるのでしょうか?** 標準ライブラリでGUIを作成するのは無理です。 (本当はできるのかな?) なぜできなんですか? 例えば Windows - win32 API Mac OS - objective-C Linux - GTK+ ライブラリはOSによって異なると言うより**そのGUIに採用されているアプリケーションによって異なる**のではないでしょうか? つまり、カーネルが着ているGUIを変えれば必然とライブラリも変わりますよね。 windows のネイティブGUIはwin32 APIを使用しています。 windowsのGUIシェルは剥ぎ取り、例えばLinuxが採用しているGUIをwindows着せればGUIのネイティブライブラリはwin32 APIではなくなるのでは? (Linux のGUI はgnome, GTK+, X window systemなどなど) もしかして、WindowsのGUIコンポーネントはカーネルと融合しているのでしょうか?? それだと、Windowsはシェルの着せ替えが出来ないことになりますよね。 独自のOSなので分からないですが・・・ GUIは他の環境に移せない・・・とよく言われますが(クロスプラットフォーム以外) それは、OSが標準で採用しているGUIシステムの構成が異なるからですよね。 OSが標準で採用しているGUIシステムの構成を変えてしまえばよいのではないでしょうか? windowsはブラックボックスで中身が分からないのですが・・・ 分かる方いましたら教えて下さい。 WindowsにXwindowを入れよう
回答: こんにちは。 > > GUIなどのシェルは、OSに依存しているものなのでしょうか?? > > > 「シェル・スクリプト」という言葉ご存知でしょうか? bashなどのシェルをプログラムするための簡易言語ですね。 この文脈ではシェルはCUIオンリーです。 しかし、最近は「ウェブブラウザや電子メールクライアントはHTMLレンダリングエンジンの「シェル」といわれることがある。」そうです。 ならば、恐らくJava VMもその1つですね。 であれば、GUIシェル・プログラムは、既にOSフリーを実現できているということになります。 ところで、GUIプログラム開発の話なのか、GUIシェル・プログラム開発の話なのか、きちんと区別した方が良いと思います。 CUIの文脈だと、前者は例えばC言語でコマンドライン・プログラムを開発するイメージです。後者はBashスクリプトを作るイメージです。 【追記】 GUIプログラム開発の話ということですので、その主旨で回答してみます。 GUIライブラリを使うプログラムは当然GUIライブラリの作法に則ってプログラムを開発します。 当該GUIライブラリがマルチ・プラットフォームだったら、それを使うプログラムもマルチ・プラットフォーム対応しやすいです。(GUI以外の部分もちゃんとマルチ・プラットフォーム開発しないといけません。) > > windowsのGUIシェルは剥ぎ取り、例えばLinuxが採用しているGUIをwindows着せればGUIのネイティブライブラリはwin32 APIではなくなるのでは? > > > それは無理です。Windowsはその名前の通りGUIと密接に関係しています。本来必要のない単なる非同期APIに何故かWindowに依存する部分があったりします。 それを剥ぎ取ったものは、もはやWindowsではないと思います。今までのWindows用プログラムは一切動かなくなります。 「WindowsにXwindowを入れよう」のリンク先で既にX-Window SystemをWindowsで動かしてますね。 シミュレションですが、それは仕方ないでしょう。カーネルの機能が異なるので、その部分のシミュレーションは必須です。