matobaの備忘録

育児しながら働くあるエンジニアの記録

GNU/Linuxってなに?を学んだ

前に『GNU/Linuxってなんだろう?』と思っていた。

ぼんやりと調べてたら、「フリーソフトウェアと自由な社会」と言う本に到着した。ここでは、忙しい人のために僕がその本を読んで学んだ『GNU/LinuxとLinuxの違い』の概要を説明しようと思う。というわけで、この記事を書いた。

ここには『GNU/LinuxとLinuxの違い』が書いてあった。

詳細は本を読んでほしい。僕もまだ少ししか読んでないけど、自分が今までソフトウェア開発に関わってきて、深く考えられてなかったことがたくさん書いてあった。この本は、ソフトウェア開発が好きな人は読んだ方がいいと思う。

GNU/LinuxとLinuxの違い

この本によると、GNU/Linuxと言うとオペレーティングシステム全体を指していて、Linuxというとオペレーティングシステムのカーネルをさしているらしい。

なるほど。僕としては、この話を聞いて以下のような疑問が生まれた。

  • それってこの本で言ってるだけ?一般的な話なの?
  • オペレーティングシステム全体とオペレーティングシステムのカーネルって何が違うの?
  • GNUってなんなの?

一つ目の疑問については、この本の著者のリチャード・M・ストールマンについて知ることで、愚かな質問だと思った。すいません。

あとの2つも、本を読み進める中でなんとなく理解できた。

who is リチャード・M・ストールマン

この本の著者のリチャード・M・ストールマンは、GNUプロジェクトを立ち上げた人、とのことです。

GNUプロジェクトって何?というのは、あとで書きます。

リチャード・M・ストールマンは、MITで働いていたが仕事を辞めて、GNUソフトウェアを開発したらしいです。

GNUとは

GNUと言うのは、GNU's Not Unixの略で、GNUはUnixではないUnix互換のシステムを目指したフリーソフトウェア、とのことです。

GNUプロジェクトは、そのGNUソフトウェアを作るためのプロジェクトらしいです。

GNUプロジェクトが始まる前の時代、ストールマンはソフトウェアを共有するコミュニティに参加していて、ソフトウェアを開発していたようです。

でも、ソフトウェアの開発のベースになっていたOSを搭載したコンピュータが製造中止になり、ストールマンらが15年かけて、そのOS上で開発した全てのソフトウェアが無駄になり、コミュニティが崩壊したそうです。

その後、別のOSを使おうとしても、当時はフリーのOSがなく、どのOSを使う場合もNDAを結ばなければならない状況だったそうです。NDAを結ぶと、コミュニティの仲間と情報の交換ができなくなり、仲間を助けることが禁止される状況だったようです。

だから、NDAを結ばずにソフトウェアを開発できるようにフリーのオペレーティングシステムを作るために始まったのがGNU。とのことです。

GNU/Linuxとは

GNUプロジェクトで作ったソフトウェアをLinuxカーネルの上で動かしているとき、それをGNU/Linuxと書いているようです。

GNUで作られたソフトウェアは、オペレーティングシステムのカーネルだけではなく、その他もあります。

例えばCコンパイラのgccやシェルのbashは、GNUで作られたソフトウェアです。

GNUでカーネルも作られて、それはGNU Hurdという名前らしいです。

ただ、GNUのソフトウェアは、GNU Hurd以外のカーネルを使っても動くので、カーネルとしてLinuxカーネルを使っているという意味でGNU/Linux、となってます。

Linuxとは

リーナストーバスの作ったオペレーティングシステムのカーネルがLinuxです。

Linuxについては、僕もよくわかってないことが多くて、以下のような疑問があります。

  • なんでLinuxを作ったの?
  • Linuxは他のカーネルと何が違うの?
  • Linuxってどうやって開発してるの?
  • なんでこんなに普及してるの?

今のところ、この本を読むと書いてそうだと思っています。そのうち読みたいと思ってます。

感想

自分が日頃、深く考えずに使っているLinuxやbash、gccがなぜ存在するのか、を考えるきっかけになってすごくよかった。

僕はソフトウェアを開発するし、音楽を作るときもあるけど、創作物と言うのは作る人の想いが詰まってるよなあと思う。また、その想いに触れるのが好きだなあと思ってる。だから、この本を読んで、GNUの背景を知れてよかったと思った。まあ、まだ途中だけど。

すごい余談だけど、僕は、ソフトウェア考古学的な話は結構好きで、趣味的に色々調べたりしてる。ソフトウェア考古学的な知識は、正直言ってあんまり実用的じゃないと思う。だけど、ただ単に自分の使ってるソフトウェアの背景とか成り立ちを知ると、色々気分が良くなっていく気がしてる。

例えば、違和感のある使い方をしたら気持ち悪いなと思うことができるし、だいたいその気持ち悪い感じの中にバグがある気がする。あと、自分が作ってないソフトウェアの成り立ちも踏まえて新しい何かができた時は、何となく筋が通っていて気持ちいい感じがする。

あと、そう言う筋の通ったソフトウェアアーキテクチャをイメージできると、ソフトウェア職人っぽくて、かっこいいよね、とか思ってる(雑)

おわり

とりあえずこの記事では、GNU/Linuxについて、学んだことを書きました。

それでもまだまだよくわかっていないところがあります。 例えば、こんなことです。

  • オープンソースライセンスの違い
  • GNUプロジェクトの進め方
  • Unixってなんなの?
  • カーネルの違いでなにが違うの?
  • Linuxについての諸々

これらも、おいおい学んでいきたいと思ってます。

ではでは