OpenOcean が GPL 違反?

かなり以前に OpenOcean という OpenDolphin 2.7 系完全互換のアプリを配布・公開していたことがあった。
その際に小林慎治という人が(ちなみに面識はいっさいない)「OpenOcean は GPL 違反」ということを主張していた。
所属組織から注意を受けてその主張を引っ込めたと思っていたのだが、一時的なものだったらしく、いまだに主張しているらしい。

えーと、手短にいうと、当時の著作権管理をしていた LSC から、許可もらってやってますのであり得ないですね。
あり得ないというか、第三者がそこら辺の事情を知りようがないと思うんですが?

商用開発元は、遅くとも 2018 年以降は GPL 云々の適用をやめていて、MIA・SOSO などにも同様のアナウンスしています。
両者ともソースコードの公開とかフォーク元の著作権表記とか厳密に守ってないでしょ。

例えば、SOSO さんの GlassDolphin だが、ログイン画面はこのようになっている。

一見してわかる通り、著作権表示の類はなし。製品案内サイトを介して GitHub ページに飛べるようにはなっているが、挙げられているソースコードはここ数年全く更新されていない 2.6 と 2.7 だけ。GlassDolphin 最新 Ver4.0 のコードはどこにも見当たらない。ちなみに、他の方法でのソースの開示もしていない。
ソースコードの開示なし、(GPL 的な意味での)autohr の表示なしと小林氏の主張からしたら、GlassDolphin も GPL 違反や著作権法違反になるのだろうが、現実にはトラブルに至ってないのは、メドレーがこの配布方法を許可しているから。
私らの場合なんて、法人-有志の約束事に過ぎないが、SOSO-メドレーの場合には、法人間の契約と考えてよく、それに関して知りうる立場にいない第三者が著作権違反だのというのは名誉毀損や侮辱にあたるのではないかと思う。

私らなんか、かなり GPL を意識していて、ソースコードを一般に全公開するなど可能な限りその精神を尊重してたんですけどね。


この件は、そのとき現場にいた人間からすると、そんなにおかしくもないのだが、一般の人からはそうは見えないだろうし、ケチのつけられ方に前々から違和感を持っていたので思ったことを(まとまらないかもしれないが)もう少し書き留めておく。

皆川和史の立ち位置がわかりにくい

小林氏が持論を展開した時点では、原著作権者とされていた皆川氏は LSC 社に在籍していて、だからわれわれは筋を通すためにわざわざ一席もうけて LSC にご意見伺いを立てたわけだ。
その場に出てこないで、後で文句を言うのは筋違いではないか?
交渉時に「こういう表記にしてくれ」と言われたらわれわれは従ったと思う。
そのときに勘違いか何かあったとしても、後でメールかなにかで指摘してくれれば、それでも従ったと思う。
著作権や各種契約を管理していた法人(しかも本人が所属している)を通してでは何も主張できないのだから、それ以外のルートで非公式にとやかく言われてもこちらとしては社会人のマナーとしてなんの対応もできない。
これは小林氏に対しても同様で、そんなに確信があるなら、LSC に問い合わせればよかったのではないかと思う。

もちろん、そうはできない事情もある程度は察していたわけだから、もう少しやり方を工夫して欲しかった。
事情、というのは、LSC 版と goody 版で同一ファイルであっても author 表記が食い違うとか、基本設計に近い部分で Junzo SATO(佐藤純三)氏の貢献が確認できるとか・・に起因するある種の広報と実体との矛盾のことだ。
2010 年台中頃から、LSC のドルフィンは不具合は頻発し更新も滞りがちで、LSC の主張を額面通りには受け取れないという雰囲気はあった。
それでも、フォークした開発者連中は、「ソースコードが公開されている電子カルテ」などそれまでなかったのだから、違和感を持ちながらも商用開発元の喧伝する物語には付き合っていこうという態度であったと思う。
だから、ことをおさめるためにもうちょっとうまいやり方をとって欲しかった。
例えば、Junzo SATO・funabashi・miura… といったソースコード提供者の貢献を再評価し、適切にクレジットする、といったやり方だ。

@masudanaika の変節

e-Dolphin 時代からの業績を考えれば、Junzo SATO 氏などはもっとフィーチャーされていいはずだが、商業的なプロバガンダのせいか、実際はそうはならなかった。
代わりにフォーカスされたのは、増田茂と松村哲理だ。
松村氏は、当時からそれほど開発者アピールはしていなかったし、今でもソースコードの開示はして開発は継続しているので、現在でもそれほど違和感なく受容されていると思うが、増田氏の現状は一体どうしたものだろう?
増田氏の X(twitter) アカウントは @masudanaika というものだが、現在(2025.9 月)では、プロフを見る限り医師だとも名乗っていない。
この現状で「増田内科の増田茂医師が開発に関与している」というかつての主張とどう辻褄をつける気なのか?

皆川和史の消失

増田氏の名前が出たついでで言ってしまえば、皆川和史に至っては事情はもっとおかしく、調べたら X のアカウント自体が消えてしまっていた。
著作権云々の観点からみてもおかしなことで、本当に保護すべき著作権人格権を有しているのであれば、むしろ所属を離れた時の方がその権利を主張しやすい。
財産権としての著作権は法人所有であっても構わないが、著作権人格権(表記権含)は法人には委譲不可能だからだ。
組織のしがらみでその時は自分の権利を主張できないことがあるというのは理解しているつもりだ。
何かおかしい。

小林慎治の不審なプルリクエスト

小林氏の怪文書が公開されたのが 2018 年11月26日ということだが、実は、小林さん、それに先立つ 同年11月5日に OpenOcean にプルリクエスト(PR)を送っている。
詳しくは『オープンソースの世界 〜残酷な自由さ〜』を読んでほしい。
結局、この PR はマージされなかったわけだが。
PR 送った時点では、OpenOcean が GPL 違反だとは一言も主張しておらず、PR を断ってから、突如として「違反だ、違反だ。皆川・増田を強調しないのは違反だ」と騒ぎ立てている。
これも何かおかしい。

類推を含む結論

最初の方で「まとまらないかもしれないが」と書いたが、なんとなくまとまってきた。
彼らが騒ぎ立てていたのは、OpenOcean 騒動の 2018 から始まって、メドレーへの譲渡が決まった 2020 までの期間にほぼ限られる。
経営陣が変わった LSC は、2018 には多分に経営的な観点から「GPL はやめる。活動実体のない皆川・増田の位置付けも変える」ということを仄めかしていた。
この決定に関して、皆川は知っていたはずで、「開発者」の立場が風前の灯だということもわかっていたはずだ。
結果的には、メドレーへの事業譲渡という形で、この狙いは強制的に果たされるわけだが、「開発者」たちは、こうなる前に自分の author としての名前をプロジェクトに刻みつけておきたかったのではないかと推測する。

「オープンソース時代に彼らが保有した権利は、著作権人格権とは無関係な『著作権者と名乗っていい権利』だけだったのではないか?
 実際に開発して保護の対象になっているのであれば、プログラムであっても著作権表示権は保持できるはずだが、実際にはそうはなっていない。
 LSC からメドレーへの譲渡がスムーズにいったのも、そもそも彼らが保持できるような著作権表示権を持っていなかった、つまり実際には開発には関与していなかったからだと思う。
 2.3 系までの契約上の権利しか持っていなかったので、その権利を保持するために 2.7m は 2.3m の派生だと主張する必要があったのではないか?」

いるかの怪文書3』より

整合性を取るために、わかっていても主張を変えられないというのは、わかる気もするが、一時的とはいえ世間の耳目を集めたプロジェクトの着地点としては適当なものとは言い難かった気がする。

 

 

いるかの怪文書 3

見当はずれのコメントしかできないようなレベルのスキルしか持ち合わせていないにも関わらず、増田茂の尊大な態度に何か違和感を覚えるという人が多いようだ。

最近になって「増田茂の態度が尊大なのは、2.7m のベースは自身の 2.3m が元になっていると勘違いしていたから」ということが言われるようになった。

これはありうる話で、この説を採用すると 2.7m 登場以前は win 限定の傍流プロダクツに過ぎなかった通称『増田ファクト』が、2.7m つまり

・win, linux はおろか Mac で動作する
・データ構造は当時の最新バージョン 2.7 と完全互換(=本家直系)
・コメント系のバグが完全に解消されている

というプロダクツのフォーク元と主張できるようになるからだ。
しかも本人は何の努力もしないで。
(もちろん、この認識は完全に間違っているのだが)

怪文書にもそれを窺わせる記載がある。

「ソースコードの不正利用」、「私が提供した資料とソースコードをもとに」あたりの表現は、かなりあやしい。
2.7 系のインストール方法は、高東ソフトウェアさんが突破口を開き、air-h-128k-il(この時点ではほぼ猪股弘明氏)が完成させ、さらに ANN2b 氏が Mac に拡張した、というのが経緯だ。
2.3 系の windows インストール特化の古い導入書が参考になることはない。

I 氏とあるのが 2.7m の開発者の猪股弘明氏のことだ。
直接フォークでも何でもない増田ファクトの著作権表記を別系統のプロダクツに要求したのは、彼がフォーク順を誤認していた、という理屈だ。
また、(後で主張を修正したようだが)2.3m の m は masuda の m だとも当時は主張していた。

これに関するコメントをいくつか。

「ありえない。2.7m のソースコードは公開されている。
ソースが公開されていて検証できるのに間違うのは、彼が自分が開発したと称するプログラムを把握していない証拠。自分でコーディングしてはいないのではないか?」

「『2.3m の m は masuda の m』は自己顕示欲がえぐい。
ここまで言いながら、その後に起こった変化への対応、すなわち

・Java のアップデート対応
・安全性ガイドライン対応
・医療Dx 対応

のどれもできていない。つまりまともにメンテナンスすらできていない。
にも関わらず、名称に関して自分に優先権があると主張するのはマナーの問題としてどうなんだろう」

「そもそも、LSC の経営陣が刷新されて以降、アウトプットは出せていないので、それまでの成果にしても LSC からの技術情報を元に自分の手柄として発表していただけではないか?
プログラミングの成果にしても OpenDolphin に関係するものしかなく、独立したアプリはひとつもない。
やったことといえば、2010年以降の数年間、すでにある程度完成されたソフトのカスタマイズをしたのみ。
これで俺はすごい開発者なんだアピールされても、自己評価がなんかおかしいとしかいえない」

「誤認云々は置いておいても自分のプロダクツが全ての OpenDolphin に影響を与えていると言わんばかりの主張は奇異で誇大的すぎる」

「オープンソース時代に彼らが保有した権利は、著作権人格権とは無関係な『著作権者と名乗っていい権利』だけだったのではないか?
 実際に開発して保護の対象になっているのであれば、プログラムであっても著作権表示権は保持できるはずだが、実際にはそうはなっていない。
 LSC からメドレーへの譲渡がスムーズにいったのも、そもそも彼らが保持できるような著作権表示権を持っていなかった、つまり実際には開発には関与していなかったからだと思う。
2.3 系までの契約上の権利しか持っていなかったので、その権利を保持するために 2.7m は 2.3m の派生だと主張する必要があったのではないか?」

最後のコメントは推測を含みますが、説得力ありますね。
ここら辺はややこしいところなのですが、興味深い説なので一応解説しておきます。
プログラムであっても保護の対象になっているのであれば、著作権人格権が発生し、これは譲渡不能です。
が、メドレーが言うには、このような権利に当てはまりそうなものは一切なかったということなので、そもそも増田茂は著作権法で規定されているような保護すべき著作権人格権を保持していなかったのではないか、という仮説です。
ありうる話です。
というか推測を交えていいなら、状況を説明する上で一番無理のない自然な考え方のように思います。

 

 

いるかの怪文書 2

ややこしい背景説明は終わったので、次の怪文書。

なんで彼(増田茂医師)がこの箇所を切り取ったのか考えられる背景理由もあったりするのだが、メンドくさいので割愛(知りたい人はこの記事でも)。

説明的な文章もメンドくさいので、反応を五月雨式に書いていく。

「コード上では 0/1 しか返り値はないが、拡張すれば他の整数値を返した方がいいので int にしておく方が自然」

「そもそも expired() というメソッドは、air-h-128k-il 氏が付加したものなので、それにあれこれ言うのは失礼」

「コメントは、このソフトがこの後どのように動作するかを簡潔に示したもので、どちらかといえば後で読む人のことを考えて付け加えた教育的・説明的なもの。
ここでコーディングの技量を推し量るというのが、意味わからん」

ちなみにコメントというのは以下の箇所のコメントのこと。

public static void main(String[] args) {
        //Dolphin.getInstance().start(args.length==1 ? args[0] : "i18n");
        Dolphin.getInstance().start(args.length==1 ? args[0] : "dolphin");
        //? 式1:式2は三項演算子。なお、args.length は配列の要素数。
        //引数の要素が1だった場合は args[0] でスタート。そうでなければ i18n でスタート。
        //windows環境ではダブルクリックして使いたいので i18n を pro に変更。
        //pro? dolphin? どっち?
    }

三項演算子は、プロの間でも「読みにくい」・「直感に反する」と取捨選択が取り沙汰されるほどなんだが?
(『三項演算子は仕事で使うべきではない』など)
2.7m 開発時に猪股弘明氏がドルフィンクライアントの「起動モード」の役割について明らかにしてくれたおかげで、当時最新の 2.7 系がストレスなく使えるようになったんだが?
(改変前のままビルドして起動すると、クライアントは評価モードで立ち上がり、すぐにログインできない。正直、使えない)

この成果は増田茂も「バックポートした」と称する彼のドルフィンで使っている。

2018622 の該当箇所。既に公開されていた 2.7m からコメントを削除して使用。

にもかかわらず、彼は「プロの仕事ではない」と頓珍漢なコメントをしている。
おまけに Junzo SATO 氏に対する言及は一切なし。
あり得ないと思う。

に続く)

いるかの怪文書

怪文書騒動

先日、X の dolphorca 界隈がさる怪文書でプチ盛り上がりをみせた。
こんな感じ

怪文書だけ取り出すとこうなる。

これが何か関係者以外正確にはわからなかったと思うが、簡単に説明すると増田茂という医師が自身の運営するクリニックホームページ(HP)に掲載したページのスクリーンショットだ。
なんでプログラミングに関係すると思われる文書がクリニックHPにアップされていたのか不思議に思う人もいると思う。
が、安心して欲しい。
われわれがこれを見つけたときもまるっきり同様の感想を持った(笑)。

背景事情に関しては、こちらの記事などを参考にしてほしい。
以前にも「増田茂は医療広告規制ガイドラインで厚労省から行政指導を受けており・・」などと言っていたのはこのページのことだ。
保険診療所は、ネット上での広報活動に関してガイドラインが決められており、原則、診療とは無関係なものは掲載できない。
もちろん、このページはガイドラインの規定を大きく逸脱しており、発見したときは、当局に報告し、当局経由で速やかに削除してもらった。

だから、この怪文書を再び見せられるまで、存在自体忘れていた。
それですんでいれば、この話は終わっていた・・・と思うのだが、実際にはそうでなかったらしく、いかがわしげなサイトにその痕跡がかなりはっきり記録されていたという次第だ。

反論

ページが複製されて残っている以上、閲覧した人におかしな解釈されても困るので内容に関して触れておこう。

内容はその当時ソースコードを公開していた OpenOcean という電子カルテに対する彼からの批判のようなものだ。

OpenDolphin-2.7 → OpenDolphin-2.7m → OpenOcean

の順でフォークされている。
彼は彼で、「増田ファクト」と言われていた OpenDolphin-2.3 のカスタマイズバージョンを配布していた。彼が OpenOcean に執着した理由は、彼が OpenOcean を自分のバージョンのフォークだと認識していたからだと思われるが、このフォーク順の認識は間違っている(『ソースコード嫁』参照)。

ファイルバックアップシステム

まず、われわれが実装したファイルバックアップシステムというものを彼は気に入らないらしい。
ファイルバックアップシステムというのは、カルテの記載を確定したときに使用端末の適当なフォルダにその内容をプレーンテキストファイルの形で書き出すという機能だ。

彼が切り取った実際のコードはこうだ。

KarteStyledDocument soadoc = (KarteStyledDocument)soaPane.getTextPane().getDocument();
int nleft = soadoc.getLength();
Segment stext = new Segment();
int offs = 0;
stext.setPartialReturn(true);
StringBuilder sb = new StringBuilder();
String Separator=System.getProperty("line.separator");
sb.append(""+ Separator);
while (nleft > 0) {
soadoc.getText(offs, nleft, stext);
sb.append(stext.toString()); sb.append(Separator);
  nleft -= stext.count;
  offs += stext.count;
}

彼はこの部分に関して「JTextPane からテキストだけを抽出するなら getText() で可能だ」という指摘をするのだが、これがなんと言っていいやら・・・。

「JTextPane からテキストだけを抽出するなら getText() で可能」というのは、これだけを取ると正しいのだが、そもそもここで目指していたのはそういうことではない。

というのは、このコードは、データ移行ツールと呼んでいたものからの流用だからだ。
データ移行ツールは、dolphin/ocean とは独立したアプリで以下のような動作をする。

左が dolphin クライアントのカルテ画面、右はそのカルテ情報を移行ツールを使ってデータベースから直接復号して画像とテキストに分離して表示したものだ。
見ればわかるように、画像を埋め込んだ位置に <Image: schemaHolder 0> というタグを表示させている。
だから、上で掲げたコードもちょっとした修正を加えれば、このタグを表示する程度のことはできる。
ファイルバックアップシステムでは、凝った表示をさせるよりは最低限のプレーンテキストを書き出すことを目標としたが、画像が含まれていたかどうか?含まれていたとすればどこに表示されていたのか?くらいの情報を盛り込むのはあってもいいと思い、将来的な拡張を視野に入れてこういう書き方になっている。

また、コードを見ればわかり通り、getText(int, int, int) を作用させたのは KarteStyledDocument という独自クラスのインスタンス soadoc であって、JTextPane もしくはその継承クラスではない。
仮にもしここで getText() を使うのであれば(ちなみに getText() と getText(int, int, int) は似ているが全くの別物)、JTextPane のインスタンスを取得する必要がある。
その手間や拡張性を考えたら、書式情報を最後まで保持できてなおかつ動作実績のあるこの書き方でいいと考えたわけだ。

ある機能を実装するのにどのような書き方をするかは書いた人(たち)の自由ではないか?と思う人もいるかと思う。
私たちもそう思う。

このとき彼はネット上でたびたび出現する「正義の人」になっていたのだろう。
迷惑な話だ。

その2に続く)

 

ソースコード嫁

私がカスタマイズした OpenDolphin-2.7m (という電子カルテ。本家 LSC Dolphin の直接 Fork)は、以前に前期LSC一家と言ったらいいんだろうか、ともかく 2018 以前の LSC と繋がりの深かった人々からおかしな非難をされていた。人々、といっても、皆川和史・増田茂・松村哲理・小林慎治・杉原利彦・・・くらいなものだが。

どういうものだったかは
保健医療科学院 小林慎治が国家公務員法違反疑いで厳重注意を受けた件について
小山哲央(アーク情報システム)の件
あたりを参照してください。

彼らがいうには、Fork 順は

 LSC Dolphin(いわゆる本家) → 2.3m(いわゆる増田ファクト)→ 2.7m (ワイのバージョン)

なんだそうだ。

正しくは LSC Dolphin(Ver 2.7) → 2.7m なんだが、それはソースコードを読めばわかる。

例えば、ModuleModel.java というファイルの冒頭をみてみよう。

2.7 と 2.7m では一字一句いっしょ。

この箇所は 2.3m ではこうなっている。

赤枠の部分が追加されたコードで、検索(hibernate search)のためのアノテーション(@から始まるコード)が付加されていることがわかる。

私がわざわざカスタマイズしたのは、

・2.7 にあったバグ(通院精神療法のコメントが正しく表示されない)を修正したい
・簡易なファイルバックアップシステムを実装したい

というのが主な動機で、データの互換性は完全に保ちたかったから、データ構造周りには一切手をつけていないし、上記の機能に関係しない部分も同様に手を加えていない。

だから、2.3m → 2.7m という Fork 順はありえない。
いちいち、付加されたコードを削ぎ落として作業すんの?
ありえんでしょ。

なお、ModuleModel.class というのは、Dolphin サーバーがカルテ記載内容をデータベースに永続化する際に最も基本となる単位で、SOA 欄文字列・図などのグラフィック要素・P欄文字列をそれぞれ一つのモジュールとしている。
シンプルだが、当時のデータベースが CLOB をうまく扱えなかった関係上、図も文字情報も全てバイナリ化してBLOB として格納されている。
カルテに復号する時は、モジュールを拾い集めた後、内容毎に処理を変える必要があるというなかなか地獄のような仕様になっている。

さらにおかしいのは皆川和史氏が設計したことにはなっている点だ。
しかし、

・LSC の経営陣が変わった際に彼は担当役員を外されている
・この程度の基本的なデータ構造を把握していない
自分が設計したデータ構造を他のものと取り違えるということがあるだろうか?

・メドレーに至っては開発者認定していない

といった事実があり、個人的には別の人が設計したのではないかと思っている。

増田茂医師に関しては言わずがなだろう。
hibernate search を用いた検索機能はアイディアとして素晴らしいし、付加されたコードも申し分のないものだ。だが、こんな完璧な修正を行える人が、データ構造を把握しておらず、Fork 順に関して間違えるとは思えない。
メドレーも、皆川氏と同様に増田茂氏を開発者とは認めていない。
やはり、別の人が設計・コーディングしたと考えざるをえない。

ところで、オープンソースの世界は一般には不親切で(商用を前提にしていないので当然だ)、よくわかってない人間に対してメンテナが言う言葉は大抵の場合

 ソースコード嫁

である。