«前の日(06-09) 最新 次の日(06-11)» 追記

Matzにっき


2003-06-10

_ [OSS]なぜ「オープンソース」なのか

気が付いている人もいるかもしれないけれど、 私は微妙に「オープンソース」と「フリーソフトウェア」を使い分けている。

私の気持ちとしてはRubyはあくまでもフリーソフトウェアであり、 オープンソースソフトウェアはフリーソフトウェアを含むので *1、 オープンソースソフトウェアと呼ばれることを受け入れるというのが私のスタンスだ。

では、そんな私がなぜオープンソースという言葉の定義にこだわるか、といえば、それは実利のためである。

残念なことに企業はプログラマの自由には関心がない。 企業が一番に関心を持つのは、それは儲かるのか、ということだ。 これは事実で、Richard Stallmanの長年の闘争がビジネス的にはあまり成功していないことからも分かる。

しかし、フリーソフトウェアの開発スタイル(の一部)は実は企業にとってもメリットがあることを、 Eric Raymondは『伽藍とバザール』と続く論文で示すことに成功し、 それとともに「オープンソース」という単語も導入した。

これによって「オープンソースはビジネスになる(なりえる)」というコンセプトが生まれたのだ。

このコンセプトはほとんど武器を持たない我々フリーソフトウェア開発者にとって 「中間層」を刺激し、取り込むための重要な「道具」である。 しかも、その効力は(少なくとも日本では)まだ消え去ってはいない。 まだ使える道具なのだ。

この道具を手放すのは愚かだ。

私は、オープンソースというキーワードを利用して、 今以上にフリーソフトウェアに対する支援を引き出せると考えている。 また、フリーソフトウェアによるソフトウェアの自由がより豊かな社会を実現できるとも考えている。 そのためには、この道具にまだまだ効果的に働いてもらう必要があるのだ。

あくまでも推測だが、オープンソースはソース公開の意味しかないとする人は

  • 不勉強
  • あきらめている
  • オープンソースという「道具」の破壊を意図している

のいずれかではないだろうか。

不勉強の人たちには教えれば良い。 なんか逆ギレしてる人たちもいるようだが、あきらめずに紹介し続けよう。 彼らは知らないだけなのだ。 オープンソースという言葉を正しく使う時にはメリットがあり、 そうでない時にはデメリットがあることを知らせよう。

あきらめている人たちには「あきらめるな」と伝えよう。 日本ではコンピュータ関係の層が薄いせいもあって 「オープンソース」という単語が一般社会には知られていない。 知られているにしても「なんか今までにないやり方」くらいのレベルでしかない。 少なくとも私の近くの非業界人は「全然知らない」か 「単語を聞いたことはある(が意味は知らない)」のいずれかであった。 どちらも(彼らが知りたいと思えば)正しい知識を教えるのは容易である。 一方、業界人にはオープンソースを正しく理解している人が一杯いる。 実はうるさいだけで「オープンソース=ソース公開」だと頑固に考えている人こそ少数派なのではないか。 統計をとっていない以上そうでないと誰が言えよう。

言葉の「新しい意味」の導入を謀る人は、 その意味が本当に「もっとも良く使われている」ことを示す必要がある。 そうでなければ単なるFUDだ。我々は古い意味を守る側なのでその義務はない。

オープンソースという手法に反対し、破壊しようとしている人たちは、 決してその意図を明らかにしようとしないだろう。それは「陰謀」なのだから。 そういう人はいないかもしれない。でも、いるとしたら すでに「あきらめている人」のフリをして、我々もあきらめさせようとするだろう。 あきらめてはいけない。

最後に。「オープンソース」という言葉すべてについて言葉狩りをするのは意味がない。 「ケータイ」がPHSを含む時もあり、そうでない時もあるように、会話の中での オープンソースも文脈によって単なるソース公開を意味する時もあり、OSD準拠の時もあるだろう。 しかし、「オープンソース=ソース公開だけ」という誤解を再生産するような記述や、 オープンソースという言葉の効力を損ねるような発言は指摘し続ける必要があると思うのだ。

*1  フリーソフトウェアでないオープンソースソフトウェアはある。では、オープンソースソフトウェアでないフリーソフトウェアはあるのか

_ [OSS]OSD Certified

アメリカではOpen Sourceが商標を取れなかったこともあって、1999年ごろOSD準拠のソフトウェアを OSI Certified Open Source Softwareと表示して明確にしようという戦略に変更したということは 知っている人も多いだろう。 私は最近まで知らなかったけど(ダメすぎ)。

でも、自分からOSI Certifiedと名乗るのはなんか違う気もする。 ここはいっそOSD準拠のライセンスを持つソフトウェアをOSIが一方的に

あなたのソフトウェアはOSI Certifiedです

と認定してしまうのはどうだろう。んで、リストに追加しちゃうの。 こんなに膨大な数のソフトウェアがOSI Certified Open Sorce Softwareですって。

いいアイディアだと思うんだけどなあ。 Freshmeatあたりを利用すればすぐにできそうだし。

_ [OSS]ソース公開ソフトウェア

ところで、ソース公開しているけどOSD準拠でないソフトウェアってのはどんなものがあるだろう。

HORBのように作者の主張が強すぎて結果的にOSD準拠でなくなったもの、 Delegateのように勤務先の制約でOSD準拠でなくなったものは理解できる。 これを「気持ちだけオープンソース」ソフトウェアと呼んでみよう。

また、「マイクロソフトシェアードライセンス」のような 「見せるけど再配布はダメ」というのは、 セキュリティ検証の観点とオープンソースに対する対抗という観点の両方から理解できる。 呼ぶとしたら「オープンソース対抗」ソフトウェアかな。

それ以外にはどんなものがあるだろう?

深い理由はなかったとして、 それらをオープンソース化するように勧める良い手段は?

_ [OSS]オープンソースってなに?

たしかに、 オープンソースについて全然知らない人に説明する時に「だまってここを見よ」 というようなサイトがあれば便利ですよね。

私の知ってる中で一番良さそうなのは<URL:http://www.catch.jp/openoffice/open.htm>です。 ただ、私の感覚は人とはずれてるみたいなんですが。 たぶんこれなら大丈夫だと思うんだけど。

ほかにも良いサイトがあれば紹介してください。

_ [Ruby]Ruby 1.8.0 preview3

「オープンソース」などにかまけていたら、SeanがREXMLをコミットしてしまった。 REXMLがコミットされたらすぐにpreview3を出すと予告していたので、 作業が必要だ。

だいたい片づいているんだけど、Block/Procについては少々悩みが残っている。 あと、原稿の〆切が...。

_ [Ruby]BlockとProc

コードブロックをオブジェクト化したBlockと、 無名関数オブジェクトとしてのProcを分離しようというのが元々のアイディアなのだが、 使い勝手という点でやや難点がある。

要するに使い分けが難しいのだ。似過ぎていると言ってもよい。 Dave Thomasからもこの変更の導入直後に指摘を受けた。気持ちは分かる。

で、いくつか考えているのだが、結論は出ていない。が、私の考えの経過に興味を持つ人もいるだろうから、 ここの書き連ねておく。"Think out loud"だと思って読んでほしい。

BlockとProcの使い分けについて

当初の目的は上に述べた通り「コードブロックをオブジェクト化し たBlockと、無名関数オブジェクトとしてのProc」の分離である。 が、実際に使っていると混乱してきそうだ。

そこで生成の仕方を明確に分離することにした。 Block.newはブロックなしで指定すると現在のメソッドに与えられているブロック (yieldの対象)をオブジェクト化するが、 Procの方はブロックを与えなければ警告する(最終的にはエラー)。

これでProcはあくまでも関数オブジェクトでlambda, proc, Proc.newはブロックをくるんだ 関数オブジェクトを返すという意味づけができる。 最終的にはDave Thomasの提案に沿って「関数オブジェクトを作る構文」を導入してもよい。

あ、そうそう。この意味づけを強調するために近くBlockとProcの継承関係を外すつもりだ。 ところどころで見かける

p.kind_of?(Proc)

のようなコードは、今のうちに

p.respond_to?(:call)

に変更することをお勧めする。

互換性問題

Blockっていうのはかなり一般的な語彙なので、すでに使っている人がいるかもしれない。 というか、実際に問題が起こったケースもあるようだ。

Methodとの類推

無名の関数オブジェクトってメソッドオブジェクトたるMethodと似過ぎていると考えることもできる。 BlockとProcとMethodと、callで呼べる似たようなものが一杯あるのは望ましくないかも。 まあ、それぞれ生成方法が明確に異なっているから、Polymorphicに同じなら気にしないというのが Dynamic Typedな考え方なのかもしれないけど。

というわけで、最終解決案(の候補)

1.8.0では以下のいずれかになるのでは。

  1. BlockとProcは親子ではない。BlockとProcとMethodがある。生成方法が異なる
  2. Blockが残り、ProcはMethodとunifyされる。実装が大変。
  3. BlockはProcに戻る。無名関数オブジェクトはMethodにunify。実装が大変。

リリースのタイミングを考えると最初のものが一番ありそうだなあ。

_ [原稿]Linux Magazine

もうそろそろ8月号の〆切が迫っています。 今月のテーマは「エクストリーム・プログラミング」にしようかと思ってます。 もはや「初等」でも「入門」でもありませんな。

今後の内容については〆切を乗り切った後、更なる考察が必要そうです。

本日のツッコミ(全6件) [ツッコミを入れる]

_ naruse [> ソース公開しているけどOSD準拠でないソフトウェア 日曜スクリプターの作った、CGI/Perlなら大量に存在しま..]

_ naruse [と、書き込んでから気付きました。 まつもとさんは中間層に対する‘啓蒙’が大切だとお考えなのですよね? わたしはむしろ..]

_ まつもと [あいやー、「中間層」って言葉が誤解を生みましたか。 私のいう「中間層」はユーザの技術レベルとは関係なくて、「ビジネス..]

_ e-domeki [OpenSourceではないFree Softwareが存在するか、という点については、開発者が他人からの貢献をどう..]

_ Sado [http://freshmeat.net/browse/13/?topic_id=13 で、OSI Approved..]

_  [自分のコードをgrep Procしたら case p when Proc p.call ... when..]

[]

2004-06-10 時の記念日

_ [Ruby]CVS安全宣言

近いうちにwww.ruby-lang.orgで発表されるもの。フライング。

Ruby 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脆弱性も発見されており、より安全な運用体制を確立するため、anonymous CVSの再開はしばらく先になると思われます。あしからずご了承ください。

実はこれらの確認はとっくにできていたのだ。作文を怠慢してただけ。

_ [Ruby]「オレってばすげー」

メールオーガナイザーのパーツとしてsafecat(1)をRubyで実装してみた。 わずか20分で完了してしまった。 思わず「オレってばすげー」と思ってしまった。 これぞLLの醍醐味。

しかし、実際はすごいのは自分ではなくてツールだ。 Rubyだからこそこの速さで開発できたのだ。

が、そのRubyを開発したのは...。

...はいはい、分かりました。自慢したかったんでしょ。

_ [家族]玄関

妻が玄関を片付けていた。

玄関の靴入れの上は都合よくものが置ける場所なので、 FAXやらADSLモデムやら無線ルーターやらと、引っ越しのときに出たゴミのようなものが積み上がっていて この1月ほど異常に乱雑な様子であった。

が、とうとう片付けたのだ。機器は片隅に並べられ、残った場所には妻お手製のカントリードールが並べられた。 昨日までの散らかり具合を思うと見違えるようだ。

Rubyちゃん(北海道出身、仮名、赤毛+眼鏡)も久々に箱から出されて、 仲間たちと並ぶことになった。

_ []『Code Reading』増刷

アマゾンでは副題が間違っているという『コードリーディング−オープンソースから学ぶソフトウェア開発技法』ですが、なんと発売1週間で増刷が決まりました。もともとの刷りが少ないってことを考慮に入れてもたいしたものです。これもみなさまのおかげです。ありがとうございます。

訂正しておくべき間違いを見つけた方はお早めに私のほうへ。こっそりと(じゃなくてもいいけど)。

[]

2005-06-10

_ [OSS] VA Linux Business Forum 2005

というイベントへ参加することになった。詳細は分室へ。

スラッシュドットジャパンにストーリーが掲載もされている。

[]

2006-06-10

_ [Ruby] 巨大パッチ

YAPC::Asia以来1.9向けのパッチを溜め込んでいたのを一気に放出。 もちろんカンファレンス用の話題作りのためだ。

迷惑を被った人もいるだろうなあ。

_ [Ruby] 日本Rubyカンファレンス、発表、パネル

期待のRubyカンファレンスだ。

今回の出番は午前最後のキーノートと、Ruby2.0パネルのパネリストだ。

キーノートは「The State of The Dominion」。 単なる語呂合わせなんだけど、まあ、「予想外に広まったなあ」とかいうような話。 スライドはここに。

パネルは2.0について。私が話した重要そうなネタは

  • 2.0は燃料。走り続ける必要がある
  • でも、いつになるのかわからないので2007年クリスマスを目標に1.9.1を出す。
  • これを2.0と呼ぶかも

パネルのスライドはこちらに。

後はおおむねスピーカー控え室で画面を見ながらツッコミつつ。 ついでに今朝のパッチの不具合を修正したり。 パッチモンスターやうささんと顔を合わせて開発することは滅多にないので貴重な機会だ。

懇親会は最初の乾杯の挨拶(「では、乾杯の音頭を」「...乾杯。」)と、 ちょっとだけ食事を口にしただけですぐに出発。

東京テレポートまで結構距離があるのでどうなるかと思ったが、 りんかい線も、モノレールも、駅に到着した直後に電車が来てスムーズに移動できた。 楽勝で帰れた。しかし、米子からうちまでが遠い。

_ [原稿]日経Linux8月号

まだ書けてない。今月のテーマはソケットプログラミング。

以前のLinux Magazineの原稿を流用できるか、と思ったが、 世の中はそんなに甘くなく、ほとんど書き直さないといけないみたい。

ぐすん。

[]

2007-06-10

_ [教会] 松江

先週のリアル・ホームアローンからもう1週間もたつのか、 とか、あの空の向こうではRubyKaigi 2007の二日目を開催中なのね、 とか思いながら教会へ。

今日の日曜学校のテーマは「偽善」。 ただ単に「良い行い」だけでは不十分で、 行いには「良い動機」が伴わなければならない、という話。

もちろん、「良い行いがない」のが一番良くないのだが。 より高いものが求められる、ということ。 ちょっと反省すべきものを感じた。

教会から帰ってから昼寝。 でも、寝過ぎるとかえってしんどいなあ、なんて思っていたのだが、 うっかり2時間以上寝てしまって、案の定つらかった。

生活リズムを維持するって難しい。

[]

«前の日(06-09) 最新 次の日(06-11)» 追記

track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.