Plan 9で Webプログラミング oraccha Plan9日記(http://d.hatena.ne.jp/oraccha/) 2009年12月10日 Mitaka.rb&三鷹プログラマーズカフェ合同忘年会
Plan 9でWebプログラミング
oracchaPlan9日記(http://d.hatena.ne.jp/oraccha/)
2009年12月10日 Mitaka.rb&三鷹プログラマーズカフェ合同忘年会
Plan 9とは• UNIXを開発者らが作った分散OS
• Google Goの発表でにわかに再注目?
1995
Dennis Ritchie
Dave Presotto
Rob Pike
Phil Winterbottom
Plan 9とは• UNIXを開発者らが作った分散OS
• Google Goの発表でにわかに再注目?
1995
Dennis Ritchie
Dave Presotto
Rob Pike
Phil Winterbottom
http://undergoogle.com/tools/GoogleMasterPlanEN.html
Google OSPlan 9
Plan 10
Plan 11?
Go
• Robert Griesemer、Ken Thompson、Rob Pike、Russ Cox氏らが開発しているプログラミング言語
• 動的言語並にプログラミングしやすい、 静的型付きコンパイル言語
• CSP→NewSqueak→Alef→Limboの血統
GopherGlen and Glenda
Illustrated by Renée French
Plan 9の基本設計
• すべてがファイル• 9Pプロトコル
• プロセスごとの名前空間
UNIXに与えた影響• 9Pファイルシステムプロトコル
• procファイルシステム
• ダンプファイルシステム• rfork、cloneシステムコール
• ユニオンディレクトリ• UTF-8 などなど
Pegasus:Webサーバ• 有澤先生@愛知大が開発した、Plan 9
らしいWebサーバ
• ファイル名前空間の仮想化を活用した安全なCGI実行環境を提供
• ユーザごとにサンドボックス化(アクセス可能ファイルの制限)
• cf. chroot jail
Rit:テキスト埋込み言語• PHP、JSP、eRuby、ebashなどの同類
• 埋め込む言語はRcシェルスクリプト
Date: ${date}
${if (~ $REQUEST_METHOD POST) { ifs=’&’ for (kv in `{cat}) { ifs=’=’ kv=`{echo -n $kv} ‘QS_’^$kv(1)=$kv(2) }}$
My name is $user.
#!/bin/rit -s${ . ./cgilib.rc# for urldecode logfile=test.log if (~ $REQUEST_METHOD POST) { ifs='&' for (kv in `{cat}) { ifs='=' kv=`{echo -n $kv} 'QS_'^$kv(1)=$kv(2) } echo `{date}: $QS_input | urldecode >> $logfile echo >> $logfile }}$<html><body><form method="POST" action="/index.cgi"><input type="text" size="60" name="input" value=""><input type="submit" value="post">${ tail -10 -r $logfile | awk '{ print $0 "</br>" }'}$<hr><a href="http://plan9.bell-labs.com/plan9/"><img src="image/power36.gif"></a></body></html>
Reference
• Plan 9: http://plan9.bell-labs.com/plan9/
• Pegasus: http://plan9.aichi-u.ac.jp/pegasus/
• Rit: http://plan9.aichi-u.ac.jp/rit/
• Plan 9日記: http://d.hatena.ne.jp/oraccha/