OS/2 用 OpenSSL の今後の展望、みたいな

なんかダラダラ書き込むことになりそうなのでおおまかな結論だけ先に書いちゃおう:バージョン 1.0.0 以上の OpenSSL ランタイムに関しては、netlabs の PortsRPM プロジェクトのものが今後「公式」的な扱いになってゆくであろうと。そしてそれは(私も含めた)OS2/eCS ユーザーと開発者にとって長期的にはよいことになるだろうと…以上、個人的な希望もこめて。


…そもそもいつから OS/2 用の OpenSSL のバイナリ自分で作るようになったのか、というのをときどき思い出せなくなる…たしか ruby の emx 版をごじょごじょやったついでに 0.9.8 を自前で作ったんだっけ…? emx 版はともかく kLIBC のほうはなんで作ってしまったんだろう…

まあ何というか…少なくとも私が野良ビルドしたものに関してはよーするに "private build" の域を出ないものであって、逆にこれが「公式」化されるというのはあまりよい状況ではないなーと思っていました。理由はいくつかあります。

  • OpenSSL の内部実装に対する(そして SSL/TLS そのものに対する)知識が自分にはほとんどない。今回の SMP がらみの修正では OS/2 固有の乱数生成部に手を入れる必要があったが、乱数生成ってのはデータセキュリティ上かなり重要な箇所であって、「パフォーマンス取得 API が腐ってるから libc の random で埋めといた」みたいな修正は入れたくなかった…だいたい修正前のコードがほんとに暗号的にセキュアかどうかさえ自分には確信が持てていないんだぜ…。
    WindowsUnix 用のコードを見る限り、もうすこし環境ノイズの取得にコストを払うべきでないか、とは思うんだけど、OS/2 向けにはどう書くのが安全なのかよくわからんのですよね…Unix でいうところの /dev/random みたいなシステムワイドな CSPRNG を誰かが OS/2 に実装すべきだと思う)
  • DLL のネーミングがちょっと素直じゃない("kcrypt10.dll" とかみたいにプレフィクスついてる。他の人が作ったものと名前がかぶりにくいように、意図的につけた。「同じ名前の DLL なのにまったく使い回しができない」ということが過去にあって、だいぶ懲りた…)
  • OpenSSL と GPL の間にあるライセンスの矛盾。両者のライセンスに厳密に従うならば、GPL ライセンスを採用しているソフトウェアは OpenSSL とリンクできない。("openssl gpl" あたりのキーワードでぐぐると色々出てきます)

最初のふたつは個人的、技術的な問題ですが、最後のものはむしろ政治的(?)です。GPL ソフトウェア側のライセンスに例外条項がついている(wget みたいに)場合は別にして、一般的な解決策となると…

  1. OpenSSL をあきらめて GPL 互換の代替品を使う→「我々は FSF。お前たちのセキュリティレイヤーは GnuTLS と同化する。抵抗は無意味だ」
  2. 「こまけぇことはいいんだよ(AA略
  3. 「OpenSSL はもはやオペレーティングシステムの一部です(キリッ」

まあ Linux やら *BSD ならキリッとしとけばだいたい問題ないっぽいですが、OS/2 は(そしてもちろん eComStation も)言い逃れようのないプロプライエタリ商用 OS なわけで、商用 OS「の一部」と強弁したいならすくなくともベンダ自身の手で配布やメンテナンスを行う必要があるだろうと。

そういうわけなので「openssl の port を netlabs の ports に入れちゃっていい?」的なメールをもらったとき「全然かまわんです」的な返信を出したのでありました。(eComStationディストリビュータである)mensys がスポンサーになっている netlabs にホスティングされていればキリッとする言い訳もたちやすい。OS/2rpm の移植計画とも連携しているので、rpm 環境がうまいこと整備されれば、各種のツールやライブラリの依存関係の解決がかなり楽になる…エンドユーザー向けにどれだけ意味があるのかわからんですが、開発者レベルではかなり有益だと思うので、個人的には期待しております。(それから「ああ…俺がメンテしなくてもいいんだ…」という安堵感があることも否定できなかったり)

まあ ports/rpm 側の OpenSSL は私のと違い、もっと無難な DLL 名を採用している(crypto10.dll, ssl10.dll)ので、そのまま DLL を置き換えることはできませんが、将来的にはこっちから向こうに中継する DLL を作ることでランタイムライブラリを一本化できたらな、と考えています。