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

Linux kernelにSchemeを組み込み 51

ストーリー by yasu
次はPerl 部門より

moriwaka曰く、"Linuxカーネルはオープンソースであることもあって、これまでもhttpサーバーが組み込まれたりしてきたが、ついに言語処理系を組み込むツワモノが現れた。
SchemixはLinuxのカーネルパッチとして実装されたScheme処理系である。専用のデバイスファイル /dev/schemix をインターフェースとしてSchemeのREPL (read, eval, print loop) を行う。現在はlinux 2.4.20向けのパッチがリリースされている。"

理由はいくつか書かれているが、 It's fun が大きそうだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by SteppingWind (2654) on 2003年04月29日 17時18分 (#307167)

    って最近では特に珍しい物じゃないと思います. SolarisやFreeBSDではFORTHインタープリタが組み込まれていますし.

    ただ, それをデバイスとして使用できるという点とLisp系言語だという点では面白い試みだと思います. FORTHはやっぱり言語としてクセが有りすぎ(簡単で面白いのですが)なので, いじくるならLispという人は多いのではないでしょうか.

  • 次はPerl ってことは (スコア:2, おもしろおかしい)

    by sodium (1155) on 2003年04月29日 21時53分 (#307271) ホームページ 日記
    PerlにSchemeを組み込むんですね。
  • うーん。最初は単に言語処理系をデバイスドライバとしてカーネルに組み込んだだけのお遊びかと思ったけど、これは単にデバイスをインタフェースとしているだけで、しっかりとカーネルに組み込まれているみたいですね。

    さらに Scheme でコードを書いてそれをデバイスドライバにできるみたいですから、通常の実行形式としても Scheme のコードが動いたりするのですかね。

    サンプルコードの末尾に、カーネルの exported variables も操作できる、っていう例が載っていますけど、これって一体なんでしょう。カーネルで使っているグローバル変数をいじれるんでしょうか。だとしたらまったく secure じゃない…ちがうのかなあ。

    内部はどうなってるんでしょうね。システムで使うリソースがすべて Scheme のオブジェクトだったりしたら面白いんですけど。あ、さすがにパフォーマンスに問題が出るか…。そのあたりはどうやって折り合いをつけてるんでしょうね。どっかで変換かけてるだけなのかな。

    以上、中途半端な興味しかないので流し読みしての感想。
  • Mini-Scheme由来 (スコア:2, 参考になる)

    by Anonymous Coward on 2003年04月30日 11時27分 (#307567)

    ソース見ました。TinySchemeを元にしているんですね。

    TinySchemeはMini-Schemeを元に作られています。 Mini-Schemeは1ファイルのソースのみだけどちゃんとGCもついてるScheme処理系。 元々Atsushi Moriwakiさん(たぶん森脇淳さん)が作られて、 その後Akira KIDAさんがメンテされていた、と ドキュメント [indiana.edu]には 書かれています。AM-Scheme [vector.co.jp]とはどういう関係なのかな?

    # ちなみにMini-SchemeはPUBLIC DOMAIN。

  • by goubu (3245) on 2003年04月29日 20時01分 (#307221)
    さらに、カーネルが Lisp になれば Lisp Machine。
    • by Anonymous Coward
      ならない、って。ハードウェアのサポートがないじゃん。(それとも lisp machine を知らずに言ってるのか…)
      • by shiba (273) on 2003年04月29日 23時18分 (#307323) ホームページ
        >ハードウェアのサポートがないじゃん。

        やっぱ

        Contents Address Register
        Contents Data Register

        とかいうレジスタ名でないといけないのでしょうか?
        (レジスタ名はたぶん間違っているはず...)
        親コメント
      • by Anonymous Coward
        > それとも lisp machine を知らずに言ってるのか…
        いや、ネタでしょ。
  • by tma20 (3064) on 2003年04月29日 21時51分 (#307269)
    勉強不足でよくわからないのですが…
    Scheme でデバイスドライバとか作って、それをCに変換して
    とかできちゃったりするのでしょうか?

    いや、先日の Squeak の記事を思い出してふと思ったのですが
    インタプリタでプロトタイプつくれるならいいかも。
    • 「うれしい」「うれしくない」じゃなくて、
      「楽しい」「楽しくない」なので無問題。
      • by G7 (3009) on 2003年04月30日 13時33分 (#307628)
        #307296に書かれているように、素早く対話的にドライバのプロトタイプを作れるぞ、が目的なのならば、
        just for fun ONLYってことはないでしょうね。(うまく出来ているならば)実用性も十分期待できる。

        言語の能力が(Cより)高いと、プロトタイピングも楽でしょうね。てゆーか楽です。
        Cみたいな中級言語で苦労して書くのは、本番コード、つまり最後の一回だけで済ませられる(のが究極の目標)ってことで。

        余談:
        Squeak入門 過去から来た未来のプログラミング環境 [yfcbookshelf.com]、読み始めました。
        で、最初のほうに書いてあって今更知ったんですが、Squeak→Cトランスレータって、
        Squeak(Smalltalk)言語のフルセットじゃなくサブセットを変換の対象とするんですってね。
        フルセットの(妥当なコスト範囲での)変換は無茶だろうなとクビをかしげていたんですが、長年の疑問が解決。
        #注:真人間ならソースを読んでとっくの昔に気付いているべきことなんですが(笑)

        余談2:
        Javaの(本家の)VMは極端だとしても、インタプリタ処理系が「遅い」のって、その処理系の起動にかかるコストも結構大きいっぽいですよね。
        カーネル内に存在し、いわば常時立ち上がってるままの処理系なら、その辺は気にしなくて済むわけで。
        親コメント
  • by L.star (163) on 2003年04月29日 23時13分 (#307320) ホームページ
    HTTPDとか言語も良いのですが、RDBMSを組み込んでしまうのがいいなぁ、とか思ってたりします。ファイルシステムとしてではなくてね。

    いや、昔Oracleがしくじったのは知っていますが。

    • by Average (3404) on 2003年04月30日 0時14分 (#307364) 日記
      冗談ぬきに、あちこちのPCを渡り歩いたりすると、サーバー上に全ての情報を一括して貯めておいて、PCから作業する時にガバっとサーバーから取り出すスタイルの方がこれからの時代あっているよーな気が。
      次世代あたりからその手の機能が入りだすよーな予感が。

      あれ?次世代ファイルシステムって・・・・・CVS?
      --
      -----------------
      #そんなワタシはOS/2ユーザー:-)
      親コメント
      • by ncube2 (2864) on 2003年05月01日 8時30分 (#307971)
        (ブート用FD or 専用NIC) & NetWare :-)
        親コメント
      • by Anonymous Coward
        > あれ?次世代ファイルシステムって・・・・・CVS?

        せめて WebDAV にしてください。
      • by Anonymous Coward
        > サーバー上に全ての情報を一括して貯めておいて、
        > PCから作業する時にガバっとサーバーから取り出す

        有名なところでは、AndrewFS とか CodaFS がまさにそういうのを
        実現したものです。
      • by Anonymous Coward
        >世代あたりからその手の機能が入りだすよーな予感が。

        事実M$は、その方向で進むんじゃなかったっけ?
    • Windows のレジストリに似た考え方ですね。同じ問題も起きるのではないでしょうか。あー、データが壊れちゃった、また再インストールしなきゃ…、みたいな。

      まあでも考え方としては悪くないと思います。
      親コメント
    • by dgz (12635) on 2003年04月30日 17時49分 (#307733)
      BeOSってファイルシステムが RDBMSだったりしませんでしたっけ??
      いや、Relationalじゃなかったかな.. とにかくそこら辺「かっこいい」 と聞いた記憶があります。

      # とかいてフォローを待ってみたり

      親コメント
  • 結局、これってカーネルモードで動くScheme処理系ですよね?

    そうすると、確かにカスタマイズが容易になりますが、WindowsのActiveXやVBScriptのような使いかたが出来たりしたりすると、それらと同じくセキュリティ上致命的な問題を恒常的に抱える羽目になるのではないでしょうか?

    # 杞憂で終わればいいのですが…

    • kernelのmisc binary support (CONFIG_BINFMT_MISC)によるJavaVMコードの実行とか、DOSコードのDOSEMUでの実行と同じように、Schemeコード実行してはだめなのか。
      ブート時に init=/bin/scheme というのが、schemeマシンとしてはいいのでは?など、デバイスにした理由がよくわからじ。
      親コメント
      • ちゃんと読んでるのかな。
        Schemeがカーネル「内部」で動くことに意味があるのであって、外で動くこととは明確に違う。カーネル内部の変数が見えたり内部APIが呼べたりするのはいろいろ面白そうだ。
    • んーと、もしかして(例によってこれについても知らないもんで)、
      これをセキュリティ穴と呼ぶなら、LodableKernelModule(てゆーんだっけ?)も穴なのでしょうか?
      コードのフォーマットがバイナリかテキスト(Schemeソース)かが違うだけ、ですよねえ…?

      これまたやっぱり知らないんですが、同じようにLKMも穴扱いされて使われないもの、なのでしょうか?

      たとえば問題のデバイスファイルを、
      一般ユーザー権限じゃアクセスできないようにpermission設定するとかすれば
      いいんじゃないかな(てゆーか最低限それくらいはするよね)、
      と思ったんですが、Unix的にはそういうものではないんでしょか?
      親コメント
    • VBScriptとはWSHですよね?

      そうすると、どこらへんがセキュリティ上致命的な問題を恒久的に抱えている構造なのしょうか?

      # Artane.なんぞの発言を気にするほうが間違っているか…
      • WSH自体に問題なくてもそれをLinuxカーネルにくくりつけてカーネル内部APIを (カーネルの新規機能追加やデバイスドライバ開発のrapid prototypingに使える程度に) 呼び出せるようにしたらセキュリティ上の問題を恒久的に抱え込んでも不思議はないと思いますが…

        おそらくこの機能はデバッグ時など特定の場合にのみ有効にするのが前提なんだと思います。
  • elisp の区別が付いてないけど

    emacs 組み込みの kernel を是非

    きっと多機能 kernel だ
    --
    「それがどうした、おれたちには関係ない」
    • by Anonymous Coward
      そうしてkernelのサイズが10MBをはるかに越える罠。
      • by densuke (113) on 2003年04月30日 12時21分 (#307593) 日記
        ミニバッファが常に出現し、時折ガベージコレクティングが発生する。もちろんその間はストールする。まてよ、C-gで処理のキャンセルが発生するのか?

        妄想してしまうがとりあえずEmacsのお世話になってるのでID
        --
        -- やさいはけんこうにいちば〜ん!
        親コメント
    • by Anonymous Coward
      ……Emacs Makes A Computer Slow

      というのはともかく、elispはcommon lisp系なのでschemeとは微妙に違います。
      # とはいいつつ defun と define の違いくらいしか知らないので AC で
  • by yasudas (5610) on 2003年04月30日 12時23分 (#307594) 日記
    FreeBSDを組み込むとか...
    Windowsを組み込むとか...
    Mac OSXを組み込むこと...はないか...

    # つまりはPCエミュレータを組み込めばよい?
  • by takawata (4669) on 2003年05月01日 11時55分 (#308053)
    あなたのお使いのOSカーネルにも既に
    インタプリタは組み込み済。ブート後
    ユーザーランドから組み込む機能は今の所
    無いけど。ACPIといいまつ。
    これはOpenFirmと違ってFirmwareの機能では無いです。
typodupeerror

人生の大半の問題はスルー力で解決する -- スルー力研究専門家

読み込み中...