週刊mosh : parameterizeの仕様 / OpenSSL統合

今週というか昨日、一昨日はMona移植の統合やIssueがいくつか追加されるなどそれなりに動きがあった。
追記 : そもそも、psyntaxのparameterizeがSRFI-39なのかどうか調べてないのでタイトル変更。

報告されたIssue

  • parameterizeの仕様(was: SRFI-39実装のバグ)

(後述)

これはDATUM_COMMENTの後にdatumが来るのを期待しているのが原因。。

解決されたIssue

(display #\tab)の結果と(put-char (current-output-port) #\tab)の結果が違う問題。
基本的にdisplayは読める出力なら何を出しても良いので、移植性を期待するコードではput-charを使うのが好ましいが。。

SRFI-39とparameterize

parameterizeの問題2つ。
前者は http://fixedpoint.jp/2011/01/08/a-portable-bug-of-srfi-39.html の通り、Gaucheのような他のScheme実装にもある問題で、moshの場合はpsyntax-moshが影響を受ける。
nmoshにはこの問題は無い。
psyntax-moshはpsyntaxを使っているため、何もしない状態ではpsyntaxのparameterizeを使うことになる。(srfi :39)ライブラリ中のparameterizeにはこの問題は無いので、SRFI-39を使うスクリプトやREPLセッションでは常にこのライブラリをimportするのが好ましい。
というわけで、当面は明示的にSRFI-39をロードするのが対策ということになる。

prism:~ oku$ mosh -V
Mosh R6RS scheme interpreter, version 0.2.6
prism:~ oku$ mosh
mosh> (import (srfi :39))
#<unspecified>

mosh> (parameterize () 1) 
1

OpenSSL統合

OpenSSLがSocketに統合された。
OpenSSLはGPL非互換なライブラリなので、OpenSSLが統合されていないOS上ではそのままではGPLスクリプトが実行できなくなってしまう。
もっとも、この点に関してはGNUも曖昧にしている。

プログラム自体はGPLの下で書かれ公開されているが、そういったGPLと 矛盾するライセンスが適用された機能と共に動作するよう設計されているこ とが明白ならば、人々はプログラムをそれらの機能とリンクする許可が暗黙 の例外として与えられていると考える可能性があります。しかしそれがあな たの意図ならば、そうはっきり述べておいたほうが良いでしょう。

というわけで、moshSSL機能を使う際は注意されたい というのは難易度が高すぎるので、対策を検討中。例えば、OpenSSLのかわりに、単にGnuTLSを使うことで問題を回避できる。
GPLスクリプトを単に実行するだけでは殆どの場合は問題ない。しかし、nmoshはキャッシュ単体での実行を防ぐための技術的手段を全く講じていないので、ユーザが知らず知らずのうちにGPLソフトウェアを不正コピーしてしまう可能性は有る。もちろんDRMを導入してそのようなコピーを防ぐことも考えられるが、単にインタプリタ全体をGPL互換にする方がずっと簡単と言える。