パスワードを忘れた? アカウント作成
8280 story

UNIXプログラミングはこの20年間で変わっただろうか 58

ストーリー by yoosee
その根幹を成すもの 部門より

BSD 曰く、 " informITに Advanced UNIX Programming 第2版の出版にあたり、 著者である Marc Rochkind が書いた 「UNIXプログラミングはこの20年間で変わっただろうか」 (日本語訳) という記事が掲載されている。 著者によれば、基本的に UNIX は何も変わっていないが、 20年間の時間の流れに伴って、システムコール、使用言語、サブシステム、移植性、標準規定 について非常に多くのものが付け加えられたと述べている。 読者の皆さんはどのような考えをお持ちだろうか。"

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by cyber205 (4374) on 2004年06月03日 8時39分 (#561781) ホームページ 日記
    やっぱり機能拡張とともに、大きく重くなったんじゃないでしょうか。
    必要なライブラリもでかくなってますし、種類も増えた。
    また、富豪的プログラミングが可能になってビンボ臭さが消えてきたと思います。
    perlが普及しだしたあたりから、KISSの思想は薄れたかなと。

    大型のハイエンドマシンから、小型のラップトップ、いやマイコンに至るまで移植されて、
    「何でもできるOS」を目指してどんどん開発されていった経緯がありますので、
    多分これで方向性は間違ってないのだと思いますが。

    カーネルに関してはいまだに、
    マイクロカーネルを主流にする動きは噸座したままのようですね。
    柔軟なモジュラー構造は採り入れるとしても、
    空間を分離して実装するのは面倒ってことでしょうか。

    HURDもあまり元気な話を聞きませんし、
    マイクロカーネルなのに、性能が結構出てると思ったら、 [tu-dresden.de]
    サービスを全部1コにまとめて実装してたりして。
    そんな謎な実装をしてるL^4 Linux [tu-dresden.de]なんかを見ていると、
    なんだかその方面は迷走してる感じがしてきます。
    • UNIX vs. MULTICS (スコア:2, 参考になる)

      by tag (10007) on 2004年06月03日 10時19分 (#561824) 日記
      本来、UNIX は小さく分かりやすいことを目標にしていたような 気がします。V7 のマニュアルはコンパクトで分かりやすい ですが、4.2BSD ぐらいになるとずぶの初心者には読めなかった ような気がします。今、UNIX とは何かを知ろうとすると、 どのドキュメントをどの順番に読めばいいのか、たくさんあり過ぎて 大変です。

      サブシステムが比較的相互独立に作られているので、小さく カスタマイズすることができ、それで救われていますが、 大きくなりすぎたマンモスのように絶滅するのではと 心配です。

      親コメント
      • by Futaro (2025) on 2004年06月03日 11時26分 (#561869) ホームページ 日記
        あの当時と今で全然違う、という状況の変化は以下かと。

        1.ハードウエアの性能アップと劇的なコストダウン
        2.Linuxなどのオープンソースの環境の拡大と充実
        3.UNIXの大衆認知とアプリケーションの社会的拡大
        4.UNIXを使える技術者の数の増大
        5.コンピュータ利用の爆発的拡大(ネットの拡大含む)

        こういった状況が、(1)MULTICSのような複雑さ→(2)UNIXでシンプルに→(3)でもまた「複雑化」「巨大化」、という流れの(2)→(3)の道筋をたどりやすくしたのだと思う。

        UNIXが小さくてわかりやすいまま、というレベルで止まることができなかったのは、そういう周りの状況の変化によるものだと思いますが。それが喜ばしいことであったか、そうでなかったのか、という評価は人それぞれでしょうから、おいておくとして。
        親コメント
      • by Anonymous Coward
        世の中にはマンモスより巨大な恐竜のようなOSも存在しますが…
        • by tag (10007) on 2004年06月03日 11時04分 (#561855) 日記
          大きくなり過ぎて絶滅しないように、小さくして見とおしよくし、 かつ効率的に動くようにしようとした動きもありました。 結果をどのように捕らえるかは異論もあるでしょうけど、結局、 マイクロカーネルは研究用、実験用のベースにしかなり得なかった のだろうと思います。カーネルを小さくしたため、どうしても オーバヘッドになり、実用にはならなかったのですよね。ひところ、 WinNT系がマイクロカーネル構造だと売り文句にされたことが あったように覚えていますが、これもかなりの部分にモノリシック 的な抜け道が多かったように聞いています。

          小さくしすぎてもダメ、大きくなりすぎてもダメ、微妙なバランス があるのでしょう。

          親コメント
          • MacOSX で採用されてるMachはマイクロカーネルの成功例じゃないですか?

            今後のトレンドとしてマルチプロセッサ化が進みそうですが、
            OSそのものをマルチスレッド化する、という方向になれば、
            マイクロカーネルなOSの方が有利になってくると思います。
            親コメント
            • Mac OS X はマイクロカーネルじゃありません
              • いい加減なことを言わないように。

                Mac OS XはMachベースのマイクロカーネル。FreeBSDサーバはカーネル空間に存在するが、これはco-locationと呼ばれるマイクロカーネル高速化のための技術。
                親コメント
              • マイクロカーネルって何?

                サーバをカーネル空間に置くのじゃ単にモジュール化された
                モノリシックOSと区別できなそうだけど。
              • by tag (10007) on 2004年06月03日 18時16分 (#562160) 日記
                googleしただけですけど、リンクしておきます。
                デジタル用語辞典 [nifty.com]
                ただしOSをマイクロカーネル化すると、サブシステム間での呼び出しや、カーネルモードとユーザモード間の遷移のオーバーヘッドなどのために、従来の一体型のカーネルに比べると若干パフォーマンスが低下する。そのためWindows NTでは、カーネルモードにNT Executiveという中間的な層を設け、サブシステム呼び出し時のコンテキスト切り換えを抑える工夫をして、パフォーマンス低下をある程度補っている。
                IT用語辞典 [e-words.jp]
                当初のMachはまだ多くの機能を自身の中に抱え込んでおり、事実上モノリシックカーネルだったが、バージョンアップするたびに機能を外部に出し、そのたびにパフォーマンスが下がっていった。このため、いったん外に出した機能をカーネル空間に戻したり、ライブラリでエミュレートしたりすることを余儀なくされた。
                親コメント
              • そういう状況はある程度しっています。
                その上で、それはマイクロカーネルなのか? と。
                # Machはマイクロカーネルではない、という説もありますし。

                正しいマイクロカーネルの定義(あるいは条件)は何でしょう。
              • by tag (10007) on 2004年06月03日 18時44分 (#562183) 日記
                定義は、デジタル用語辞典の冒頭3つの段落で言われているような 定義でいいと思います。

                結局、サービスを独立させると言っても無理があるのでしょう。 ちょうど企業の情報部門をアウトソーシングした時の利点と欠点 に似ているような気がします。「アウトソーシング」して良いこと ばかりあるわけではありません。

                マルチプロセッサ環境で効率が上がると言いますが、これも口で 言うほど簡単ではありません。リソースの競合を制御するのは やはり至難の技のようです。BSD の SMP 対応の作業を見ている とそういう感じがしませんか。

                親コメント
              • > BSD の SMP 対応の作業を見ているとそういう感じがしませんか。

                これを見ていて、なおかつ、MacOSX とか WindowsNT があっさりとSMPに対応しているところを見ると、
                「OSをSMPに対応させるなら、マイクロカーネルの方が有利なんだな」
                と思ってしまいます。

                #外から見えてないだけで、 apple や MS の 社内では SMP 対応に苦労していたのかもしれませんけど…
                親コメント
              • >これを見ていて、なおかつ、MacOSX とか WindowsNT があっさりとSMPに対応しているところを見ると、
                >「OSをSMPに対応させるなら、マイクロカーネルの方が有利なんだな」
                >と思ってしまいます。

                で、使いたい機材が XP 対応などと言いつつドライバが SMP に対応していなくて泣く、と。

                OS のコアの部分での SMP 対応やスレッドの実装などと同時に、
                現実世界との接点であるドライバの実装で苦しんでる部分も多いのではないかと。
                親コメント
              • by Average (3404) on 2004年06月04日 17時50分 (#563034) 日記
                でも結局BSDサーバーがマイクロカーネルにべったりと張り付いている状況ですから、これマイクロカーネルの利点を生かしているのかというとかなり疑問な気がしますが・・・・
                つまり構造はマイクロカーネルなんでしょうが、BSDサーバー自体の作りはあんまりカーネルから独立してなくて、モノリシックな作りになっているんじゃないでしょうか。
                --
                -----------------
                #そんなワタシはOS/2ユーザー:-)
                親コメント
          • by Pen2 (18210) on 2004年06月03日 17時33分 (#562139)
            AmigaOS、BeOS とか 技術以外の要素も大きいですし
            マルチコアのプロセッサの普及で条件が変わるかも
            親コメント
      • by Anonymous Coward
        QNX [qnx.com]デスクトップはマイクロカーネルでUnix likeなOSとしては十分性能出てるかと。
        惜しむらくはアプリが少ないことだなぁ。Debian無いのかしら。
    • マイクロカーネルが普及しないのは、やはり実装が難しいからでしょう。また、初期の頃にMachがそれなりに有名になったけれどパフォーマンスがひどく悪かったというのもあると思います。かなり注意深く実装しないとパフォーマンスが出ないようですから。その点、L4LinuxはOSパーソナリティをユーザ空間に置いたままでかなりのパフォーマンスが出ているわけですから、非常に良くできたOSだと思います。
      親コメント
  • Rob Pikeの論文 (スコア:2, 参考になる)

    by bihn (18164) on 2004年06月03日 9時41分 (#561802) 日記

    Rob Pikeの Systems Software Research is Irrelevant(PDF) [bell-labs.com](和訳 [takushoku-u.ac.jp]) というのが2000年に出ています。 合わせて読んでみるといいです。

  • by Anonymous Cowards (20196) on 2004年06月03日 13時44分 (#561987) 日記
    >著者によれば、基本的に UNIX は何も変わっていないが、 20年間の時間の流れに伴って、システムコール、使用言語、サブシステム、移植性、標準規定について非常に多くのものが付け加えられたと述べている。

    一番付け加えられたものは、利用者だろう。
    よくも悪くも…
  • by mito-natto (12988) on 2004年06月03日 8時40分 (#561782)
    日本語訳読みました.翻訳お疲れさまです.

    こうやって振り返ってみること自体は意味があるんだろうけど,読んでもあんまり面白くないかな.
    例えば,「Lispはこの20年間で変わっただろうか」とか「吉野家はこの20年間で変わっただろうか」とか,書いてもあまり変わらない無いようになる気がする.

    それが,枯れてて良いってことになるのかもしれないけど.
  • by Futaro (2025) on 2004年06月03日 8時46分 (#561787) ホームページ 日記
    20年前からUNIX/Cのプログラムを日本でしておりますが、この系統のシステムの発展ぶりは、社会的になかなかすごいものがあったと思います。言語そのものやその周辺としてのライブラリやシステムコールというものはかなり多くなりました。でも、たとえばその頃に大学出た人の多くは、もしも日本の企業社会でトラブルもなくまともにスクスクと育っていれば、当然管理職になっているはず。つまり、C言語やUNIXの関連のジャーナリストやウォッチャー、あるいはそれだけを専門にして生きていられる少数の「ガクシャ」「センセイ」であればいざ知らず、多くの企業の仕事をしている身であれば、30代後半以降はだいたいが管理職としての仕事が多くなって、言語そのものやその類の「些細なこと」にかかわりあっていることはあまりないと思うのですよ。ましてや40代過ぎて管理職にもなれないとか、プロジェクトマネージャーもできない、なんていうのはやはり問題がある可能性もなしとしない。もちろん、例外はあると思うし、今みたいな世の中だから、望む仕事を順調にこなすことができるようなキャリアパスを得られる場所そのものが減ってるから、そうそう簡単には言えない面もあるわけだけれども。

    ということで、普通に日本のこの業界で仕事をしている個人にとって、20年のOSの変遷、20年の言語の変遷、というのは、「ああ、そうなの」という程度のことであって、「歴史をたどる」以上の意味がなかなか見出せない、ということも多いのではないかな?それでも、もちろん「歴史をたどる」ことに意味がない、とは言えないのですが。
    • by nobita (7598) on 2004年06月03日 11時19分 (#561865)
      前半で何が言いたいのかわかりませんが、
      あなたが 管理職 [neweb.ne.jp]であることはよくわかりました。

      #5章1節です。
      #冗談なのでID
      親コメント
    • by Anonymous Coward
      うーんっ、「ごもっとも」なのですが、正直ツマンナイご意見ですね(失礼な表現でゴメンナサイゴメンナサイ)。

      20年に渡って UNIX の世界で生きてこれたとのことですので、おそらく、かなり恵まれた環境で、それなりに技術も蓄積されたのだと推測できますが、その 20 年間、世間に流され技術に流され、追随で手一杯な感じが…。

      いや、日本の技術者の場合、大概そうで、それさえできず、多くは、Win 系を強いられ、また、管理職掌という名で現場を追わ

  • by numa (4467) on 2004年06月03日 22時07分 (#562326) ホームページ 日記

    原著第1版の翻訳は 「UNIXシステムコール・プログラミング」 [amazon.co.jp] と題してアスキーから出ていました.

    内容は UNIX System V Release 1.0 の頃のものなので, socket などのネットワーク関係の記述はまるでなく, プロセス間通信も非常に基本的なものだけ, という非常にシンプルな作り.

    いま見直してみると,これはこれとして,古典的でいいかな, という気もします.

  • by Anonymous Coward on 2004年06月03日 9時12分 (#561794)
    PF_UNIX, AF_INET しか知らないくせに何ですが、
    Socket 関数ってもう少し綺麗に実装できなかったのかなあと
    一昔前に考えたのを思い出しました。
    BSD44 のやりかたも今ひとつ見えにくい。
    Java の Socket はまああんなもんでしょ。

    :wq
    • by tag (10007) on 2004年06月03日 10時10分 (#561817) 日記
      ファイルとデバイスは同じように取り扱えます。これが UNIX の 特徴の1つですね。
      open - (read,write) - close
      それなのに、socketは似ているけどちょっと違います。
      socket - (connect,bind,listen,accept) - (read,write) - shudown - close
      何故、意地でも同じインタフェースにできなかったのだろうか、 と以前考えたことがありました。

      もちろん、read、writeしているだけのプログラムは、 同じファイルデスクリプタという概念を使って処理できるのですけれど。

      親コメント
      • Re:Socket (スコア:3, 参考になる)

        by SteppingWind (2654) on 2004年06月03日 12時36分 (#561926)

        > ファイルとデバイスは同じように取り扱えます。これが UNIX の 特徴の1つですね。

        より正確に言えば「キャラクタ型」デバイスですよね. 入出力の口しかない. それゆえに全ての通信は基本的にread/writeシステムコールで統一されると.

        そう考えると, UNIXプログラミングの転換点は実はmmapシステムコールが実装され, 入出力とメモリアクセスの境界が無くなったときだったんじゃないかと思えます. これでプログラミングの自由度が大きくなった代わりに通信の同期がやっかいになり, そのあたりを隠蔽するためにもオブジェクトに対するメッセージ通信というオブジェクト指向のプログラミングモデルが有効だったんじゃないでしょうか.

        親コメント
      • by trueOne (134) on 2004年06月03日 14時29分 (#562015)
        TCPの状態遷移との整合性を優先したってことかしらん。
        --
        trueOne
        親コメント
      • by Anonymous Coward
        cat /dev/net/ip/tcp/25

        でメールを盗み見できるんでしょうか?
        • by tag (10007) on 2004年06月03日 11時26分 (#561871) 日記
          面白いですね。-rw-r--r-- ならアクセスできると思います。 Linux の /proc にもいろいろ面白いものがあるようですね。
          親コメント
        • by Anonymous Coward
          Plan9の世界ですな
          • by Anonymous Coward
            Plan9 にゃ write only とかいろいろおもしろい仕様があるので、
            使ってみたいと思いつつ、まだ手が出せていません。
            Inferno 買ってみようかな。

            :wq
          • by Anonymous Coward
            以前 FreeBSD でちょっとだけ使ったような気がするけど、
            ファイルシステム名を忘れてしまった。

            なんだっけ?

            # 俺の妄想かもしれん。
            • Re:Socket (スコア:1, 参考になる)

              by Anonymous Coward on 2004年06月03日 13時25分 (#561976)
              ああ、portalfs [freebsd.org] だ。

              4.4BSD からあったんだね。

              当時は未完成という位置付けだと思ったけど、今はどうなってるんだろう。
              親コメント
    • by oku (4610) on 2004年06月03日 23時44分 (#562381) 日記

      socket API 以前に、私は VMS [hp.com] 方面から Unix 界に渡って来た人なので、「UNIX のネットワーク (incl. uucp, TCP/IP) ってなんでこんなに後から取ってつけたっぽいの?」と思ったりしました。

      # まだ、DECnet の phase が...えーと、忘れた。頃。

      親コメント
    • by Anonymous Coward
      > Socket 関数ってもう少し綺麗に実装できなかったのかなあと

              実装 => 設計

      の間違いでしょうか?
    • by Anonymous Coward
      未だにPF_とAF_を区別して使うポリシーを持った私は変人ですか?
      # わかっちゃいるんで、他人に押し付ける気はございませんとも。
  • by Anonymous Coward on 2004年06月03日 10時05分 (#561812)
    tcp_input()はパフォーマンスを重視した依然としてまだ分かりにくい プログラム構造となっていますね。バージョンにもよりますが1000行 ~2000行はあると思う。 C++を使って一つのコネクションに1つのオブジェクトが生成されるよ うな実装にしたらどんなに理解しやすいことか。
  • by Anonymous Coward on 2004年06月03日 13時00分 (#561952)
    という夢を見た。
  • by Anonymous Coward on 2004年06月03日 22時15分 (#562334)
    あまりにもどうでもいいことだが、日本語訳の中に出てくる閑話休題の用法が気になって仕方がない。
  • by Anonymous Coward on 2004年06月03日 22時56分 (#562359)
    個人的かつ本業的には、POSIX 1003.1b などによりリアルタイムシステムへの 適用が可能になったことが大きいとおもう。
typodupeerror

計算機科学者とは、壊れていないものを修理する人々のことである

読み込み中...