Humanity

Edit the world by your favorite way

FreemarkerのVimシンタックスプラグインを直してMLにメール送ったりした時の話

JavaにはFreeMarkerというテンプレートライブラリがあります。とか言わなくてもJavaやってる人ならだいたい知ってるほど有名です。たぶん。
FreeMarkerにはftl.vimというvimシンタックスファイルがFreeMarkerの公式ページに用意されていたのですが、
どうもこのftl.vim、ハイライトが貧弱です。
というのも、FreeMarkerはその用途からHTMLなどに使われることが多いのですが、
HTMLに埋め込んだ場合でもFreeMarkerのハイライトしかしてくれません。
自分はHTMLをハイライトするためにパッチを作りました。


作ったパッチをfreemarker-develにパッチを送ったのですが、
「自分の修正を加えたバージョンのftl.vimgithubなどに公開したいんだけどライセンスはどうなってるの?」と訊いたところ
ftl.vimは...誰かから送られてきたんだ。詳しくは知らない」と言われどうもライセンスを考慮していない気がしたので、
直接ftl.vimに書いてある作者のメールアドレスに問い合わせることに。
結果、作者はやはりライセンスを考慮してなかったのですがすんなりと受け入れてくれ、MITライセンスでgithubに公開してくれました。
その後自分がgithub上でforkしてpull requestを送り、自分の変更がgithub上の作者のリポジトリに無事取り込まれました。
今度はそのライセンスが明記されたバージョンのftl.vimfreemarker-develに再度送り、
FreeMarkerの公式ページにアップロードしてくれました。
http://freemarker.sourceforge.net/download/editor/ftl.vim
FreeMarker Java Template Engine - Editor/IDE plugins
どちらの方も迅速に対応してくれたのは、やはりライセンスの重要性を理解しているからでしょう。


実はこの後、HTMLのハイライト機能は削除されました。というか自分がしました。
理由はftl.vimに機能追加しなくても「:setfiletype html.ftl」で十分だったこと。
次にFreeMarkerは何もHTMLだけに使われるわけじゃないので、
勝手にHTMLだと断定してハイライトやってくれちゃうと非常にうざいからです。
しかしライセンスが記載されただけでも十分前進したと思っているので残念だとは思いません。*1
freemarker-develに関われたことで自分からは:setfiletype html.ftlというノウハウを共有できたし、
次回FreeMarkerにコミットするということになった時もすんなり受け取ってくれるでしょう。
まぁオープンソース方面の人はそんなに閉鎖的じゃないのであんまりそういうことは考える必要はないかもしれませんが。
またハイライト機能を削除した時も、Danielさん(FreeMarkerのコミッタ)は例によって迅速に対応してくれました。



今回全ての事がすんなりと運んだので気持よかったです。
ライセンスについてはid:thincaさんに以前「ライセンスが不明なソースコードとか危なくていじれないです」
と言われ、本なんかで勉強したりしたのですが、
「ライセンスがないソースコードオープンソースではない」
これは本当に重要な事実だと思います。
自分も以前は考慮していなかったのですが、ライセンスがないと所有者であるソースコードの作者がソースコードを如何様にもできてしまうので*2フリーであると主張するためにもライセンスの明示は必須です。
自分もgistなんかに書いたコードはライセンスを明示していないし、
自分が書いて送ったパッチもライセンスを明示していません。
パッチについてはそのソフトウェアに暗黙的に寄付する形、
この部分は基本的に善意で成り立っている部分であり
後々ライセンスについて揉める可能性が考えられる場合(例えば企業が作ったパッチを取り込む場合など)
ライセンスを確認しておく必要があります。
Rubyについては以前Appleがパッチを送ったもののライセンスの確認ができなかったので
パッチを見ていない別の人が再度パッチを作成したという例があります。
Ruby 1.9.2リリースとWEBrick脆弱性問題の顛末 - 西尾泰和のはてなダイアリー


ライセンスも基本はソースコード(創造物)の創造的活動を奨励するものなので、
オープンソースに携わる人間として気持ち良い関係を築くためにも、ライセンスの配慮は忘れてはいけないと思ったのでした。

*1:あと細かい所も直した。b:current_syntaxが定義されてなかったりしたので...

*2:ここらへんまだちょっと曖昧ですが、おそらくこの理解で合ってる?