IT・システム判例メモ

弁護士 伊藤雅浩が,システム開発,ソフトウェア,ネットなどのIT紛争に関する裁判例を紹介します。

逆アセンブルして得たアセンブラレベルでの類似性から著作権侵害を認めた例 神戸地判平9.8.20(平6ワ712号)

アセンブルに基づいてプログラミングしたプログラムに関する著作権侵害が争われた事例。

事案の概要

Xが開発した「将棋聖天II」というソフト(Xソフト)を,平成6年2月にZが販売開始したところ,「極」というソフト(Yソフト)を開発したYが,平成6年3月にZに対し,Xソフトの販売禁止を求める仮処分申請をした。


その理由は,Xソフトは,Yソフトのマシン後部分のうち,重要なルーチンである「MOVEP」等を違法に複製したものであり,著作権侵害だというものだった。


これに対し,Yは,Xによる仮処分申請は,著作権を侵害していないにもかかわらず,Xの販売を妨害するものであるとして,1060万円の損害賠償を求めたのが本件である。

ここで取り上げる争点

Xソフトは,Yソフトのプログラムの重要な部分と同一ないし類似するか(著作権侵害か)

裁判所の判断

問題となったMOVEPについて,次のように検討している。

「MOVEP」は、先読みの探索のため、指し手構造体(Play−t)に格納された利きなどの情報を基に、指し手を実行する思考ルーチンであるが、単に駒を動かしているだけでなく、呼び出されるルーチンによってXソフト特有の将棋データの更新や指し手の評価を行うルーチンである。このような機能のルーチンは、探索による思考を行うプログラムには必ず備わっているものではある。そして、その思考プログラムは、コンピュータに合った戦法や定跡を使うことや、最も強いソフトの思考プログラムを参考にしてプログラムされるのが通常であることから、各将棋プログラム間で一部類似点が生ずることがあることは否めないが、駒、盤、指し手構造体など、プログラマーの個性や経験の違いが如実に反映される、各将棋プログラムに特有のデータ構造にアクセスするので、各将棋プログラムごとに異なるのが普通であり、その表現(指令の組み合わせ)がほとんど一致するということは通常はありえない。

としつつ,簡単に創作性は認められない事情として次のように述べる。

もともとプログラムには、その他の著作物と異なり、技術的性格が強く、表現記号も限定されるものであることから、コンピュータを機能させてより効果的に一の結果を得ることを企図すれば、表現(指令の組み合わせ)が必然的に類似することを免れない部分が少なくないという特徴があるが、特に将棋のような完全情報ゲームのプログラムの場合にはそれが強いといえるから、その創作性の有無の判断についてはこの点に留意する必要がある。


そして,創作性については,次のように述べて認めた。

これを本件についてみると、前記(一)認定の事実によれば、Yソフトのプログラムである「MOVEP」は、他のルーチンとの構造的関連のもとに、特有の構造にまとめられたデータを操作し、指し手を先読みして実行するルーチンであり、その表現方法は必ずしも将棋プログラムに必然的なものではないと認められるから、前記将棋プログラムの特徴を考慮しても、創作性を有するものと認められる。


続いて類似性の判断に移る。

「MOVEP」のソースプログラムと、Xソフトの同じ機能を有する「com−itte」のソースプログラムとを比較すると、前記認定のとおり別表1のとおりとなり、両者はほとんど同一であり、わずかに異なる部分も、通常の実力をもったプログラマーであれば容易に想到し、改変できる程度のもので、単なるオプティマイズしたに過ぎないものである。

Xソフトの制作担当者は、将棋ソフトではYソフトが一番強いという評判であったことから、Yソフトを逆アセンブルしてそのソースプログラムに接し、これを解析してXソフトを制作した。


として類似性を認めている。よって,著作権侵害が認められるから,Xによる請求は棄却された。


判決の別紙からはわかりにくいが,対比表の一部を抜粋する(とても分かりにくいが,左からXのコード,Yのコード,その説明の順に並んでいる。1行目でいえば,PUSH BPまでがXのコードで,続くPUSH BPがYのコードである。)。アセンブラのレベルではほぼ同一であることがわかる。

1.PUSH BP PUSH BP スタックにレジスタBPを待避(このステップは同一である)
2.MOV BP,SP MOV BP,SP レジスタBPにレジスタSPを代入(このステップは同一である)
3.SUB SP,+24 SUB SP,+24 レジスタSPから24H引く(このステップは同一である)これによって、ローカル変数(一時的な変数)が12Hワード(36バイト)使用可能になるテータ構造体koma_tの構造をした*lbuf1[9],*1buf2[9]のローカル変数を確保している普通ポインターは1つに1ワード使うので、9個のポインターで9変数×2セット×2バイト=36バイトとなります
4.PUSH DI PUSH DI スタックにレジスタDIを待避(このステップは同一である)
5.PUSH SI PUSH SI スタックにレジスタSIを待避(このステップは同一である)
6.LES SI,[BP+06] LES SI,[BP+06] レジスタSIに与えられたパラメータ(play_p p)の先頭をセットする(このステップは同一である)これによりレジスタSI=play_p p(以下変数p)になります
7.MOV AX,[B8A8] MOV AX,[8058] レジスタAXに先手の最大予想駒損置のアドレス8058Hの内容を読み込む(聖天?のアドレスが違うのはプログラムの置かれる位置によって変化するためであり、このステップの意味は同一である)
8.MOV ES:[SI+13],AX MOV ES:[SI+13],AX 変数pに含まれる変数maxavalの先手用アドレス[SI+13]の位置にレジスタAX(後手の最大予想駒損値)の内容を書き込む(このステップは同一である)
9.MOV AX,[B8AA] MOV AX,[805A] レジスタAXに後手の最大予想駒損置のアドレス805AHの内容を読み込む(聖天?のアドレスが違うのはプログラムの置かれる位置によって変化するためであり、このステップの意味は同一である)
10.MOV ES:[SI+15],AX MOV ES:[SI+15],AX 変数pに含まれる変数maxavalの後手用アドレス[SI+15]の位置にレジスタAX(後手の最大予想駒損値)の内容を書き込む(このステップは同一である)

若干のコメント

プログラムの著作物性,類似性が争われた事件は少なくありませんが,ソースコードの対比がなされるケース,判決文別紙に公開されるケースはそれほど多くないため,やや古い裁判例ですが参考になります。


本件での対比はアセンブラで行われていますが,オリジナルのYのソフトはアセンブラで書かれたものではなく,Cで書かれたものなのですが,Xが,Yソフトを入手してマシン語から逆アセンブルリバースエンジニアリング)したものだと認定しています。そういう意味では,対比しているもの自体は,Yが直接コーディングしたものではないと思いますが,アセンブラがオリジナルのソースコードの複製物だということを前提にしています。