GNOMEの世界観です。
CORBAやLinux(X11周辺)やKDEやXimianも参照のこと。
自分の書いたブログ「神々とともに生きる詩人」2021/01/27より。
GNOMEなどでは、CORBAと呼ばれる分散システムを設計の基本にすることで、プラットフォームと言語とネットワークの垣根を超えたモジュールのリンクが可能であり、これを長らくKDEに比べた優位性としてきた。
しかしながら、GNOME 3ではCORBAはD-Busによってリプレースされている。
また、GNOMEのGTKはGLib/GObjectと呼ばれるオブジェクト指向の仕組みを提供しており、GLibにのっとってC言語でオブジェクト指向の環境でプログラムを開発できる。
また、C言語は比較的各種言語のバインディングが作りやすく、C++/Python/JavaScript/Vala/Rustなどにも対応している。
これに対して、QtはC++の仕組みを採用しているが、比較的、美しくて機能的なのはKDE/Qtの方である。
しかしながら、Qtはそもそも昔はフリーソフトウェアではないツールキットであり、GNUなどではこれに対してGNOMEプロジェクトを開始するに至った。
今ではQtはフリーソフトウェアライセンスで提供されている。
また、GNOMEは比較的独立性が高く、また初心者向けで、最初のログイン時に動画で使い方を教えるなど、Windowsも使えない初心者ユーザーのためによく考えられている。
しかしながら、Linux開発者のリーナス・トーバルズなどは、「ユーザーを馬鹿だとみなすGNOMEの姿勢は根本的に誤りである」としている。
標準となっているのはGNOMEだが、デスクトップのデザインが美しく、また、搭載アプリケーションの高機能性が光るのはKDEである。
特に、KDEアプリケーションには、Windowsに遜色のない機能的GUIアプリが多く備わっている。
巨大なデスクトップ環境。GTK+と言うウィジェット・ツールキットをベースに作られている。昔は、シンプルで初心者向けだった。昔のGMONE2を使いたい場合は、MATEをインストールすると良い。
僕の個人的使用感としては、アプリケーションの機能にアクセスするための方法がGNOME 3になってから削られてしまったのが難点。デスクトップのシェル自体は拡張機能を入れることで何とかなるが、アプリケーションのメニューバーをざくっと削除しているため、僕はGNONE 3のアプリケーションは基本的に使わない。僕はいつもMATEをFedoraで使っている。
GNOMEはWindowsとの類似性が強いが、そもそもGNOMEのコンポーネント技術として採用されたCORBAがWindowsのCOMと同様の技術であるように、最初からWindowsを意識したデスクトップ環境となっている。
だが、インターフェースの特徴などはMac OS X(現macOS)に近く、最近はAndroidのようなタブレットでタッチパネルでタップによって操作されることを念頭に開発されている。
また、シンプルで初心者向けなのを謳っていて、昔から統一的なアイコンやメニューバーなどの機能を分かりやすく、単純にするように作られている。
KDEは統合的要素が強く、それぞれのアプリケーションやコンポーネントが美しく統合されていて、配布もアプリケーションやフレームワーク・ライブラリに応じて配布されているが、GNOMEはそれぞれの要素がバラバラで、それぞれが独立して開発されている印象を受ける。
GNOMEにも、全く良い点が無いわけではない。GNOME 3でインターフェースが独自になって、革新的になった。これからのパソコンのインターフェースを革新していくのは、GNOMEだ。嫌われているのは、GNOME 2がとてもシンプルで使いやすいLinuxの標準GUIだったからだ。
GNOMEの原産地はメキシコである。
Wikipedia
公式
ソースコード
GNOMEのネットワーク・オブジェクト・モデルのアーキテクチャとして、以下の要素がある。
技術 | 説明 |
---|---|
CORBA | プラットフォーム・言語非依存で、さまざまなシステムで横断的に利用できる、ネットワークでのコンポーネント通信技術。 ネットワークで繋がったWindowsなどのCORBAアプリケーションとの間での通信ややり取りができる。 |
D-Bus | GNOME 3では分散ネットワークシステムとして、CORBAに代わってD-Busが使われている。 |
GTK+/GLib | オブジェクト指向のウィジェットツールキット。 C言語によってオブジェクト指向のボタンやメニューなどのGUIアイテムを、X11において実装している。 |
GTK+のラッパー | C++/Perl/Python/Ruby/Java/C#などのために用意されたGTK+のバインディング。 さまざまな言語でGTK+アプリケーションをオブジェクト指向で実装出来る。 Vala(C#/Javaライク)やGenie(Pythonライク)といったGLib/GNOME専用の言語もある。 |
このようにすることで、GNOMEアプリケーションはあらゆるシステムとのコンポーネントとネットワークを通して通信することができ、またあらゆる言語を混ぜてプログラミングを行うことができる。
GTK+を参照のこと。
CORBAを参照のこと。
D-Busを参照のこと。
GNOMEの設定登録システム。Windowsのレジストリと同様のシステム。
Windowsでも3.1まではINIファイルに記述する形でOSの設定を処理していたが、これではたくさんの設定項目を処理するためには効率が悪いため、専用の設定データベースとしてのレジストリが導入された。
GNOMEでは、長らくXMLベースの設定システムであるGconfを使っていた。設定項目はホームディレクトリの中の~/.gconf/以下にXML形式で保存される。この設定項目を、アプリケーションはGConfライブラリの中のGConfClientから参照・編集できる。また、Windowsのレジストリエディタと同様のGUIの設定ツールであるgconf-editorから、設定項目をユーザーがGUIで参照・編集することもできる。また、Gconfでは設定の変更を監視することができ、なんらかの原因で変更された設定を登録したアプリケーションのコールバック関数に通知することができる。これにより、リアルタイムに設定をデスクトップ環境全体に反映することができる。
Wikipedia
2023.02.19編集
長らくGconfが使われていたが、XMLベースの設定データベースでは処理が遅いということもあり、最近はXMLからバイナリブロブへと移行した新しいdconfを採用している。
Wikipedia
GNOMEの仮想ファイルシステム。FTPやSamba(Windowsネットワークのフリーな実装)などにアクセス出来る。
GnomeVFSを使うことで、ネットワーク上のファイルやディレクトリなどに、ローカルのファイルと全く違いがないようにアクセスすることができる。
ファイルパスはネットワーク用の専用の特殊なURIを用いてアクセスできる。
Linuxカーネルには、FUSEと呼ばれる機能があり、ユーザー空間で独自のファイルシステムを作成できる。GVfsはFUSEを使ったGnomeVFSの後継バージョンである。
Linuxカーネル(ファイルシステム)やFTPやSambaも参照のこと。
最近はさらにGIOという仕組みが出来ている。これも仮想ファイルシステムへのアクセスAPIである。
gettextはGNUで使われている翻訳システム。gettextでの翻訳は以下のようになる。
_()を使って以下のように文字列をラップする。
printf(_("hoge is %s."), hoge_name);potファイルで文字列のテンプレートを準備する。それをpoファイルで以下のように翻訳する。
#: src/hoge_prog.c:20 msgid "hoge is %s." msgstr "ほげとは%sである。"
UNIXシステム管理(タイムゾーンとロケール)も参照のこと。
UNIXやLinuxにおいて、マイクロソフトが開発した.NET Frameworkと同等の環境を動かすことが出来る、仮想マシンとC#/VB.NETコンパイラ。GTK#によってGUIアプリケーションも作れる。
Wikipedia
GNOME創設者のミゲル・デ・イカザ氏らのメンバーが始めたMonoプロジェクトは、Linux/UNIX環境でMicrosoft .NET Frameworkと同等の環境(仮想マシン・コンパイラ・クラスライブラリ)が動く。
これは、言語非依存・プラットフォーム非依存のメッセージングという点において、CORBAよりさらに新しいアプローチだ。
GNOMEでC#/.NETを行うためには、GTK#とMonoを使う。ある意味、GNOMEをCで書いて、GNOMEアプリケーションをC#で書くことはまさに理想なのである。
Monoも参照のこと。
GNOMEをビルドするためのツール。GNOMEを自分の力で開発したい方向け。以下を参照のこと。
Linuxの仕組みを知りたいものとして、誰もが参照したいのがGNOMEのソースコード。昔はtar.gzで配布されていたものを個別に入れる必要があったが、今ではGitLabからコードをオンラインで簡単に参照でき、gitを使えばローカルにcloneするのも簡単である。
GNOMEはさまざまな技術をベースにして作られているので、全てを把握するのには時間がかかるかもしれない。だが、「Windowsに代わるOSを使いたい」のであれば、誰でも「Windowsに代わるOSを自分で開発したい」のではないだろうか。カーネルやコンパイラの情報も必要だが、実際のところ自分の好きなデスクトップ環境のコードを見ることは、デスクトップ環境を「使うだけではなく開発したい」といった人に向けて開かれている、オープンな情報の在り方のひとつである。
GNOMEのコードは、以下の情報から参照できる。
GNOMEでは、アプリケーションのUIを分かりやすく統一するために規範となるHIG(GNOME Human Interface Guidelines)が用意されている。
GNOMEデスクトップを参照のこと。
GNOMEアプリケーションを参照のこと。
僕は、GNOME 3の方向性も、ある意味では間違っていないと思う。
賢くて独自性のあるシェルにして、アプリケーションの操作を単純化し、シンプルで初心者向けの簡単なものにする、と言う考え方は、パソコンの開発者なら誰でも分かる。
昔の自分も、「パソコンの分からない母親にも使えるインターフェースを作りたい」と思っていた。
だが、そのために機能性や使いやすさを犠牲にする、GNOME 3の考え方を、僕は信じない。
僕は普段、Fedora 26でMATEを使っている。MATEは動作も速いし、機能性もきちんとある。僕は、MATEでなければLinuxは使えないと思う。
たまにKDEを起動することはあっても、メインで使う環境にはならない。KDE/Qtアプリケーションの中に良いアプリケーションがない。
だから、きっとGNOME 4が出ることがあったとしても、GNOME 3をMATEと同等に維持するような、そんなプロジェクトがあっても良いのかなと思う。
GNOMEとKDEの二大戦争を悪いという人が居る。開発リソースの分散になって、どっちも転ぶだけだと言う。
僕は、むしろ、その通りだと思う。
GNOMEは、Mac風にメニューを二大パネルにしたぐらいから、KDEと違う独自のデスクトップ環境へのデザイン・設計の道を歩み出したと思う。
あの当時、僕は、「素晴らしいデスクトップ環境が2種類もあって、多様性がある」と思っていた。
あの当時のLinuxは、Mozilla Suite(SeaMonkey)やFirefoxなど、ブラウザにも個性があって、独自性があった。
だが、GNOME 3が出て、KDE 4が出て、一気にLinuxは悪くなった。それまでの独自なデスクトップの個性を失い、無個性なものになった。
KDE 4は、僕は最初は「本当に美しい」と思って好きになったが、Plasma 5が出て、フラットな表示になってから、「美しいようでいて、ただ無個性なだけ」だと僕は思った。
むしろ、KDE 3の方が個性があって良かったのかもしれないと今思う。
本当に、GNOMEとKDEは、僕はどちらも悪いと思う。GNOMEがアーキテクチャ指向で、KDEがモダンデザイン指向なのは分かるが、どちらの考え方でもない、新しいデスクトップ環境を作ってほしい。
だが、そうした「X11の多様性」を生み出したのは、他でもないKDEとGNOMEの開発者だ。そこは、賞賛してしかるべきだろう。
僕は、昔からGNOMEとKDEはどちらも好きだ。どちらかが良いものになって、もう一方もさらに良いものになる。それで、頑張ってほしい。
ただ、それで終わりとしたいところだが、僕は不幸にも、これ以上KDEとGNOMEは良いものになりようがなく感じてしまう。
ある意味、LinuxのGUIはもう、最後まで行きついてしまったところがある。これ以上、新しいものを考えることが出来ない。
ジョブズが居たら、なんて思うだろうか。むしろ、簡単に新しいものを作って「ハイ、これが次世代の革新です」と言うかもしれない。
だが、今のWindows/Linuxの開発は、もう行き着いてしまったと思う。これ以上、新しいものが出るような気がしない。家庭用ゲーム機と同じ、衰退への道を歩むのではないかと思う。
僕が思うに、アラン・ケイの発想をもう一度再考するしかないと思う。Ubuntuにそれをやってほしい。Ubuntuなら良いものが作れるかもしれない。オープンソースの良いところは、誰でも開発に参加出来るところだから、Ubuntuでなくても、他の開発者が作っても良い。だが、マイクロソフトの資金力で作れば、またありえないものが生まれる。だが、それできっと良いものは生まれないと思う。
GNOMEには、CORBA(最近ではD-Bus)によるコンポーネントの埋め込みとネットワーク通信、テーマエンジンやエクステンション、各種言語へのラッパーなど、とても賢い点が多いのだが、その分、処理速度が遅いという難点がある。
そもそも、GNOMEではintやポインタ型すら、オブジェクトの1つとして扱うためにgintやgpointerのような型を使うようになっている。そうした「オブジェクト指向の賢いデスクトップ環境」や、X Window Systemの「ネットワーク透過」まで、たくさんの賢い点があるのだが、いかんせん、GNOMEデスクトップ全体を遅くしている。
だが、最近のコンピュータリソースの処理速度の向上には目を見張るものがあり、GNOME 2のforkであるMATEを今のパソコンで使うと、とても軽く高速に動作する。
さらに問題を大きくしているのは、KDEとの連携である。KDEはさらにグラフィックスの綺麗さや豪華さに力を入れており、GNOMEより起動が遅く、メモリを食い、不安定で動かない環境もある。だが、使っていると、KDEの方が快適である。これは、GNOMEの、「機敏さはなくてもきちんと安定して動く」という「きちんと動く」特徴とは対照的である。
COMという技術のオリジナルではあるものの、GUIウィジェットツールキットとウィンドウシステムとカーネルが統合されている、「統合されたWindows」はとても使いやすい。Microsoftがいつも言っていたように、Windowsの大きな特徴は「統合」である。これは、GTK+とQtが共存して醜い不統一のツールキット環境を生み出した、今のオープンソース陣営が見習わなければならない特徴である。Windowsは醜いAPIをしているが、その分高速で機敏に動作する。昔より安定しているのは、その上で.NETというJavaと同様のVM環境にしているからである。Windowsが勝利するのは、GNOME 3を使えば良く分かる。Linuxがシェアを奪えないのは、GNOMEを知っていれば、当たり前である。
ちなみに、Javaは処理速度を優先して、値型を導入した。GNOMEは昔からWindowsで動くJavaよりも遅いが、それはgintを導入し、全面的に賢くしすぎたためではないかと僕は思う。逆に言えば、みんな、GNOMEの賢さを理解できていない。GNOMEは最高の設計をしているのに、誰にも見向きもされない。昔から、そういうものである。
GNOMEも遅すぎるという性能の遅さを昔から分かっていて、最近ではXMLベースだったGConfをバイナリブロブのdconfに変更するなど、きちんと頑張って高速化している。.NETのVMが必要だったMonoを、最近ではCにコンパイルするValaに変えている。そもそも、GNOMEはきちんと動くことなんか目指していない。ただ、賢いアーキテクチャを目指しているのは、そもそもが昔のWindowsのCOMのような言語・プラットフォーム非依存のネットワーク通信をやりたいからであり、そもそもWindowsとの連携を模索している。だから、頑張って高速化するための努力をすれば、きっと速くなるだろう。Mozilla Firefoxがやったように、機能を全て拡張機能に頼って、シンプルで軽快なデフォルトの状態を維持する、という仕組みは、GNOME 3で大々的に導入された。だが、これは不評である。それは、デフォルトの状態が「全くと言って良いほど使えない」からである。最低品質のデスクトップ環境になったとよく言われる。だが、GNOME 3は最近、「慣れると使いやすい」と言われるようになってきた。それは、拡張機能を入れればWindowsのように使えるし、入れなくてもスマホのような分かりやすいGNOME-Shellのインターフェースが、スマホ時代の今の人間たちに好評だからである。だが、僕としては、もう少しUIを整理してほしいと思う。アプリケーションによってメニューバーがあったりなかったりするのは、良いことではないと思う。GNOMEは遅いだけではなく、デザインが未熟である。昔から、「最も醜い感じを受けるデスクトップ」は、いつでもLinuxのGNOMEである。
また、WindowsとLinuxには、「気質の違い」というものが存在する。Windowsは、効率のために何でも統合させたがる。カーネルにWindowsのGUIを統合し、グラフィックス処理も統合し、IEをExplorerと統合する。このため、目に見える部分では軽快で高速だが、目に見えないセキュリティホールやバグが多く、Officeのような巨大アプリケーションは良く不安定になる。GNOMEでは、そういうものを全部独立したコンポーネントにした上で、それぞれが開発するようにプロジェクトそのものを独立させ、カーネルにグラフィックス処理を統合せず、X11やGTK+/GDKに分離させる。このため、目に見えて遅くなる。特に、独自のXULという技術を使っているMozillaなどは、起動に時間がかかりすぎて、反応すらしていないように思われることもある。だが、Windowsが必ずしも不安定かというと、そうでもない。Microsoftは.NETを開発し、またWindows NT時代にカーネルを書き直したこともあって、最近は安定している。Linuxが最近不安定なのは、Ubuntuなどが使い勝手を優先するコードをたくさん書いていて、自動認識を多くするようになったことで、複雑性が増えてかつ想定できない事態が発生しても簡単に直せなくなったり、あるいはオープンソースソフトウェアが増えすぎたことや巨大になったことで、Linuxの一般的な開発者の数だけでは全てを見通すことができず、Red Hatなどの会社に頼るようになって、Windowsのやり方と変わらなくなってきたからではないかと思う。そもそもGNOMEが遅いというのもあるが、LinuxカーネルやGCC/Glibcなども複雑化してきており、X11も昔よりモジュラー化が進み、どんどん複雑かつ高度になったことで、昔のMulticsと全く同じ「高機能化に伴う馬鹿」が増えていることで、「全てのコンポーネントがどんどん悪くなっている」というのがあると思う。それこそ、最近はAndroidが普及したこともあって、必ずしもLinuxがウィルスやセキュリティホールとは無縁ではなくなった。逆に、昔のRed Hat Linuxなどをそのまま使っているサーバーが、アップデートを怠っていることで、Linuxはセキュリティホールの拡大にとても大きく加担しているのである。Linuxはセキュアではないし、安定もしていないし、軽くもない。GNOMEは劣悪で、KDEは使っている人間が居ない。結局、そのように負け続けているのが、今のLinuxデスクトップの、誰でも分かる現状である。
ただ、言っておくと、最近はGNOME 3は本当はそんなに遅くない。本当に、Gconfをdconfにして、CORBAをD-Busに変えたせいで、速くなっている。X11はwaylandに変わって軽くなるだろう。Linuxデスクトップは、最近、Ubuntuの影響で、どんどん「初心者でも使いやすい」ものになっている。特に、日本人ユーザーが知らないこととして、海外ではLinuxはとても好意的に受け入れられている。それは、僕の英会話学校の講師が喜々としてLinuxの話題を出すようにである。そもそも、海外にはLinuxのような工業製品が多い。日本ほど、レベルの高くないものが普通なのである。日本のSONYや東芝の製品が出来すぎているだけで、海外ではとても低額で使えるLinuxのような製品がたくさんあるのである。2ちゃんねるだけを見ていると、そういう発想が分からなくなる。日本人は賢いから、Linuxを使わないのである。
GNOMEプロジェクト創設者のミゲル・デ・イカザ氏が猿が好きなことから、GNOMEプロジェクトのアプリケーションには良く猿の名前がつけられている。BonoboやXamarinなどがこれに当たる。
イカザ氏はXimianというGNOMEアプリケーションの開発とサポートを行う企業を立ち上げ、.NET FrameworkをUNIX環境に実装したMonoなどを開発した。その後XimianはNovellやそれ以後の企業に買収され、Monoチームは存在の意義を疑われてレイオフされた。そのため、Xamarinという新しい会社を作り、.NET FrameworkでiOSやAndroidのアプリケーションを開発できるXamarinと呼ばれるソフトウェアを開発した。これが功を奏し、MicrosoftによってXamarinは買収された。現在はMonoチームの仲間と一緒にMicrosoftに居るはずである。彼はGNOMEの創設でCORBAを導入したほか、Midnight Commanderと呼ばれるCUIベースだがメニュー選択でファイルを操作できるファイルマネージャや、GNOMEのGnumeric表計算ソフトなどを開発し、多くのオープンソースプログラマーから「スーパーハッカー」として著名である。
後日注記:開発者のミゲルやその仲間たちがメキシコ人であることから、GNOMEは「メキシコ発のデスクトップ環境」として知られる。KDEはドイツ発祥であることから「ドイツ発のデスクトップ環境」として知られる。それぞれの個性が全く違うことからよく対比される。
自分の書いたブログ「神々とともに生きる詩人」2021/01/22より。
GNOMEについて言えるのは、UNIXよりもOpenVMSに似ているということ。
OpenVMSでは、ネイティブで分散クラスタ環境が構築でき、さまざまなプログラミング言語を織り交ぜてシステムを開発できる。
ここに、「UNIXをもう少しマシなものにしよう」という考え方が見て取れる。
OpenVMSも参照のこと。
GNOMEは、「オブジェクト指向のデスクトップ環境」とよく言われます。
これは、GTKがGLib/GObjectという「オブジェクト指向のシステム」に従って設計されており、完全にオブジェクト指向の論理的・コンポーネント的なデスクトップ環境だからです。
同時に、GNOMEは「Windowsのパクリだ」と言って批判されることがありますが、それは言葉通り正しいです。そもそもCORBAはWindowsのCOMが原形であり、分散コンポーネント通信システムをオープン標準で定めたものです。
ですので、「UNIXやWindowsをベースに、よりそれらシングルホストOSをPlan 9やOpenVMSのような分散環境に近づけた、オープン標準なデスクトップ環境」であると言えます。
GNOMEプロジェクト創設者のミゲル・デ・イカザ氏はUNIXにおけるオープンソースな.NET FrameworkであるMonoや、Excelライクな表計算ソフトであるGnumeric、メニュー式ファイルマネージャのMidnight Commanderなどの開発で知られており、GNOMEデスクトップをサポートするXimian社の設立でも知られていることなどから、明らかにWindowsの影響が見られます。Ximian社はほかにも高機能メール・グループウェアクライアントであるEvolutionや、GNOME/Bonoboの開発で知られます。UNIXをWindows並みに「マシなものにしよう」という情熱が、彼らの作るソフトウェアプロジェクトから見ることができます。
巨大なデスクトップ環境。
GNOMEを使ったアプリケーションの開発。
GNOME本体の開発。
GNOME
書籍