jhoja は Apache v2ライセンスと決まりました。

ベースにしたSWAG javap2のライセンスが未公開で不明であったため、javap2の著作権者のカナダのWaterloo大学とメールで話し合ってきました。
結果、不明だったjavap2のライセンスをApache v2と公式発表して頂きました。
それに伴い、jhojaもApache v2も正式に決まりました。
ライセンスがはっきりしたので、Vectorにも登録申請しました。

jhoja (Java逆アセンブラ for Jasmin、逆コンパイル阻止機能付き)を公開しました。

http://www.nabeta.tk/jhoja/
SWAG javap2ベースのJavaクラスファイルの逆アセンブラを公開しました。
二年前に作ってほぼ完成させていたのに二年放置して今頃公開です。
JasminというJavaアセンブラにかけられる状態のソースを出力します。
オプションで逆コンパイル阻止コードを埋め込むことができます。
Windows版ですがwineを使えばx86系のGNU/Linuxで動きます。
差分ソースも公開しています。

Javaの今後

数年後からオラクルからは無料のJavaはJDK、JREともに公開されなくなるってことでいいのかな?
Javaアプレットからの移行先としてすすめられていたJava Web Startもなくなるってことでいいのかな?
無料のJavaはOpenJDKが別途あるので細かいことを気にしない人には問題はないと思う。
でも細かいことを気にする人はJavaから離れていくのも間違いないと思う。
大企業が出しているものしか使えないとかセキュリティーうんぬんを言う人が出ると思う。
オラクルはボランティアでJavaをやっているわけではなく企業としての収入源としてJavaをやっているのだからオラクルが決めた方針に反論はない。
収入にプラスになるかどうかは知らないが。

Jasmin対応のJava逆アセンブラと、Java逆コンパイル阻止機能付き。

(追記。2018/3/12公開。http://www.nabeta.tk/jhoja/)
実は二年前にこれをほぼ完成させていましたがプログラムを公開することなく放置していました。
二年ぶりにちょっと再開してみました。
いちから作ったわけではなくSWAG javap2というJava逆アセンブラの改造です。
逆コンパイル阻止ツールが逆アセンブラとは別に存在するのではなく逆アセンブラのオプション機能で逆アセンブル時に逆コンパイル阻止コードを埋め込みます。
それをJasminでアセンブルすると通常の逆コンパイラでは逆コンパイルできないclassファイルが作れます。
JasminはJavaアセンブラです。
面倒だけども今度こそ公開しようと思う。

Java VM+JavaコンパイラのApache Harmony使ってみました。

Apache HarmonyがOpenJDKなどと違うところはライセンスがゆるくBSDライセンスに似たライセンスであること。
あとはOracleとライセンス契約したりJava互換認証を受けていないのでJavaもどきという立場かも知れない。
AndroidのJava VMのDalvikはApache Harmonyを改造したもの。
Javaの今後はどうなるのかという問題があるけども、AndroidでJavaもどきが生きているように、Oracleの動向関係なくApache Harmonyは使い続けることが可能なのではないかと思った。
OpenJDKでいいような気もするんですがOracleと密接につながっているような気がする。
でも、Apache Harmonyを使ってみると使い物にならんような感じ。
Java6対応ということですが、Java6で動くJEditorPaneやJComboBoxを使ったプログラムがうまく動かなかった。
動かない原因はよく分からない。
コンパイラはソース互換がいまいちなくて多少ソース修正が必要な部分があった。
例えば、Font.MONOSPACED が定義されていないので文字列の”Monospaced”に変えるとか。
コンパイラはOracleのJDK 1.6を使うこともできるけどそれで解決するのはコンパイルエラーだけでApache HarmonyのVMでのエラーや挙動は解決できない。
JbuttonとJMenuだけのプログラムはApache Harmonyでも動きました。
個人的にはSwingが動けば十分ですがApache HarmonyではSwingの一部にしか対応していないような気がする。
少ししか試していないので全体的なことは分かりません。
コマンドラインのプログラムなら多分問題ないかな?

少しQtやってみました。

2016年10月にQtはじめてすぐ飽きて放置していました。
なんでやめたのかは覚えてないです。
今Javaやっているのに中断してQtを少しやってみました。
コマンドラインでコンパイルするとエラーが出るようになっていました。
Cygwinのld.exeと衝突してたのが原因でした。
作りかけのプログラムを少しだけ進めました。
完成にはほど遠いです。
やる気が出るのを待つしかないが生きているうちにやる気がでるかどうかは分からない。

開発中Javaソフトが終わらない

Pure Javaのカレンダー作っていたらHTMLのヘルプファイル表示のためにPure Javaのウェブブラウザー作りはじめてダウンロード機能もいるかなあとか思いはじめてPure Javaのダウンローダー作りはじめていつ終わるんだみたいな感じ。
細かいことを気にしていたら終わらんと思う。
鍋田辞書をQtに移植しようとして長らく放置中だけども、Javaへの移植のほうが先になる可能性が高まった。
(どちらにも移植しない可能性も高いけど。)
Java言語よりも元と同じC++のほうが移植しやすいがGUIのノウハウはQtよりJavaのほうがあるんでJavaへの移植のほうが早いような気がする。
どちらにしてもJava版の鍋田辞書は作りたい。

今、Java + Swingやっています。

大昔にJavaアプレット(AWT)でカレンダー作っていました。
一年か二年前にそれをJavaアプリケーションに移植しようとしていて完成まであとちょっとのところで放置していました。
動いてはいたけども祝日などのチェックを広範囲にするのが面倒で。
それを最近、祝日のチェックもしてJava+Swingアプリーションに移植して改造も加えている途中です。
どこかでやめればいいんだけど、つい余計かも知れないことまでしはじめて終わりが見えません。
しなければいいんだけど内蔵(単体動作も可)の簡易ウェブブラウザ(Java+Swing)も作り始めてしまった。
このまま鍋田辞書をJavaへ移植するのもいいかと思っている。
技術的な問題がないことがほぼはっきりしているし。
少しやりかけて長らく放置のQtをどうするかも考えないといけない。
FireMonkeyは少なくとも鍋田辞書の移植に使うのはだいぶ前に諦めた。
Swingは今は古いものになっている。
Swingの後継はJavaFXだがやるつもりがない。
あまり調べていないのでJavaFXのことはよく分からない。

javapackager

javapackagerというすごいコマンドがJDKに含まれているを今日知った。
なんで今まで知らなかったんだろう。
jarファイルを作れるのはjarコマンドでもできるので特にすごくはないが、
WindowsやMac OS、GNU/Linux(rpm/deb)のJREを含めたインストーラーを作れる。
(JREを含めずにインストーラーだけ欲しい場合には使えないような気がする。)
JREはどのJavaアプリケーションからでも使えるように普通にOSにインストールされるのではなく、
配布自作ソフト専用でその一部として陰に隠れた状態でインストールされる。
(自作ソフトがインストールされた場所の下のディレクトリにJREがあるから見れば見れるが、コントロールパネルのプログラムの追加と削除の一覧の中には出て来ないしパスも通っていない。)
インストーラーはWindowsの場合はexeまたはmsiを作れるみたいたが両方とも別途ソフトのインストールが必要。
exeの場合はInno Setupというソフトをインストールし、Inno Setupのパスを環境変数PATHに追加する必要がある。
Javaで作ってあってもWindows専用ソフトして配布できるようになる。
確実にWindowsで動作するのでJava製と言う必要もなくなる。(言ったほうが親切だが)
小さい自作ソフトで試してにやってみるとサイズがインストーラー(exe)で46MB、展開後は177MBになった。
まあサイズは大きくなるけどもJavaをインストールしていない人が多く、Javaをインストールしたがらない人がいる以上は仕方ないとは思う。