オープンソース開発に関する世界観です。
オープンソースの開発手法について述べられた文書と言えば、エリック・レイモンドによる「伽藍とバザール」が有名です。
ここでは、GNUによるHurdの開発のような、少人数のコアチームだけが慎重に開発していく開発プロジェクト管理の方法を「伽藍」(キリスト教でいう教会のようなもの)と呼び、Linuxカーネルのような「乱交まがいにどんどんみんなからの成果をとり入れ、全ての情報を全員に公開し、しょっちゅうリリースする」という「Linuxにおける革新的な方法」を「バザール」と呼びます。
また、エリック・レイモンド自身も、Fetchmailという自分のプロジェクトにバザール開発モデルをとり入れて、大成功を収めました。
エリック・レイモンドの文書では、「ハッカーになろう」が面白い。
この伽藍とバザールをきっかけに、ブラウザ戦争で敗北したNetscapeが、自社のNetscapeブラウザの存続のためにブラウザをオープンソースにした「Mozilla.org」が生まれました。しかし、ここでは、Mozilla.orgを率いていたNetscapeのエンジニアだったジェイミー・ザウィンスキーが、Mozilla.orgプロジェクトの停滞から、「辞職および追悼」という文章で「オープンソースは魔法のお鍋ではない」と記述したことも有名です。
オープンソースとは直接関係ないかもしれないが、Lispハッカーのポール・グレアムの文章はとてもプログラマにとって面白いため、参照してほしい。
オープンソースプロジェクトを始めるにあたって、企業とコミュニティがどのように連携するか、という点が重要になってきます。
まず、単なる個人プロジェクトなら、オープンソースにしても問題が起きることは少ないでしょう。ライセンスがGPLであれBSDであれ、Anthyのような「完全にコミュニティのソフトウェア」であれば、それはWindowsでおけるフリーソフトの開発と同様にひとりで全て開発することもできますし、パッチなどを提供されれば取り入れることもでき、OpenJaneのように協力して開発する時も、それぞれの個人が「完全に自由に関わり合う」中で「自発的に共有」すれば、それで簡単にコミュニティ開発ができます。
ですが、企業の中でコミュニティ開発を取り入れることは、それと比べて少し難しいでしょう。どこからどこまでを社員が開発し、コミュニティとどのように関わり合うのか、それをきちんとすることは難しく、上に書いたMozilla.orgのように、「ほとんどNetscapeの社員だけが開発していた」という状況になりかねません。
ここで参考になるのは、はてなのような「草の根ベンチャー企業」です。はてなはブログやブックマークなどのWebサービスを開発する会社ですが、そのサービスの機能ややっていることについて、公式のブログなどで提案や意見を取り入れています。以前は、「はてなアイデア」のようなアイデア共有サービスや、「はてなLab」のような研究中のサービスをベータ公開するサービスもやっていました。
Red HatやGoogleのように「どんどんオープンソースコミュニティをリードしていく会社」になることは難しいかもしれません。ですが、ユーザーからの改善や意見を取り入れていく、という意味では、オープンな開発も今からのネット社会で有益な立場を保っていくでしょう。何もオープンソースに限ったことではないと思います。
オープンソースも参照のこと。
Googleを参照のこと。
僕は、オープンソースの意味とは、「自分の分からないことでも、他人が見て分かることがある」ということではないかと思う。
たとえば、自分の欲しくなかった機能や、自分が見つけられなかったバグも、他の人が機能を付けたり、バグを直したり、ということができる。
だが、先に書いたように、誰かひとりのわがままが、全員の努力よりも不公平に優遇されたり、不当に支配されたり、あるいは秘密として隠されたりすることがあってはならない。
会社による開発ではなく、オープンソースによる開発は、インターネットを使うという性質上、さまざまな人が関わり合う。だから、秘密を無くして透明性を保ち、より公平にしなければならない。
オープンソースは、まさに「共有という名の奇跡」です。人々が自発的に取り組み、助け合い、協力し、そこで成果を「共有」すること、それそのものが楽しく、また技術的にも一流のOSになりました。
OSはさまざまなプログラムによって共有されるプログラムであり、それ自体がたくさんのコラボレーションの中で共有されることと親和性が高いのです。これはWorld Wide Webにも言えることです。
Sunが「ネットワークこそがコンピュータである」と言いましたが、僕は「共有こそがコンピュータである」と言いたいです。コンピュータは資本主義の会社によって閉じられたものではなく、広く一般に公開され、共有されるべきなのです。MicrosoftやIBMは賢い会社ですが、そうした共有の文化には適応できなかったのです。
こうした「共有こそがコンピュータである」といった考え方は、アメリカの会社よりも日本の会社の方が良く適応できていると僕は思います。たとえば、はてなは質問サイトやブックマークなど、早くから「人力による共有」を目指してきました。アメリカが、ロボットやAIなど全ての人間の力を自動化しようとしているのとは対照的に、日本の会社はみんなが一堂に会する「ネットの共有プレース」に目をつけ、たくさんの「手動の人力の共有」を行うことで、サービスを作り出しました。こうした発想は、アメリカの会社にはないものです。FacebookすらAIをやっていますが、僕は「AIによる自動収集」に打ち勝つのは、「ネットワークというたくさんの人々が繋がった上での、それぞれの成果の共有」だと思います。オープンソースは、そもそもが、そうした会社による高度な自動化技術とは対照的で根本から異なるものなのです。
そう、コンピュータとは人工知能のように、人間の頭脳を再現し、人間による成果を省力化する技術でもありますが、ネットワークは人間と人間を繋げるものであり、それぞれの些細なことであっても、共有することで爆発的なエフェクトを作り出すのです。人間がAIに負けるのか、それとも人間の共有の力をネットワークが引き出すのか、人類と人間の新しいバトルがここに始まるでしょう。
後日注記:ある意味、最近のIT業界は「人間に代わるもの」を目指そうとしているが、僕は「人間を活かすもの(あるいは場所)」を作らなければならないと思う。人間が共有スペースを手にいれることで、さまざまなことが可能になり、可能性が高まり、発想が豊かになる、ITサービスはそういうものでなければならない。
オープンソースの開発には、英語力が必須です。
オープンソースにも、日本国内のオープンソースと国際的な海外の人間の集まるオープンソースがありますが、Rubyなど一部の例を除けば、ほとんどが海外の人々と一緒に開発します。
この中で、Eメールを使った英語のやり取りは、プログラミングのスキル以上に必須のスキルとなります。
たとえば、以下のkernelnewbies.orgの記事でも、「カーネル開発者の仕事のほとんどはEメールである」といったことが記述されています。
なので、アメリカで英語の学習者がサバイバルをするのと同様、「日本語でコミュニケーションはできない」と最初から思ったほうがいいでしょう。
むしろ、日本語を使ってもいい状況に「逃げ出す」のではなく、積極的に英語でコミュニケーションをするようにしましょう。「逃げ場所を作らない」ことは、語学学習者にとっての常套手段です。積極的に英語でEメールを書き、英語のEメールを読むようにしましょう。ソースコードの中のコメントも英語で書くようにしましょう。日本語で書かれた情報は、すべてOSS開発者からは拒否されるものであると考えましょう。
英会話も参照のこと。
僕は、オープンソースな2ちゃんねる専用ブラウザのOpenJaneの派生版を開発したことがあります。
実際のところ、それはいろいろと難しいことがたくさんありました。
設定項目をひとつ増やすのであっても、既存のコードをコピーして作るだけでは上手くいかないことが多く、大変でした。
また、当時の僕はプログラミング初心者であり、メモ欄を動的に作成する(すなわち5個や6個といった決められた数ではなく、何個にでも自由に増やすようにすることができるようにする)ことができませんでした。
メモ欄からのスレッドへの投稿機能についても、既にあるコードを参考にしながら作ることに苦労したような記憶があります。
逆に、Delphiのダイアログボックスを開いたり、メモ欄の表示・非表示を切り替えたりするのは、Delphiの標準の機能で簡単に作れました。
そのような経験から言えることは、「自分でゼロから作るのと、既にあるオープンソースプロジェクトに参加するのは、まったく異なるスキルが必要」ということです。
自分がゼロから作るならば、小さなプロトタイプを作ってそれを改良すれば良いのですが、既にあるオープンソースプロジェクトに参加する場合、巨大な既存のコードをまず理解し、そこに自分の付け足したい機能を追加する方法を考えなければいけません。
それははっきり言って、まったく異なるスキルが必要となります。
僕もOpenJaneの派生版の開発で、「メモ欄からの投稿機能」を作りたかったのですが、それは自分でゼロから2ちゃんねる専用ブラウザを作るのとはまったく違ったスキルが必要でした。
なので、オープンソースプロジェクトに参加するということは、プログラミングがたとえできる人間だったとしても、簡単ではないと言っておきましょう。
2ちゃんねる専用ブラウザも参照のこと。
2023.06.06
実際のところ、プログラミングを学ぶ上で、なんでも自分ひとりで開発するのは無理があります。
たとえば、Mozilla FirefoxのようなWebブラウザを開発したくても、自分ひとりで開発するのには到底無理があります。
ですが、そのような時に、その開発を諦める必要はありません。
なぜなら、オープンソースプロジェクトに参加すればいいからです。
Mozilla Firefoxを作りたいなら、その通りMozilla.orgに参加して、C++やJavaScriptで開発すればいいのです。
必要なのは、「大規模な他人の書いたコードを理解できるプログラミング言語の読解力」と、「英語でコミュニケーションする力」です。
この二つがあれば、Linuxカーネルだろうが、Mozilla Firefoxだろうが、どんなプロジェクトであっても参加して開発できます。
日本人は、自分ひとりで開発できない大規模なプロジェクトを開発することを諦めることが多いと思いますが、国際的な規模で見ると、そのような人は既存のオープンソースプロジェクトに参加すればよいのです。
外国人には、英語を理解できる人が多いため、オープンソースプロジェクトに参加するという選択肢は、外国人ならばとても普通の選択肢だと思います。日本人は英語が苦手という弱点はありますが、技術力だけで言えばむしろ中国やインドに負けないぐらいのIT技術力があると思います。だから、この選択肢は決して不可能ではありません。
2023.09.07
エリック・レイモンドによる、オープンソースの開発モデルの説明。