kubo39's blog

ただの雑記です。

jailingをD言語にポーティング、やってみた!

kazuho/jailingD言語に置き換えてみました。

これです。

目的

実用的にはLinuxであればどの環境でもPerl5が入っていることは期待できるし外部依存もないので特に意義はないです。 あくまで学習目的というやつです。コードサイズも小さいし、いいかなって。

jailing

説明はここを読んで。

もう少しカスタムできるツールだとfirejailだとかnsjailとかあるけど、このくらいの分量だと学習しやすくてありがたいです。 というかこれだけで立派なchroot+jailになるのいいですね。

D言語

Q: なんでD言語なの?
A: 言わせんな恥ずかしい

書いてみての雑感。

  • わりと標準ライブラリでなんとかなるところがよい?でもけっきょく executeShell ばっかりになるもんなあという気もしないではない。
  • あとはなんか std.path.buildPath なんかはきっちり書きたい感出せる気がする。
  • あ、FFIextern (C) だけすればなんとかなるのでだいぶよい。

D言語で書けばバイナリを配るだけ作戦が使える、のだけど元がPerlPythonスクリプトの場合だと書き換え自体がメリットになりにくい。 jailingのようなツールだとそんなに速度とかいらなさそうだし、どうせプロセス起動が遅いのでさほど変わらんだろう。 Rubyとかだったらスクリプトと別に処理系入れるの面倒じゃない?みたいなところに対してメリットが言えそうなんだけど。 なおこの作戦はGoやRustでも別によいという話もある。

jl

だいたい似たような動機のプロジェクトで yoshitsugu/jl というRustのやつがありました。

Rustだと caps とか libmount とかライブラリがあったりして外部コマンドを使わないで実装できるのはいい感じがします。実行時のメモリフットプリントとかにうれしい。 あと clap みたいなコマンドラインパーサがあるとCLI書くとき便利。 ここでは使われていないけど他にもstructoptとかも便利系のやつです。

ところでjlはコマンド実行も外部プロセスにしてしまってるけどここは CommandExtexec 関数を使うべきでは。