thread に後方互換がない2007年01月27日 11時36分46秒

pthread に問題があるらしいことは既に突き止めた。

一応 /usr/src/UPDATING を覗いてみると COMPAT に関する記述があった。


20060927:
        Some ioctl(2) command codes have changed.  Full backward ABI
        compatibility is provided if the "options COMPAT_FREEBSD6" is
        present in the kernel configuration file.  Make sure to add
        this option to your kernel config file, or recompile X.Org
        and the rest of ports; otherwise they may refuse to work.

「ioctl が変更されたので、COMPAT_FREEBSD6 を付けてカーネルを作成しなければ、X.Org を代表とするほとんどの ports が動かない。」とある。

GENERIC では COMPAT_FREEBSD6 は有効になっているし、thread は ioctl でも無い。そこで、試しに pthread を利用している ports を一つ、作り直して見ることにした。

/usr/ports/lang/ruby18 も pthread が使われていて、比較的、コンパイルの時間が短くて済む。6.1-RELEASE の ruby を 7.0-CURRENT で動かすと、メモリを割り当て続け、異常終了するのも確認した。

ruby が使えないので、portupgrade も使えないため、cd /usr/ports/lang/ruby18 && make build {de,re}install をやった。インストールが無事に完了した後に、ruby は問題なく起動する様になった。

「6.1-RELEASE と 7.0-CURRENT の thread ライブラリは現時点では互換性がない。」という事になる。7.0-CURRENT で作られた物には問題が無いので、thread ライブラリ自体は壊れていない様だ。

6.1-RELEASE と 7.0-CURRENT にもバイナリ互換があれば良かったのだが、7.0-RELEASE は予定はあるが、6.2-RELEASE が三ヵ月以上遅れたので、予定通りにはいかないだろう。今の時点では、このぐらいの非互換は仕方無い。pthread を利用する ports のみを作り直すだけなので許容範囲内だ。

7.0-CURRENT のユーザランドにもチョコチョコと不具合が見つかった。全く利用出来ない程の不安定さは無いが、ある程度、真剣に使い始めると、微妙な変更やバグに気が付くようになってくる。

前回次回