以前開発してたプログラムを同業他社がコピペして使っていたのをたまたま発見し、頭に来て弁護士さんに相談したときのお話しです。
あたしってほんとバカ
ある日、いつものようにお昼ごはんを食べながらニュースサイトを眺めていると、新しく競合他社がサービスを開始したというので早速チェック。ふむふむ。中々よく出来てるなぁと感心しながら触っていたのですが、不思議なことに使えば使うほどデジャブに襲われたんですよ。どっかで見たことあるな、これ…と。
「……まさかな」と思いながらおもむろにブラウザの「ソースを表示」した瞬間我が目を疑いました。フレームワークも、もちろんそれを使ったコードもほぼそのまま。ご丁寧に変数名までバッチシ同じ。十中八九コピペされてると核心しました。思わずセブンのおでん吹くかと思いましたよ。危ない危ない。
悔しいじゃないですか。
表に見えるコードはJavaScript(以降JS)なので数十行~数百行程度の物です。
ただ、実際にはUI考えて、フレームワークの選定して、設計して、テストして、チューニングを繰り返して、という表には出ることのない苦労の末、文字通り寝る間を惜しんで世に出したコードなわけです。
このコードを書いた時の自分は、少なくとも日本には著作権という物もあるし、倫理的に競合サイトのコードをコピペして平気な顔する厚顔無恥な連中がはびこるほど、この国の民度は低くないだろうと高をくくっていたのですが、もうね、何て甘い考えだったんだろうと正直泣きそうになりました。今風に言うなら「あたしってほんとバカ」ですよ、ええもう。
それと同時に、こいつは悪だ、悪魔に違いない。
絶対に成敗してくれる、絶対にだ! と心に誓い、弁護士事務所の門を叩いたというわけです。
「これでは相手を訴えることができません」
お相手をしていただいた弁護士さんは若手なのですが、非常にやる気にあふれた方で、このためにJavaScriptの入門書を買って勉強したと聞いた時は正直ビビリました。大した金額もお支払いできないというのに、何かすんません(^^;で、状況を説明し少なくとも相手に止めさせることはできますか?というお話をしたところ、次のような結論をいただきました。
- プログラムを盗用されている可能性が高いということは分かった
- しかし変数名などが同じ、というだけでは(盗用であっても)勝つことは難しい
マジすか…(;´Д`)
え、どうすればいいの?泣き寝入りするの?
「著作物であることを証明しましょう」
こちらの様子を察したのか、弁護士さんがおもむろに立ち上がり、プリントアウトした資料を持ってこられました。弁護士 「これは過去にあった裁判の判例なんですが、同じようにプログラムを盗用されたというものなんです。この裁判では原告(盗用された側)が勝訴してるんですよ」
かつべ 「え、どうやったんですか?」
弁護士 「プログラムがどうこうという話ももちろんあったんですが、ポイントは"工夫"したところを列挙したんです」
かつべ 「工夫、ですか」
弁護士 「ええ、細かいところなんですが、例えば数字が見やすいように独特のフォーマットにして表示したとかですね、ここのところです」
なるほどなるほど。
明らかに他のシステムにはない、または第三者が見ても工夫していると分かる「表現」がそのまま別のシステムにあれば著作権侵害であると主張できると。逆説的に言うと、例えば変数名が同じであってもそれが「表現」かどうか判断が難しく、それが認められることは非常に難しいようです。
自分のことが一番わからない?
光が見えたと思ったのですが新たな壁が登場します。何を持って工夫したポイントと言うのか、その選定作業に予想以上に手間取りました。
具体的な作業としては、JSを勉強されているという弁護士さんと一緒に、各プログラムのステップを1つずつ私が解説しながらどこで勝負をかけるかお話を繰り返すという物。同じエンジニアに対して説明することはあってもほぼ一般の方にコードを説明するという場は中々ありません。お互いに意思の疎通を測るのに相当苦労しました。
しかしそれ以上に誰が見ても工夫したといえるポイントを探しだすのは、さらなる労力が必要でした。
さて、ここでひとつ疑問が沸くかもしれません。
「自分で作ったシステムならば、どこが工夫したポイントかすぐに分かるんじゃない?」
プログラムにおける表現抽出の難しさ
では実際のシステムのロジックの一部をを見てみましょう。実際には色々絡み合ってるのでもっと複雑なんですが、端的に言うと次のようなものです
- 画面上に四角形A、四角形Bがある。
- 四角形Aの「大きさ」「位置」は固定
- 四角形Bの「大きさ」はユーザの入力により変化する
- 四角形Bは「位置」はマウスで自由にドラッグが可能
- 決定ボタンが押下された際、次のチェックを行う
- 四角形Aの中に四角形Bが内包されてているか
四角形AがBを内包しているかチェックするロジックを考えてみます。
最もシンプルで誰もが思いつくのは、
- 四角形Aの各頂点を Aa, Ab, Ac, Ad とする。
(左上から反時計回り)
- 四角形Bの各頂点を Ba, Bb, Bc, Bd とする。
(左上から反時計回り)
- 四角形Aの Aa の x座標は Aa.x, y座標はAa.y として取出すことができる。Bも同様。
とした場合、次のような処理になるでしょう。
if( Aa.x <= Ba.x && Aa.y <= Ba.y
&& Ab.x <= Bb.x && Ab.y >= Bb.y
&& Ac.x >= Bc.x && Ac.y >= Bc.y
&& Ad.x >= Bd.x && Ad.y <= Bd.y ){
// true
}
else{
// false
}
泥臭いですねw
あとは関数(メソッド)化するなり色々書き方はありますが、数学的なアプローチをかけない場合、突き詰めれば上記のようなロジックになるかと思います。
で、これだと著作物として主張できない。
厳密にいうと主張はできるが、それって誰もが思いつきますよね?仮にゼロから書いていたとしてもみんなここにたどり着きますよね?という質問に反論できなければならない。
おいおい、それってどこだよ…。
一度世に出した物はパクられる覚悟を
その後悪戦苦闘の末に何とか書面にまとめ、相手方に弁護士名義で内容証明を送付。示談へと話は進行するのですが、その頃にはすでに相手システムがリニューアルされているという事態になったりとまたややこしい感じになるのですが、これ以降はデリケートな部分も含みますので、お話はここまでとしておきます。
勉強になったのは、著作権で守られているのは「表現」の部分だということですね。
例えば「料理のレシピ」は著作権の保護になりにくいとされているそうです。なぜならレシピは表現ではなく、実現するための手段というか方法であって「表現」ではないからという論理のようです。感情的にはそんなバカなって思いもありますが、逆に権利で縛ってしまうと例えばカツ丼を食べるためには毎回遠く離れた特定地域に行かなければならないといった問題も発生するんだと思います。
これはプログラムも同様ですね。
誰かが int main(){} を著作物しとして主張したら、C言語使えなくなっちゃいます。難しいですね。
さて、話はつきませんが最後にこの出来事から得られた教訓をまとめて終わりにしたいと思います。
1. 一度世に出した物はパクられる覚悟を
仮にコピペされなかったとしても、お金と時間があればサービスを複製することはいくらでもできます。パクられることを防止する、もしくは報復することにこだわって貴重な自社のリソースを消費するくらいなら、別のことで勝つ方法を考えた方が有意義と言えるかもしれません。その瞬間はハラワタが煮えくり返っても、結果的にサービスで勝てばいいのです。2. オープンソースとして公開する
どうせパクられるなら、自社のフレームワークやソフトウェアを公開してはどうでしょう?もし本当に価値のある物であれば、それが縁で優秀なエンジニアを獲得できるかもしれません。エンジニアがいれば、いくらでも素晴らしいサービスの開発に着手できます。実際、DeNAやGREEもサーバサイドのフレームワークを公開していますし、最近はTwitter社製のCSSのフレームワークが大人気です3. コアな部分はサーバに持たせる
当たり前ではありますが、本当に公開しなくない物の場合はサーバサイドに置きましょう。オープンに出来るもの、出来ないものの仕分けは本当に重要です。DeNAもサーバサイドのフレームワークを公開してはいますが、例えばゲームロジックなどはもちろん公開していません。なぜならここがサービス(ビジネス)の根幹とも言える部分だからです。以上です。
一番大切なのは開発者が、お互いがお互いに敬意を持ちあうことだと思いますが!
リンク
「JASRACが他人のJavaScriptを無断流用か!著作者のソースと酷似」http://www.yukawanet.com/archives/4219844.html?1339778157
この記事を見たのがこのエントリーを書いたきっかけでしたw
「ゲームのセーブデータは誰の著作物?」
http://nekoblog.katsubemakito.net/2010/07/blog-post_10.html
デジタル時代の著作権 (ちくま新書) | |
野口 祐子 Amazonで詳しく見る |
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。