Knt Blog

あっちこっちの趣味を書き留める場所

Apache NetBeansがOpen JDKで動くか試してみた

きっかけ

仕事でApache NetBeans統合開発環境として導入しようという話になった際、Java Development Kit(通称JDK)を入れておく必要があることが分かりました。 それを聞いて、そういえば前職で取り扱っていたとあるソフトの改良時に 「Oracle JDK(Oracleが生成したJDKのバイナリ)の本番環境での使用が有償になるから、OpenJDKに鞍替えしよう」という話が出て、 実際に開発・動作環境をOpenJDKに変えたことを思い出しました(2019年頃)。 そして、「あれ、OpenJDKにしなきゃダメじゃね?」という懸念が浮かんだので、少し調べてみました。

結論は「OpenJDKにしなくてもOK」でした。 2019/4/16よりOracle JDKのライセンスがOracle Binary Code LicenseからOracle Technology Network Licenseに変更されることに伴い、 商用・本番環境においてOracle JDKを使用するためには、有償サブスクリプションに入る必要がありました。 forest.watch.impress.co.jp

ところが最近になってOracle社は、Oracle No-Fee Terms and Conditionsという新たなライセンスをOracle JDKに適用し、 「やっぱり商用・本番環境でも無償使用OK」としたようです。 www.itmedia.co.jp

それゆえ、今回のApache NetBeans導入においても、Oracle Javaは無償で使用できることになり、 「あれ、OpenJDKにしなきゃダメじゃね?」という懸念は杞憂に終わりました。

なのでこの記事はここでおしまいです。解散。

仕事では結局Oracle JDKが選択されたのですが、折角なのでOpen JDKでもちゃんと動作するのか確認してみようと思い立ったのが、今回の試行のきっかけです。需要あんのか...?

インストール先環境

f:id:knt_eagle:20211030033950p:plain
何の変哲もないWindows 10 Pro

OpenJDKのダウンロード~インストール

まずはOpenJDK最新版のインストールです。ダウンロード~環境変数設定の流れはいつものJDKインストール時と変わらないので、分かっている方は飛ばしてもらって構いません。

  1. Open JDKのダウンロード
  2. OpenJDKのページにアクセスします。
    https://openjdk.java.net/

    本文中の"latest open-source JDK"をクリックすると、最新のOpen JDKのプロジェクト紹介ページ?に飛びます。 記事執筆時点の最新メジャーバージョンはJDK 17でした。
    https://openjdk.java.net/projects/jdk/17/

    本文中の"available from Oracle"をクリックすると、ようやく各OS向けビルドのダウンロードリンクが出てきます。 インストール先のOSはWin10なので、迷わず"Windows / x64"を選択します(このページからOracle社の管轄のようである)。
    https://jdk.java.net/17/

  3. zipファイルの展開
  4. ダウンロードしたzipファイルを、自分の分かる場所に展開しましょう。環境変数設定時に困らないように。
    f:id:knt_eagle:20211030042514p:plain
    黒塗りまみれの展開先
  5. 環境変数設定
  6. 次に環境変数を設定します。コントロールパネルや設定から、「システム環境変数の設定」を開きます。
    f:id:knt_eagle:20211030042730p:plain
    windowボタン押して"env"とか打つと検索結果に出てきます。
    出てきたウィンドウの「環境変数」ボタンをクリックして、環境変数の編集画面に移ります。
    f:id:knt_eagle:20211030043201p:plain
    赤枠のボタンをクリック
    環境変数の編集画面では、システムの環境変数とユーザ環境変数の設定ができます。どちらに設定すべきかは、例えば以下の記事を参考に決めてください(丸投げ)。 qiita.com 本記事では、ユーザ環境変数に手を加えます。やることは、
    "JAVA_HOMEの追加"と"Pathへの変数値追加"です。

    • JAVA_HOMEの追加
    • ユーザ環境変数JAVA_HOMEを新たに追加します。変数値は展開したOpenJDKフォルダ直下の"jdk-<バージョン番号>"までのフルパスです。
      f:id:knt_eagle:20211030050615p:plain
      JAVA_HOMEの変数値設定例
    • Pathへの変数値追加
    • ユーザ環境変数としてもともと定義されているPathに、変数値を追加します。追加する変数値は、OpenJDKフォルダ下の"jdk-<バージョン番号>\bin"までのフルパスです。
      f:id:knt_eagle:20211030051420p:plain
      Pathに追加する変数値の例
  7. パスが通っているか確認
  8. 最後に、"java"コマンドが使用可能となったか確認します。コマンドプロンプトを開き、
    java --version
    を実行してみてください。環境変数が正しく設定されていれば、ダウンロードしたOpenJDKのバージョン情報が表示されます。
    f:id:knt_eagle:20211030053146p:plain
    こんな感じ

以上でOpenJDKのインストールは完了です。(記事執筆もここで息切れ)

Apache NetBeansのインストール

次にApache NetBeansをインストールします。

  1. インストーラのダウンロード
  2. インストーラダウンロードサイトにアクセスし、最新版(記事執筆時点ではNB 12.5, LTSversionはNB 12.0)の"Download"ボタンを押します。
    Apache NetBeans Releases

    押した先では、Binariesと各OS向けInstallerのリンクが貼られています。ここでもWin向けのリンクをクリックしてダウンロードします。
    Downloading Apache NetBeans 12.5

  3. インストール
  4. ダウンロードが終わったら、インストーラを実行し、なされるがまま「Next >」を押します。 途中でNetBeans実行時に参照するJDKのパスが表示されるので、念のため、先程インストールしたOpenJDKのものになっているか確認しましょう。
    f:id:knt_eagle:20211030055507p:plain
    NetBeans動作時に参照するJDKのパス

  5. NetBeansの起動
  6. インストールが終わったら、さっそく起動してみましょう。
    f:id:knt_eagle:20211030061717p:plain
    わーい起動しました

    まとめ

    ということで、OpenJDK (17.0)でApache NetBeans (NB 12.5)は正常に動作するようでした。 冒頭に書いた通り、Oracle JDKは無償利用できますし、何なら古いOpenJDKとNetBeansの組み合わせで起動を試みたブログ記事はわんさか出てくるので、この記事にどれほどの需要があるのかは分かりません。 とりあえず現時点(2021/10/30)の最新版で動作した、という参考情報として、この記事を心に留めておいていただけると幸いです。

    おまけ

    私はJavaの専門ではなく、前職ではAPIを動かすためだけにJDKを入れていた程度の意識の低い素人エンジニアでした。 それゆえ当時は「ほーん、よく分からんけど変えなきゃいけないのね」程度にしか情報を把握しておらず、 Oracle JDKは(個人・開発目的利用も含めて)全て有償になる。だからOpenJDKに移行するのだ」と思い込んだままでした。 この機会に改めて正しい情報を知る機会ができたのは幸運だったなぁと思います。

    追記:unpack200問題(未解決)とJava SE 8の無償サポートについて(2021/11/2)

    下記の記事に従って日本語化プラグインを導入した後、試しにNetBeans Plugin PortalにあるC/C++プラグインのインストールを試みたところ、 "unpack200がありませんよ"と怒られました。 【Java】Apache NetBeans 12 をインストール、日本語化してみた | ドラブロ – let bygones be bygones –

    f:id:knt_eagle:20211103063232p:plain
    JDKのunpack200が見つかりませんよ、と怒られる
    unpack200はJDKに実装されているAPIの一つでしたが、Oracle JDKとOpenJDK共にRelease 14にて削除されたようです(JEP 367)。
    JEP 367: Remove the Pack200 Tools and API
    Removed APIs

    あれ、じゃあなんで職場PC環境では動いたんだと思って確認してみたら、BCL適用下の最新メジャーバージョンであるJava SE 8でした。
    Java SE 一般的なFAQ | Oracle 日本

    ん?Java SE 8って無償サポート期間過ぎてる...?と心配になってOracle社のJava SEの サポートロードマップ(下記サイト)を確認したところ、こんな注記がありました。
    Oracle Java SE Supportロードマップ | Oracle 日本

    Java SE 8は、過去のリリースとして公開アップデート・プロセスの終了を迎えました。 オラクルは今後も、 java.comで、個人ユーザー、開発ユーザー、およびその他のユーザーに、Java SE 8の無償の公開アップデートと自動アップデートを無期限に提供します。利用可能終了日を設定する場合は、オラクルがこのページおよびその他の通信チャネルで少なくとも18か月前に通知します。

    おおよかった...安心しました。
    ちなみにJava SE 8の有償サポート期限は、Premium Supportが2022年3月(あと半年弱!)、Extended Supportが2030年12月で、下記注釈の通り、Premium Supportの費用だけでExtended Supportも受けられるようです。

    *****2019年6月から2022年7月までの期間、Java SE 7に対するExtended Supportの追加費用は免除されます。Java SE 8の場合は、2022年3月から2030年12月までの期間はExtended Supportの追加費用が免除されます。この期間中、テクニカル・サポート・ポリシーのオラクル・テクニカル・サポート・レベルのセクションに記載されているExtended Supportが提供されます。

    一方で、前述のunpack200がない件については、最新のJDKの使用にこだわるならば何か回避策を考える必要がありそうですね...。

    Javaのライセンスについてここまで自力で調べたことが無かったので、疲れました...。 unpack200については後で考えることにしましょう。

    大いに参考にさせていただいたサイト・記事

    Java 11正式版がリリース、本バージョンから「Oracle JDK」のサポートは有償に:「OpenJDK」で無償の長期サポート提供は、現時点で期待薄(1/4 ページ) - ITmedia エンタープライズ

    Oracle、「Oracle JDK」を再び無料提供へ 本番環境でも利用可 - ITmedia NEWS

    「Java 有償化」で誤解する人になるべく分かりやすく説明するためのまとめ - Togetter

    なぜ「Javaが有償化する」と誤解されてしまうのか考えてみる - kazokmr's Blog

    「Oracle Java」のライセンスが変更 ~無償利用は個人での開発・テスト・デモ目的のみに - 窓の杜

    Introducing the Free Java License – Logico Inside

    JDK、Oracle JDK、OpenJDK、Java SEってなに? - Qiita

    【Java】Apache NetBeans 12 をインストール、日本語化してみた | ドラブロ – let bygones be bygones –

    JEP 367: Remove the Pack200 Tools and API

    Removed APIs

    Java SE 一般的なFAQ | Oracle 日本

    Oracle Java SE Supportロードマップ | Oracle 日本

OS自作入門(3日目-1):読書と再びアセンブリコードいじり

knt-eagle.hatenablog.com

↑の続き

環境

  1. OS: WIndows 10 Pro
  2. Memory(多分関係ない): 16GB
  3. Console: WIndows Subsystem for Linux (WSL)
  4. WSL上のLinux: Ubuntu 20.04.02 LTS
  5. NASM: 2.15.05
  6. VirtualBox: 6.1.18 r142142

今回やったこと

  1. 読書(OS自作入門)
    1. P48-53: キャリーフラグ、フロッピーのデータ構造、バッファアドレス
  2. ソースコード書き換え for nasm (project/03_day/harib00a/ipl.asm)

    1. RESBTIMESDBに変更
    2. 0x7dfe-$0x7dfe-($-$$)に変更

    (参考サイト様①: Ubuntu 18.04で30日OS自作入門をやりたい[1日目] - free(malloc(sizeof(MRM)));)

  3. Makefileでmake

     make img
    
  4. VirtualBoxで実行

    f:id:knt_eagle:20210204032048p:plain
    何も表示されない(これで正しいらしい)

  5. 読書(OS自作入門)とソースコード書き換えを並行

    1. 書き換え対象(書き換え内容は2.と同じ)

      i) project/03_day/harib00b/ipl.asm

      ii) project/03_day/harib00c/ipl.asm

      iii) project/03_day/harib00c/ipl.asm

  6. Makefileでmake

     make img
    
  7. VirtualBoxで実行

    f:id:knt_eagle:20210207220613p:plain
    harib00d/ipl.asmでmakeしたimgによる実行結果(画面出力は4.と同じ)

今日はここまで

その他

先駆者の方々のブログを見てみると、3日目が初学者にとって一番の難関らしい。挫折しないよう、焦らずのんびり取り組みたいところ。

OS自作入門(2日目):読書とアセンブリコードいじり

knt-eagle.hatenablog.com

↑の続き

環境

  1. OS: Windows 10 Pro
  2. Memory(多分関係ない): 16GB
  3. Console: Windows PowerShell 5.1.18362.1171
  4. WSL上のLinux(手順7でのみ使用): Ubuntu 20.04.01 LTS
  5. NASM: 2.15.05
  6. VirtualBox: 6.1.18 r142142

今回やったこと

  1. 読書(OS自作入門):

    1. P29-42:アセンブラの関数、レジスタ、メモリの説明
  2. ソースコード書き換え for nasm (project/02_day/helloos3/helloos.nas)

    1. RESBTIMESDBに変更
    2. 0x7dfe-$0x7dfe-($-$$)に変更

    (参考サイト様①:Ubuntu 18.04で「30日でできる!OS自作入門」をやりたい[2日目] - free(malloc(sizeof(MRM)));)

  3. nasmでアセンブル

     nasm helloos.nas -o helloos.img
    
  4. VirtualBoxで実行

    f:id:knt_eagle:20210126014545p:plain
    実は表示する文字列を少し変えてみた

    上手くいってしまったが、参考①筆者の方によるUbuntu+qemuエミュレーションでは、2.bの変更部分にて、0x7dfe-($-$$)が0で埋めたいブートセクタのバイト数(=510)に一致しなかったためにエラーが出たみたいだ。こちらの方法でエラーが出なかった理由は分からないが、確実に510バイト指定をしていることを保証するため、参考①の方法に従って、TIMES 0x7dfe-0x7c00-($-$$)に変えておくことにした。

  5. VirtualBoxで再実行

    f:id:knt_eagle:20210126014545p:plain
    動作自体は先程と変わらず

  6. Makefile作ってみた

    (参考サイト様②:Linuxで書くOS自作入門 2日目 - Tsurugidake's diary)

     default:
         make img
    
     ipl.bin: ipl.asm Makefile
         nasm ipl.asm -o ipl.bin -l ipl.lst
    
     tail.bin:   tail.asm Makefile
         nasm tail.asm -o tail.bin -l tail.lst
    
     helloos.img:    ipl.bin tail.bin Makefile
         cat ipl.bin tail.bin > helloos.img
    
     asm:
         make -r ipl.bin
    
     img:
         make -r helloos.img
    
     clean:
         -rm ipl.bin
         -rm tail.bin
         -rm ipl.lst
         -rm tail.lst
    
     src_only:
         make clean
         rm helloos.img
    
  7. Makeした(ここだけWSL上の操作)

     make img
    
  8. VirtualBoxで実k(ry

    f:id:knt_eagle:20210126014545p:plain
    動作自体は先程と変わらず(2回目)

今後の開発環境についての小言

手っ取り早く勉強を始められると思ってPowerShell+VirtualBoxで開発を進めていたが、ググって出てくる環境のほとんどがLinux(+qemu)+VirtualBoxなので、今後進めにくくなるかもしれない。あえてPowerShellで進めてぶち当たった問題と解決策をこのブログで共有していくのはありかもしれないが、WSLでUbuntu動かせるのに、そんな需要あるのだろうか...?

OS自作入門(1日目):NASMインストール~VirtualBoxでHelloOS動かすまでにしたこと

※今回まではThinkpadノートPC

  1. NASMインストール:https://www.nasm.us/
  2. helloos.asmを作成:
    30日でできる!OS自作入門(1日目)[Ubuntu16.04/NASM] - Qiita
  3. nasmでアセンブル
    nasm helloos.asm -o helloosfrmasm.img

  4. VirtualBoxで起動

    f:id:knt_eagle:20210111031410p:plain
    hello worldが表示されたの図