kagamihogeの日記

kagamihogeの日記です。

JEP 336: Deprecate the Pack200 Tools and APIをテキトーに訳した

http://openjdk.java.net/jeps/336

JEP 336: Deprecate the Pack200 Tools and API

Author   Kumar Srinivasan
Owner   Henry Jen
Type    Feature
Scope   SE
Status  Closed/Delivered
Release 11
Component   tools
Discussion  jdk dash dev at openjdk dot java dot net
Effort  S
Duration    S
Reviewed by Alex Buckley, John Rose
Endorsed by John Rose
Created 2018/04/04 17:11
Updated 2018/10/12 00:50
Issue   8200752

Summary

pack200unpack200ツール、およびjava.util.jarPack200 APIを非推奨にします。

Motivation

Pack200はJARファイルの圧縮スキーマです。JSR 200によりJava SE 5.0にて導入されました。その目的は、"Javaアプリケーションのバッキング・送信・配布によるディスクと帯域の削減"、です。開発者はpack200unpack200のツールペアを使用し、JARファイルの圧縮展開を行います。APIjava.util.jarです。

Pack200の非推奨(最終的には削除)の理由は三つあります。

  1. 過去、56kモデムでJDKダウンロードが遅いことはJavaを使い始める際の障害となっていました。度重なるJDKの機能拡張でダウンロードサイズを肥大化させると、更なる障害となりました。Pack200でJDKを圧縮することは問題の緩和になりました。しかし、時が経ち、ダウンロード速度は改善し、JDK 9でJavaランタイム(JEP 220)とランタイムのビルドに使うモジュール(JMOD)用の新しい圧縮スキーマが導入されました。JDK 9以降はPack200に依存しません。よって、JDK 8は、ビルド時にpack200で圧縮してインストール時にunpack200で展開される、最後のリリースになります。つまり、Pack200の主要な使い手である、JDK自身が、必要としなくなりました。
  2. JDKの外の世界では、特にアプレットで、Pack200によるクライアントアプリケーションの圧縮は惹かれるものがありました。Oracleのブラウザプラグインなど、ある種のデプロイメント方法は自動的にアプレットのJARを展開します。しかし、クライアントアプリケーションの世界は変わり、大半のブラウザはプラグインサポートを止めています。そういう訳で、Pack200の使い手の主要クラスである、ブラウザ上のアプレットが、JDKでPack200を持つ理由にはならなくなりました。
  3. Pack200は複雑で緻密な技術です。ファイルフォーマットクラスファイルフォーマットJARファイルフォーマットに密結合しており、どちらもJSR 200では予期しない方向へと進化しました。(例えば、JEP 309はクラスファイルフォーマットにconstant pool entryの新しい種類を追加し、JEP 238はJARファイルフォーマットにversioning metadataを追加しました。)JDKの実装はJavaとネイティブコードに分かれており、メンテナンスは困難です。java.util.jar.Pack200APIJava SE Platformのモジュール化(modularization)にとって有害になったため、Java SE 9での4つの削除メソッドとなりました。つまり、Pack200のメンテナンスコストが極めて高くなり、Java SEとJDKにこれを含める利点を上回っています。

Description

java.baseモジュールの三つの型を非推奨にし、@Deprecated(forRemoval=true)を付与します。

  • java.util.jar.Pack200
  • java.util.jar.Pack200.Packer
  • java.util.jar.Pack200.Unpacker

pack200unpack200ツールを含むjdk.packモジュールも同様に非推奨にします。

pack200unpack200を実行するとツール削除を予定している旨の警告を表示します。jar -cをサブオプションnnormalize the archive)で実行するとサブオプション削除を予定している旨の警告を表示します。全三つのツールのドキュメントには非推奨化と削除予定を記述します。

型とモジュールの実際の削除はこれとは別のJEPを提出し、将来のJDK feature releaseで行います。

Risks and Assumptions

アプリケーションJARの縮小にpack200を使う開発者はjlinkに移行する、と想定しています。jlinkは最適化されたフォームファクタ(optimized form factor)でアプリケーション固有のランタイムを作成するツールです。tool documentationJEP 282を参照してください。別の選択肢としてjpackagerもありえます。(draft JEP