OceanMini とソースコードの2次利用

私もちょっとお手伝いしてきた OpenOcean 系列の最新プロジェクト OceanMini だが、先日(2025/11/14)、パイロット版とでもいうべき、Ver 1.0.0 が公開された。

ここから機能が爆速で追加され、2025/12/13 現在では Ver1.0.7 になっている。

あ、まだ一月経ってないんだ。。。すげ。

OceanMini 自体は電子カルテとして使えるのだが、私がすぐに使うものではない。

興味あるのは、ウェブフレームワークとしての使い勝手の良さ。

関係者も驚いていたが、ウェブサーバーってこんなに簡単に扱えるものなんですか(笑)

ありがたいことにコンソーシアム開発方式の良さが出て、私は、このソースコードにアクセスできる。

ソースコードの2次利用に関しては、訊いてみたら「勝手にオープンにするとか、そのまんまの形で使うのでなければ、好きに使ってもらってけっこう」だそうだ。ありがたい限り。
だから、サーバー部だけ切り出して、他のアプリに転用するとかは全然OK。

すぐに思いつくのはブログとかだろう。

全然、いける(笑)

私がパッと思いつく応用例は、andoroid スマフォ→ Mac 間のファイル転送用のサーバかなあ。
あれは適当なアプリがなく、いつも困る。

参考

Mac でウェブフレームワークというと Vapor というプロジェクトが有名なようだ。
入門・解説記事もそれなりに豊富。(これとかこれとか)
ただし、こちらは Swift ベースで、Objective-C に慣れている身からすると手を出しにくい。
流石に Vapor に触れておかないと片手落ちだと思うので言及。

 

 

J2ObjC は使えるか?

Java プログラムを Objective-C プログラムに変換してくれる天下のグーグル謹製プロジェクト J2ObjC 。

興味を持ったので試してみた。

何はともあれビルド。

ビルド

公式のページに従う。

注意点としては・・・。

PROTOBUF_ROOT_DIR=/usr/local

を .zprofile あたりに追記。この時に

PROTOBUF_ROOT_DIR='/usr/local'

とやってしまうと文字列と判定されてしまうので、ビルド途上でおこられます。

並列ビルドも失敗しやすいようなので、まず

make -j4 dist

と最低限のコンパイルを片付けてしまい、必要に応じて

make frameworks
make all_frameworks

とするといいと思う。

Hello World

ビルドはとんでもなく時間がかかるので、すぐにできる j2objc, j2objcc を使ってハロワしてみよう。

公式ページにある Hello.java

public class Hello {
  public static void main(String[] args) {
    System.out.println("hello, world");
  }
}

j2objc Hello.java

すると同名の .m ファイル(Hello.m)ができる。


#define J2OBJC_IMPORTED_BY_JAVA_IMPLEMENTATION 1




#include "Hello.h"
#include "IOSObjectArray.h"
#include "J2ObjC_source.h"
#include "java/io/PrintStream.h"
#include "java/lang/System.h"



#if __has_feature(objc_arc)
#error "Hello must not be compiled with ARC (-fobjc-arc)"
#endif

#pragma clang diagnostic error "-Wreturn-type"
#pragma clang diagnostic ignored "-Wswitch"


@implementation Hello

J2OBJC_IGNORE_DESIGNATED_BEGIN
- (instancetype)init {
  Hello_init(self);
  return self;
}
J2OBJC_IGNORE_DESIGNATED_END

+ (void)mainWithNSStringArray:(IOSObjectArray *)args {
  Hello_mainWithNSStringArray_(args);
}

+ (const J2ObjcClassInfo *)__metadata {
  static J2ObjcMethodInfo methods[] = {
    { NULL, NULL, 0x1, -1, -1, -1, -1, -1, -1 },
    { NULL, "V", 0x9, 0, 1, -1, -1, -1, -1 },
  };
  #pragma clang diagnostic push
  #pragma clang diagnostic ignored "-Wobjc-multiple-method-names"
  #pragma clang diagnostic ignored "-Wundeclared-selector"
  methods[0].selector = @selector(init);
  methods[1].selector = @selector(mainWithNSStringArray:);
  #pragma clang diagnostic pop
  static const void *ptrTable[] = { "main", "[LNSString;" };
  static const J2ObjcClassInfo _Hello = { "Hello", NULL, ptrTable, methods, NULL, 7, 0x1, 2, 0, -1, -1, -1, -1, -1 };
  return &_Hello;
}

@end

void Hello_init(Hello *self) {
  NSObject_init(self);
}

Hello *new_Hello_init() {
  J2OBJC_NEW_IMPL(Hello, init)
}

Hello *create_Hello_init() {
  J2OBJC_CREATE_IMPL(Hello, init)
}

void Hello_mainWithNSStringArray_(IOSObjectArray *args) {
  Hello_initialize();
  [((JavaIoPrintStream *) nil_chk(JreLoadStatic(JavaLangSystem, out))) printlnWithNSString:@"hello, world"];
}

J2OBJC_CLASS_TYPE_LITERAL_SOURCE(Hello)

おお、Objective-C じゃん!

次に

j2objcc -c Hello.m
j2objcc -o hello Hello.o

として実行バイナリ hello をつくる。

% ./hello Hello
hello, world

おおお。

Java リバーシアプリを iPhone アプリに

そうこうするうちに dist フォルダに生成物ができていたので、これを利用して Xcode プロジェクトのサンプルを試してみた。
公式が Java reversi プログラムを Xcode 上でビルドするサンプルを紹介していたので、これにトライする。

ほぼそのままで動きました。

JRE.framework を JRE.xcframework にするくらいの変更でOK牧場。

すげ。

 

 

(続く)

 

反オープンソース評論家

常々、「IT 評論家」のような人が嫌いだった。

特にオープンソース評論家のような人は、その主張が激しく界隈ではある種の「武闘派」とみなされていると思う。

その点で、いわゆる OpenOcean 騒動はチェックしていた。
OpenOcean 騒動というのは、air-h-128k-il さんたちが OpenDolphin という GPL でライセンスされた電子カルテの独自カスタマイズバージョン OpenOcean をソース・バイナリともに公開・配布した際に、小林慎治(医師、現岐阜大医学部特任講師)というオープンソース評論家のような人が、「OpenOcean は GPL に違反している!」と難癖つけた事件のことだ。

この難癖というのがなんと言っていいやら・・・。

まあ、トンデモの類。

最近になって、当時の開発陣からかなりまとまった反論が提出されている。
(例えば『小林慎治氏の OpenOcean に関する事実誤認』、『OpenOcean 騒動』、『OpenOcean 騒動 #27』)

ここで注目したいのは、オープンソースの責任性について。

彼は怪文書の中で言っている。

OpenOceanのWebには2018年12月までの試用期間であると記載とされています。ユーザーはこの指示に従うべきものとも考えられますが、このままだと使用期限が近づいてもクライアントに何の警告も表示されずに2019年1月以降起動しなくなってしまいます。GUIなインタラクティブメニューを持つソフトウェアであれば、1ヶ月以上前から警告を表示しておくのが親切ではないでしょうか。
Webに記載される試用期間を見落とすほうが悪いのかもしれませんが、使用期限を過ぎて起動しないソフトウェアに対してどのように対処すべきかも書かれていませんので、ユーザーである医師には対応できずに医療事故につながる危険性があります。

ここだけ取り出すと提案の一つとしてあってもいいかなと思えなくもないが、実際に彼の取った行動は理解不能。

なんと、使用期限に関するコードを削除したものをプルリクエスト(PR)として OpenOcean リポジトリに送ってしまったのだった。「残り X 日です」とアラートウインドウを出すような実務的なコードではなくて。
その PR は今もリポジトリに記録されている。こういうものだ。

expired() というメソッドで使用期限を設定しているわけだが、この機能に関するコードを削除しただけ。

すごいでしょ。

issue あたりで改善要望出しておけばいいだけだし、そんなに使用期限がいやなら使用期限のないバージョンを自分でビルドしてユーザーに提供すればいいだけ。後者は、ほぼパクリとも言える行為だが、air さんたちだったら許していたと思う。

その一方で怪文書は、

第三者にその製品を提供することは著作権法が定める頒布権の侵害であり、公衆の場であるGitHubにソースコードを置くことは著作権法が定める公衆送信権侵害です。

とソースコードの公開停止を主張している。
PR 送ったのが 2018/11/4 で、怪文書が公開されたのが 2018/11/26 のことだ。
俗っぽい言い方をするならば「PR がマージされなかったので、逆ギレして公開停止を主張した」ということになる。

ところで、そもそもオープンソースは、ビルド産物に関しては責任は限定的だし無保証だ。
この点に関してある人が面白いことを言っていた。


OpenOceanの試用期限表示とオープンソースの責任について

1. OpenOceanの試用期限表示について

OpenOcean配布サイトには「使用期限は、2018/12/31 までです。」と明記されているので、「警告なく起動しなくなる仕様」という批判は不当であると言えます。情報が公開されていた以上、利用者はその条件を理解した上で使用を開始する責任があります。

2. オープンソースにおける開発者の責任について

多くのオープンソースソフトウェア(OSS)のライセンスには、開発者による保証の放棄(無保証)と責任の限定が明確に記載されています。

無保証の原則: OSSは一般的に「あるがまま(as-is)」で提供され、品質保証や機能保証は行われません。利用者は自己責任においてソフトウェアの品質や安全性を確認し、利用する必要があります。

責任の限定: ほとんどのOSSライセンスは、開発者がソフトウェアの利用によって生じた損害に対して責任を負わない旨を規定しています。これは、オープンソース活動がボランティアベースで行われることが多く、開発者に過度な負担をかけないための措置でもあります。

新機能の搭載: 開発者が責任に限定的である立場にあるからこそ、新機能や実験的な仕様を導入しやすいという側面があります。


実際、OpenOcean には、ファイルバックアップ機能などそれまでのドルフィンになかった新機能が搭載されていた。

どれが正しいのだかもわかりにくい著作権表記だのでワーワー騒いで、OpenOcean 開発陣からユーザーによる新機能の評価を得る機会を奪ってしまった。

「小林慎治はオープンソースの足を引っ張っているだけ」という批判がなされている一つの根拠になっている。

おそらくこの人のスキルからしてオープンソースといった開発現場に近い位置での論評は無理がある。
それを自覚したのか、小林氏、最近では初学者向けに「医療Dx」に関して語ることが多く、一時の「オープンソース」偏重とは異なる態度をとっている。
言い方を変えれば、実務家が彼を「オープンソース」領域から追っ払ったとも言えるわけで、反「オープンソース評論家」のささやかな勝利といえるだろう。

 

(追記)本稿では、責任性について触れたが、私がのけぞったのは、そもそも怪文書の根拠となっていた著作権表記が改竄されたものであったという事実。
そして怪文書の「是正勧告」とやらに従った場合、まるでミステリのような犯罪が成立していたという指摘。
OpenOcean 怪文書 -GPL 誤用による違法行為教唆-』に詳しく書かれていますので、興味のある方はそちらをご覧ください。
OSS は無保証・限定責任ですが、OSS に関して語ったことは語った人の責任です。
どう責任取るつもりなんでしょうか?
でも、この人のことだから、言いっ放しで終わりそう。

(追記2)X の TL みてたら、佐渡秀治という人が引っかかってきたようだ。

「流れは知らんけど」って。追補されているのだから、流れは重要だろう。
これ、反撃されるとみた。
→案の定、『OpenOcean 怪文書 – 適切な GPL 使用のために-』で追記されてた。
ところで、ネットで検索してたら、この人のことを評した情報はほとんどない。
あの言動では当然そうなるよなあというのが感想。

 

造船大

限定公開記事だが、以前にFラン大のことを書いた。

で、X で監視している垢があると言っていたが、無論、今でも続けている。

そのうちの一人を「造船大」と呼んでいる。

2025 年になっても、フォロワー約100、インプレションも二桁と絶好調である。