昨日も、アクセスIP数は増えていたので、今日も、Linuxネタを1つ。
Linuxの問題として、コミュニティーがそれぞれ開発しているため、コミュニティーの成果物をまとめて、Linuxのディストリビューションをやるとき、問題が起きると思う
(ここで、起きる!と断言してしまうと、
「あんた、なんで、そんなこといえるの?」ということになり、
「そもそも、ウィリアムのいたずらって、だれ!」ということになるので、
妄想で!ということにしておいてください)。
そのことを話す前に、まず1つのお話をします。
Linuxの動作を考える場合、
カーネルのシステムコールを利用し、
それをglibcのライブラリによって、呼び出し、
さらにGUIを使う場合、XFree86のXlibを使うことになる。
したがって、これらのカーネル、glibc,Xlibにおいて、バージョンが違うときに、インターフェース(関数の引数自体とか、ポインタ渡し引数の、構造体の中身とか)を変えられてしまうと、仮にリンクできたとしても(もちろん、構造体の中の変数名とか変えられたら、出来ないこともあるんだけど)、そこで落ちてしまうことがあるわけよ。
でも、そういうのって、リンクがとおってしまった場合、とくに動的リンク(.so)の場合、動かしてみないとわかんない、動かしたらSegmentation Faultなんていうこともある。
なので、最適なカーネルと、glibcの組み合わせを見つける(相性っすね)っていうことが大切になる。一方、トーバルスさんが心配していたパフォーマンスに関しては、じつは、インターフェースほど、問題にならない。なぜなら、50%くらいの性能向上なら、半年、コンピュータを買うのを待つと、性能が上がっちゃうことがあるのよ。
それと、あるマシンでは、性能が遅いけど、他のマシンではそんなでもっていうこともあるし。
でも、インターフェースが違っちゃうと、どのマシンでも落ちるから。
でも、じゃあ、インターフェースをあわせる努力を、コミュニティの方々が、してるかっていうと、そうでもないんだよね。
たとえば、トーバルスさんとか、えらーい方々や、コミュニティのえらーい人があつまって、
今回のLinuxいったん,
カーネルは2.4.X,
glibcのバージョンはいくつ、
これをベースにみなさん、いったん安定版を作ってください!
っていうことで、みんなが、glibcとカーネルのバージョンを同じにして、安定したものを出しているかというと、そうでもない。みんな、自分のスケジュールでバージョンアップ。
それでも、バージョンアップの頻度が少なければ、結果として安定するんだけど、結構、カーネルもglibcも、頻繁にアップデートするよね。
それでもそれでも、みんながぜんぶ、最新バージョンが一番安定していれば、最新バージョンだけ、とってくればOKなんだけど、そうでもないのよ。最新は不安定なんで、1世代前のほうが使えるなんてこともある
そこで、問題が起きる。
あるコミュニティが開発しているシステムAは、glibc2.3.2-11.9 では動かない。
じゃあ、glibc-2.3.3にしていいか?っていうと、
まず、そのコミュニティのシステムAは、それで動くかもしれないけど、
他のコミュニティの開発したシステムBは、現在、glibc2.3.2ベースで開発されて
いるもののバイナリでできてるわけで、
つーことは、glibc 2.3.2と2.3.3でインターフェース変わっていると、まずいから、
システムBは、もう一度、ビルドしなおし??
っていって、ビルドしないとおもう。
その理由は、ビルドしなおしたら、今度は、そのコンパイルが正常終了するかどうか保証がないから(もし、glibcの2.3.2とglibcの2.3.3でインターフェースが変わっていた場合、コンパイルが終わらないことがありえる。ふつう、上位互換とるだろうけど、とってない可能性がないとはいいきれない)。
じゃあ、そのコミュニティのシステムBの最新版をダウンロードしたら?
と思うかもしれないけど、今度は、システムBの最新版が安定してる保証はない。
さあ、こまったでしょ。
この、glibcとカーネルがちょくちょくバージョンアップするんで、全部が安定して動くバージョンが(実質)つくれない!っていう問題は、むかしからあるんだけど、
Kondara は いいよね!
あそこは、伊達や酔狂でつくってる、先端ディストリっていうブランドを確立したから、仮に不安定でも最新版が入ってれば、「さすが、kondara先端いってる!」で済む
redHatはいいよね!
自分が標準だから、仮に不安定なものが入っちゃっても、「まあ、仕方ないよね!」ですむ。
でも、他のディストリはたいへん!(だと妄想する!)
だってさあ、そんなわけで、もともと、安定しないモンなのよ!
こんなにカーネルとglibcをバージョンアップされちゃーね。
それにさあ、お客さんだって、自分の都合で、カーネルとかglibcとか、バージョンアップしちゃうわけでしょ。なおさら、安定しないわけよ。
なのになのにだよお!
Kondaraがバージョンアップするから、自分のディストリも
バージョンアップしないといけないじゃん。
売れないから。
でもでも、なんか、ユーザーの中に神話があって、Linuxって、安定してると思ってるのよ。
だから、不安定だと、「だめじゃん」って言われちゃうのよ。
この格差は、うまんないよね。
だからかなあ。。。
最近、他のLinuxのディストリって、どーなっちゃったんだろう。。。。
Linuxの問題として、コミュニティーがそれぞれ開発しているため、コミュニティーの成果物をまとめて、Linuxのディストリビューションをやるとき、問題が起きると思う
(ここで、起きる!と断言してしまうと、
「あんた、なんで、そんなこといえるの?」ということになり、
「そもそも、ウィリアムのいたずらって、だれ!」ということになるので、
妄想で!ということにしておいてください)。
そのことを話す前に、まず1つのお話をします。
Linuxの動作を考える場合、
カーネルのシステムコールを利用し、
それをglibcのライブラリによって、呼び出し、
さらにGUIを使う場合、XFree86のXlibを使うことになる。
したがって、これらのカーネル、glibc,Xlibにおいて、バージョンが違うときに、インターフェース(関数の引数自体とか、ポインタ渡し引数の、構造体の中身とか)を変えられてしまうと、仮にリンクできたとしても(もちろん、構造体の中の変数名とか変えられたら、出来ないこともあるんだけど)、そこで落ちてしまうことがあるわけよ。
でも、そういうのって、リンクがとおってしまった場合、とくに動的リンク(.so)の場合、動かしてみないとわかんない、動かしたらSegmentation Faultなんていうこともある。
なので、最適なカーネルと、glibcの組み合わせを見つける(相性っすね)っていうことが大切になる。一方、トーバルスさんが心配していたパフォーマンスに関しては、じつは、インターフェースほど、問題にならない。なぜなら、50%くらいの性能向上なら、半年、コンピュータを買うのを待つと、性能が上がっちゃうことがあるのよ。
それと、あるマシンでは、性能が遅いけど、他のマシンではそんなでもっていうこともあるし。
でも、インターフェースが違っちゃうと、どのマシンでも落ちるから。
でも、じゃあ、インターフェースをあわせる努力を、コミュニティの方々が、してるかっていうと、そうでもないんだよね。
たとえば、トーバルスさんとか、えらーい方々や、コミュニティのえらーい人があつまって、
今回のLinuxいったん,
カーネルは2.4.X,
glibcのバージョンはいくつ、
これをベースにみなさん、いったん安定版を作ってください!
っていうことで、みんなが、glibcとカーネルのバージョンを同じにして、安定したものを出しているかというと、そうでもない。みんな、自分のスケジュールでバージョンアップ。
それでも、バージョンアップの頻度が少なければ、結果として安定するんだけど、結構、カーネルもglibcも、頻繁にアップデートするよね。
それでもそれでも、みんながぜんぶ、最新バージョンが一番安定していれば、最新バージョンだけ、とってくればOKなんだけど、そうでもないのよ。最新は不安定なんで、1世代前のほうが使えるなんてこともある
そこで、問題が起きる。
あるコミュニティが開発しているシステムAは、glibc2.3.2-11.9 では動かない。
じゃあ、glibc-2.3.3にしていいか?っていうと、
まず、そのコミュニティのシステムAは、それで動くかもしれないけど、
他のコミュニティの開発したシステムBは、現在、glibc2.3.2ベースで開発されて
いるもののバイナリでできてるわけで、
つーことは、glibc 2.3.2と2.3.3でインターフェース変わっていると、まずいから、
システムBは、もう一度、ビルドしなおし??
っていって、ビルドしないとおもう。
その理由は、ビルドしなおしたら、今度は、そのコンパイルが正常終了するかどうか保証がないから(もし、glibcの2.3.2とglibcの2.3.3でインターフェースが変わっていた場合、コンパイルが終わらないことがありえる。ふつう、上位互換とるだろうけど、とってない可能性がないとはいいきれない)。
じゃあ、そのコミュニティのシステムBの最新版をダウンロードしたら?
と思うかもしれないけど、今度は、システムBの最新版が安定してる保証はない。
さあ、こまったでしょ。
この、glibcとカーネルがちょくちょくバージョンアップするんで、全部が安定して動くバージョンが(実質)つくれない!っていう問題は、むかしからあるんだけど、
Kondara は いいよね!
あそこは、伊達や酔狂でつくってる、先端ディストリっていうブランドを確立したから、仮に不安定でも最新版が入ってれば、「さすが、kondara先端いってる!」で済む
redHatはいいよね!
自分が標準だから、仮に不安定なものが入っちゃっても、「まあ、仕方ないよね!」ですむ。
でも、他のディストリはたいへん!(だと妄想する!)
だってさあ、そんなわけで、もともと、安定しないモンなのよ!
こんなにカーネルとglibcをバージョンアップされちゃーね。
それにさあ、お客さんだって、自分の都合で、カーネルとかglibcとか、バージョンアップしちゃうわけでしょ。なおさら、安定しないわけよ。
なのになのにだよお!
Kondaraがバージョンアップするから、自分のディストリも
バージョンアップしないといけないじゃん。
売れないから。
でもでも、なんか、ユーザーの中に神話があって、Linuxって、安定してると思ってるのよ。
だから、不安定だと、「だめじゃん」って言われちゃうのよ。
この格差は、うまんないよね。
だからかなあ。。。
最近、他のLinuxのディストリって、どーなっちゃったんだろう。。。。