私は微妙に「オープンソース」と「フリーソフトウェア」を使い分けている。私の気持ちとしてはRubyはあくまでもフリーソフトウェアであり、オープンソースソフトウェアはフリーソフトウェアを含むので*1、オープンソースソフトウェアと呼ばれることを受け入れるというのが私のスタンスだ。そんな私がなぜオープンソースという言葉の定義にこだわるか、といえば、それは実利のためである。残念なことに企業はプログラマの自由には関心がない。企業が一番に関心を持つのは、それは儲かるのか、ということだ。Stallmanの長年の闘争がビジネス的にはあまり成功していないことからも分かる。Raymondは『伽藍とバザール』と続く論文で示すことに成功し、それとともに「オープンソース」という単語も導入した。これによって「オープンソースはビジネスになる(なりえる)」というコンセプトが生まれたのだ。このコンセプトはほとんど武器を持たない我々フリーソフトウェア開発者にとって「中間層」を刺激し、取り込むための重要な「道具」である。その効力は(少なくとも日本では)まだ消え去ってはいない。この道具を手放すのは愚かだ。今以上にフリーソフトウェアに対する支援を引き出せると考えている。フリーソフトウェアによるソフトウェアの自由がより豊かな社会を実現できるとも考えている。そのためには、この道具にまだまだ効果的に働いてもらう必要があるのだ。推測だが、オープンソースはソース公開の意味しかないとする人は不勉強あきらめているオープンソースという「道具」の破壊を意図しているのいずれかではないだろうか。不勉強の人たちには教えれば良い。なんか逆ギレしてる人たちもいるようだが、あきらめずに紹介し続けよう。彼らは知らないだけなのだ。オープンソースという言葉を正しく使う時にはメリットがあり、そうでない時にはデメリットがあることを知らせよう。あきらめている人たちには「あきらめるな」と伝えよう。日本ではコンピュータ関係の層が薄いせいもあって「オープンソース」という単語が一般社会には知られていない。知られているにしても「なんか今までにないやり方」くらいのレベルでしかない。少なくとも私の近くの非業界人は「全然知らない」か「単語を聞いたことはある(が意味は知らない)」のいずれかであった。どちらも(彼らが知りたいと思えば)正しい知識を教えるのは容易である。業界人にはオープンソースを正しく理解している人が一杯いる。実はうるさいだけで「オープンソース=ソース公開」だと頑固に考えている人こそ少数派なのではないか。統計をとっていない以上そうでないと誰が言えよう。言葉の「新しい意味」の導入を謀る人は、その意味が本当に「もっとも良く使われている」ことを示す必要がある。なければ単なるFUDだ。我々は古い意味を守る側なのでその義務はない。その意図を明らかにしようとしないだろう。それは「陰謀」なのだから。いう人はいないかもしれない。いるとしたらすでに「あきらめている人」のフリをして、我々もあきらめさせようとするだろう。あきらめてはいけない。「オープンソース」という言葉すべてについて言葉狩りをするのは意味がない。「ケータイ」がPHSを含む時もあり、そうでない時もあるように、会話の中でのオープンソースも文脈によって単なるソース公開を意味する時もあり、OSD準拠の時もあるだろう。「オープンソース=ソース公開だけ」という誤解を再生産するような記述や、オープンソースという言葉の効力を損ねるような発言は指摘し続ける必要があると思うのだ。フリーソフトウェアでないオープンソースソフトウェアはある。Softwareと表示して明確にしようという戦略に変更したということは知っている人も多いだろう。私は最近まで知らなかったけど(ダメすぎ)。Certifiedと名乗るのはなんか違う気もする。Certifiedですと認定してしまうのはどうだろう。リストに追加しちゃうの。Softwareですって。いいアイディアだと思うんだけどなあ。Freshmeatあたりを利用すればすぐにできそうだし。[OSS]ソース公開ソフトウェアところで、ソース公開しているけどOSD準拠でないソフトウェアってのはどんなものがあるだろう。HORBのように作者の主張が強すぎて結果的にOSD準拠でなくなったもの、Delegateのように勤務先の制約でOSD準拠でなくなったものは理解できる。これを「気持ちだけオープンソース」ソフトウェアと呼んでみよう。「マイクロソフトシェアードライセンス」のような「見せるけど再配布はダメ」というのは、セキュリティ検証の観点とオープンソースに対する対抗という観点の両方から理解できる。呼ぶとしたら「オープンソース対抗」ソフトウェアかな。[OSS]オープンソースってなに?たしかに、オープンソースについて全然知らない人に説明する時に「だまってここを見よ」というようなサイトがあれば便利ですよね。私の知ってる中で一番良さそうなのは<URL:http://www.catch.jp/openoffice/open.htm>です。私の感覚は人とはずれてるみたいなんですが。これなら大丈夫だと思うんだけど。ほかにも良いサイトがあれば紹介してください。preview3「オープンソース」などにかまけていたら、SeanがREXMLをコミットしてしまった。だいたい片づいているんだけど、Block/Procについては少々悩みが残っている。あと、原稿の〆切が...。使い勝手という点でやや難点がある。要するに使い分けが難しいのだ。似過ぎていると言ってもよい。Thomasからもこの変更の導入直後に指摘を受けた。いくつか考えているのだが、結論は出ていない。私の考えの経過に興味を持つ人もいるだろうから、ここの書き連ねておく。loud"だと思って読んでほしい。BlockとProcの使い分けについて当初の目的は上に述べた通り「コードブロックをオブジェクト化したBlockと、無名関数オブジェクトとしてのProc」の分離である。実際に使っていると混乱してきそうだ。そこで生成の仕方を明確に分離することにした。Block.newはブロックなしで指定すると現在のメソッドに与えられているブロック(yieldの対象)をオブジェクト化するが、Procの方はブロックを与えなければ警告する(最終的にはエラー)。Proc.newはブロックをくるんだ関数オブジェクトを返すという意味づけができる。Thomasの提案に沿って「関数オブジェクトを作る構文」を導入してもよい。この意味づけを強調するために近くBlockとProcの継承関係を外すつもりだ。ところどころで見かけるp.kind_of?(Proc)のようなコードは、今のうちにp.respond_to?(:call)に変更することをお勧めする。互換性問題Blockっていうのはかなり一般的な語彙なので、すでに使っている人がいるかもしれない。いうか、実際に問題が起こったケースもあるようだ。無名の関数オブジェクトってメソッドオブジェクトたるMethodと似過ぎていると考えることもできる。BlockとProcとMethodと、callで呼べる似たようなものが一杯あるのは望ましくないかも。Typedな考え方なのかもしれないけど。いうわけで、最終解決案(の候補)1.8.0では以下のいずれかになるのでは。BlockとProcは親子ではない。BlockとProcとMethodがある。生成方法が異なるBlockが残り、ProcはMethodとunifyされる。BlockはProcに戻る。無名関数オブジェクトはMethodにunify。リリースのタイミングを考えると最初のものが一番ありそうだなあ。Magazineもうそろそろ8月号の〆切が迫っています。今月のテーマは「エクストリーム・プログラミング」にしようかと思ってます。「初等」でも「入門」でもありませんな。今後の内容については〆切を乗り切った後、更なる考察が必要そうです。[と、書き込んでから気付きました。[あいやー、「中間層」って言葉が誤解を生みましたか。近いうちにwww.ruby-lang.orgで発表されるもの。CVSリポジトリ安全確認完了のお知らせ5月28日のクラック発見以来、ruby-lang.orgのCVSサービス停止でご迷惑をかけております。今回の侵入はCVS脆弱性を利用したものであり、侵入者はhelium.ruby-lang.orgのanoncvs権限を奪取に成功し、バックドアを仕掛けたものの、それ以上の行為には至っていないものと考えられます。ログやバックアップとの比較によってroot権限の奪取やchroot環境の外部への悪影響は発見されていません。残念なことにCVSリポジトリはanoncvs権限で変更可能に設定されており、今回の侵入による安全性は保証されていませんでした。そこで我々は以下の手順で改竄が行われていないこと確認しました。cvsupによるリポジトリの外部への複製のログを入手し、このCVS脆弱性が公表された19日以降、我々が関知していない変更が行われていないことを確認した。侵入が行われたと考えられる5月23日以前のもっとも新しいリポジトリのコピーである21日分と改竄が疑われる最新のCVSリポジトリの全データの差分をとり、我々の関知していない変更が行われていないことを確認した。このことにより、我々スタッフ一同はRubyのCVSリポジトリには改竄が行われていないことを確信するに至りました。開発用リポジトリはすでに再開しています。CVSの再開はしばらく先になると思われます。あしからずご了承ください。実はこれらの確認はとっくにできていたのだ。作文を怠慢してただけ。[Ruby]「オレってばすげー」メールオーガナイザーのパーツとしてsafecat(1)をRubyで実装してみた。20分で完了してしまった。思わず「オレってばすげー」と思ってしまった。実際はすごいのは自分ではなくてツールだ。Rubyだからこそこの速さで開発できたのだ。そのRubyを開発したのは...。...はいはい、分かりました。自慢したかったんでしょ。妻が玄関を片付けていた。玄関の靴入れの上は都合よくものが置ける場所なので、FAXやらADSLモデムやら無線ルーターやらと、引っ越しのときに出たゴミのようなものが積み上がっていてこの1月ほど異常に乱雑な様子であった。機器は片隅に並べられ、残った場所には妻お手製のカントリードールが並べられた。昨日までの散らかり具合を思うと見違えるようだ。仲間たちと並ぶことになった。