長かったこれまでと、分からないけど楽しみなこれから

今回は振り返り無駄話です。

もう遡ること13年以上前、初めてmonoにパッチを送った時のことを、今でも覚えています。実のところ、monoのML(当時はmono-listしかありませんでした)には当時のアーカイブがあるので、今でも見ることが出来るんですね。 http://lists.ximian.com/pipermail/mono-list/2002-October/008988.html

.NETは、2002年当時のわたしにとっては、オープンソース開発の世界における脅威でした。

.NET Frameworkを知ったのは、仕事でWindowsアプリケーション開発に初めて関わってほどなくのことでした。当時はJavaのコードを書き始めて半年くらいだったと思います。C++VBじゃない、Java並に簡単な言語でGUIアプリまで作れてしまう、その大きな可能性に魅了されましたが、同時にこれがWindowsでしか動作しない、プロプラエタリな開発環境であることは、わたしの目には大きな脅威として映りました。

わたしが職業エンジニアになったのは、ついうっかりのようなものです。当時のわたしは、大学で知財法制に無駄に詳しくなった後、その非論理的な制度設計に嫌気が差して*1、自由なソフトウェア(まあ正確にはオープンソースですが)の世界に魅入られており、この.NET Frameworkのような開発環境がオープンソースで存在すればいいのに、と思っていたのでした。.NETはECMAで標準化を図っていましたが、それはもう完全にJavaの標準化プロセスに対抗しているように見えました。だいたい技術標準だというのなら、実装が2つあるべきじゃないか。他に実装もないのに、何が標準化だ、と。

…そして、monoを「発見」したのです。

当時、monoは始まってから既に1年弱が経過していたと思います。その時点で、既にmcsでコンパイルしたコンソール アプリケーションをmonoランタイムで実行できるようになっていました。mcsはC#で書かれていて、セルフホストしておらず(mcsでmcsをビルドできるほど完成しておらず)、Windows上でcscを使ってビルドしなければなりませんでした。

そんな状態のmonoでしたが、さまざまなドキュメントが既に存在していたので、とりあえずそれらを日本語訳するところから始めました。MLにも登録して、眺めるようになりました。MLを眺めているうちに、Miguel de IcazaがXML DOMのAPIが足りないから実装してくれ〜、みたいなメッセージを投げたのを見て、えっ、そんなのも無いの?…と思って、ソースに手を入れはじめたのが、最初の一歩でした。(ちなみに書いたコードはいい加減で、間違って彼だけに送ってしまったら「すばらしい! ちなみにテストを書いてくれ!」みたいな返事が来て、初めてテストなるものを書いてみたら、全く期待通りに動かなかったのでした…)

当時、monoチームには日本語を話せるDuncanというハカーがいて(というか今でもXamarinにいるのですが)、彼といろいろ日本語で会話しながら、いつの間にかmonoの開発チャットに出入りして、カタコトの英語でやりとりできるようになったのでした。誰が誰だかは当初全然わかりませんでしたが、あのmonoを毎日作っている連中です。すげー!と思いながら、同時にとても追いつけない量の会話を流し見しながら、参加していたものでした。

1年ほど経って、わたしが転職を考えていた時、その話をそのDuncanにしたら「じゃあうちで働きなよ!」みたいなことになって、翌日Miguelから「何ドルで働く?」(うはhドルかよ!) 「Novellに統合されたら人を雇えるから来いよ」みたいな話が来て…それでmonoチームに入ることになったのでした。

そんなわけで、会社に入ったのはNovellになってからなのですが、Ximianは近くでずっと見ていましたし、完全にNovellとは別の指針で動いているXimianの一員として仕事していました。MiguelとNatの2人が始めたベンチャー企業が、Novellという大企業に買収されて、それでも(エンジニアの目に見える範囲では)あまり変わらない体制でGNOMEとMonoを開発していくのを、9年近く見てきました。

MonoとNovellの話は(今日は)どうでもいいのでした。今日は.NETの話を書きたい。

.NET Frameworkが猛威を振るっていた(ようにわたしに見えていた)のは、Microsoftが.NET 2.0をリリースして、並行して次世代.NETでWinFXと呼ばれる「全てがマネージド」の世界を構築しようとしていた頃でした。大量のマネージドコードのプロプラエタリなフレームワークが、うっすらとしたECMA CLIの上に悪夢のように覆いかぶさって、せっかくASP.NETが動くようになったLinuxが、また.NET開発の一線から遠ざかってしまう。何とかして対抗しなければならない。そう思いながらMonoの機能を拡張していたのでした。(まあそれはわたしの話であって、他のメンバーには当然ながら各々の思想があります。)

結果的にWinFXはだいぶ縮小した存在になり、WPFもWFもしばらくは大規模に使われず、WCFは出来るとみて着手することになったので、そういった懸念は概ね杞憂に終わったのでした。

その頃から、Microsoftの開発の潮流に変化が見え始めます。(WinFXの反省だったのかな、とわたしは勘ぐるのですが、)新しい.NET 3.5の開発からは宣伝的な文句は消え、Linqなど質実剛健な機能拡張が行われるようになりました。オープンな技術標準を目指したIdentity Metasystemのコンセプトとともに、Infocardが登場しました。ASP.NETの中核となるMVCオープンソースで公開され、ほどなくいくつかのコンポーネントオープンソースで公開されるようになっていったのでした。その後も、IronLanguages、Reactive Extensions、Roslyn、そして.NET Coreと、NET Framework (referencesource)、VSCodeと、オープンソース指向で開発していくMicrosoftの姿勢は、もはや揺るがないものになりました。

このオープンカルチャーの契機となったASP.NET MVCをリードしていたのが、今回の買収の結果、Xamarinチームを配下におさめることになった、Scott Guthrieです(今はAzureチームのトップですね)。彼はMiguel、Natの2人とは長く交友関係にあって、XimianのMonoチームがNovellレイオフされた時も、いろいろ出来る範囲で手助けしようとしてくれたそうです。今回の統合は、ごく自然に成り立ったと言えるでしょう。"married" と表現している人も少なからずいました。

今回の買収は、MiguelとNatの2人にとっては、2度目の大成功ということになります。Xamarinの立ち上げは容易なものではありませんでしたが(その辺はXamarinの2年半を振り返るを見てもらえればと思います)、今回このゴールのひとつに到達できて、わたしは、期待されていた、あるべき結末を見た思いになりました。

MiguelがECMA標準をもとにMonoを始めてから約15年。MonoはXamarin製品の中核であり、まだまだ使われていきますが、大きな節目を迎えたとは言えるでしょう。Nadellaの新生Microsoftの傘下に加わったXamarinが、これからMicrosoftと一緒に、Monoが築いてきたエコシステムをどう発展させていくのか。おそらくは中の人として、今後も見続けていきたいと思います。

*1:その辺は http://d.hatena.ne.jp/atsushieno/20070813/p1 にあります