4822221059
午前中、島根県立図書館に行こうと思い立つ。 冷房は効いてるし、本はたくさんあるし、駐車場はタダだし。 しかも無線LANまで使える。
で、何冊か見付けた本の中の一冊が 『4822221059』。 著者はIBMのオープンソースエバンジェリスト。 2003年の本だからあまり新しいとはいえないけれど、 まあ面白い内容であった。
この中で、私と意見が違うなと思ったところがあった。ライセンスの選び方として、
と解説されている(p.233)。これは最近の私の考えとはまるっきり反対方向だ。
私の今の考えでは
ソフトウェア無料を目指すならGPL
「無料」はオープンソースにとっても、フリーソフトウェアにとっても重要な目的ではなく、 目指すものでもない。そんなものを目指す人がいるのかかなり怪しいが、 もしいたとしてもGPLでもなんでも好きなライセンスを選べば良いと思う。 OSI準拠の方が良いと思うけど。
商用ソフトウェアの価値を上げるならBSD的ライセンス
「GPLは無料で自由であけっぴろげの世界を目指すライセンスなので、こういった目的には使えない」そうだが、この時点でGPLに対してなにか勘違いがあるような気がしないでもない。 MySQL ABやTrolltechのやってることはオープンソースで商用ソフトウェアの価値を上げることだと思うのだが、どちらもGPLだ。
もっとも、リンクして使ってもらってナンボのライブラリとかプラグインとかは BSD的ライセンスの方が向いている、というのはあると思う。
ソフトウェアの維持をコミュニティ化するなら、非GPL
「(自社開発のソフトウェアにGPLを適用すると)二度と自社の商用ソフトウェアの内部に転用できなくなることを覚悟する必要がある。ソースコードをGPLにするとはそういうことだ」とある。これは完全に勘違い。 GPLを適用しようがなんだろうが、自分のコードをどうするかは著作権者の自由。 コントリビュートされたコードの扱いについてだけは注意する必要があるが。
自社でライセンスを作るのもあり
2003年ころはまだのどかだったんだろうか。たった2年前なんだが。 これはお薦めしない。絶対に。
独自のライセンスは他のライセンスとの組み合わせの適否判断が困難である。 結局、使い勝手が下がってしまう。 ライセンスという非技術的理由で使えるものが使えなくなってしまうのはもったいない。
ま、そんな感じで。
追記:
読んでいるうちに気になる表現が見付かった(p.62)。
フリーソフトの語源は「フリー」な「ソフトウェア」という言葉である。 「フリー(free)」という言葉には「無料の」という意味と 「自由だ」の両方の意味があるが、 日本では基本的に「無料の」という意味だけが適用されていると思われる。
<中略>
ところがフリーソフトを初期から始めた人たちのなかには、 「フリー」を「自由な」という意味で始めた人たちもいた。 GNUの創始者であるリチャード・ストールマン氏は....(略)。
それはともかく、 日本ではフリー・ソフトウェア、あるいはフリーソフトという言葉は 無料のソフトウェアということで ここでは話を進めたいと思う。
うーん、ストールマンが怒り狂いそうなことをさらっと書いてるなあ。 「自由なソフトウェア」を無視してる(知らない)わけじゃないのに、 わざわざ「無料のソフトウェア」扱いしてるし。
書かれた時点では分からないけど、2005年時点でお薦めできるような内容ではなさそうだ。 この機会に他のオープンソース本も見てみるかなあ。
今度の『るびま』の連載で解説する予定なんだけど、 私の言語設計はCLU(より正確には久野さんのbitでのCLUの解説記事)から大きく影響を受けている。 その原則のひとつが、「ローカル変数のシャドーイングを許さない」である。
スコープのネストによって変数の意味が変化するのは悪である、という原則なのだが、 他の原則とは違って、これには「ちょっと混乱を招く可能性がある」というわずかな悪影響しかないわりに、 カット&ペーストによって名称が重複した時に変数名の書き換えが強制されるというデメリットがある。 自発的に書き換えるならともかく、処理系に強制されると腹が立つ。
いろいろ考えたのだが、この原則は破棄した方が良さそうだ。 ただ、良い面もあるので、-vオプションを付けたと来に警告くらいはしても良さそうだけど。 将来、警告にレベルを追加したらかなり高いレベルで初めて警告されるようにする程度だと思う。
HikiをCVS版最新にアップデートしたらhiki-mode.elが動かなくなった。 どうも、link URLが変化してしまったせいでhiki-fetch-indexが無限ループするようだ。で、 hiki-fetch-indexの正規表現を以下のように変更した。
"<a href=\"[^?]*\\?\\([^\"]*\\)\">\\([^<]*\\)</a>: \\([^<]*\\)</li>"
要するに「?までスキップ」する正規表現にしたわけ、ついでにre-search-forwardもwhileの条件に加えることと、ifで行っていた「?」のスキップが不要になったので、こんな感じ。
(while (and (equal (char-after) ?<) (re-search-forward "<a href=\"[^?]*\\?\\([^\"]*\\)\">\\([^<]*\\)</a>: \\([^<]*\\)</li>" nil t nil)) (setq indexes (cons (list i (hiki-http-url-unhexify-string (if (= (length (match-string 1)) 0) "FrontPage" (match-string 1)) hiki-coding-system)
うちに帰ったら、子供が一人増えてた。
いや、姪っ子が泊まりにきていたのだが、一瞬びっくりした。
「これで大家族だね」とか「いや、大家族にはあとふたりは欲しい」などと勝手なことを言う子供たち。