JavaSE8のリリースが半年ほど遅れるかもしれない件
ラムダ式、メソッド参照、デフォルト実装、ターゲット型推論の強化や型アノテーションと言った大幅な言語的な増強やStreamAPIなどのライブラリ面での増強が行われるJavaSE8は2013年9月頃のリリースを目指していました。
ですが、いくつかの特性が1月末に予定していたFeature Completeに間に合わず現在も開発が進められていて、大幅に遅れが発生しておりリリースが半年ほど遅れる可能性が示唆されました。
1回目の遅延
当初のスケジュールでは次のようなマイルストーンになっていました。(重要な部分だけを抜き出しています)*1
M6 2013/01/31 Feature Complete M7 2013/02/21 Developer Preview 2013/03/18 All Tests Run 2013/04/04 Rampdown start 2013/05/02 API/Interface Freeze 2013/05/16 Zero Bug Bounce 2013/06/13 Rampdown phase 2 M8 2013/07/05 Final Release Candidate GA 2013/09/09 General Availability
このように1月末にすべての機能の開発完了を予定していました。ですがラムダ式や型アノテーションにまつわる重要な機能がこの日までに開発を完了することができませんでした。
開発が完了しなかったJEPは次のとおりです。
JEP 101 Generalized Target-Type Inference 104 Annotations on Java Types 107 Bulk Data Operations for Collections 109 Enhance Core Libraries with Lambda 115 AEAD CipherSuites 118 Access to Parameter Names at Runtime 119 javax.lang.model Implementation Backed by Core Reflection 120 Repeating Annotations 123 Configurable Secure Random-Number Generation 126 Lambda Expressions & Virtual Extension Methods 140 Limited doPrivileged 155 Concurrency Updates 161 Compact Profiles 162 Prepare for Modularization 171 Fence Intrinsics 174 Nashorn JavaScript Engine
そこで急遽2月21日に予定されていたDeveloper PreviewにFeature Completeを合わせ、その日までにこれらの機能の開発を完了するようにスケジュールが変更されました。
この変更の思惑通りに行けば最終的なリリース日に変更は出なかったでしょう。
2回目の遅延
ですが、たった21日程度でこれらの機能の開発が完了するはずもなく2回目の遅延が発生しました。
2月20日にJDK8のメーリングリストに「JDK 8 M6 status, and extending M7」と題して投稿されたメールでは次のように分析しています。*2
The language and VM work for Lambda has already been integrated, but at least another six weeks are needed to refine the stream API and finish the related core-libraries enhancements (JEPs 107 and 109). ラムダ式についての言語とVMの機能は既に統合されていますが、 StreamAPIを洗練し関連するコアライブラリの増強を終了する(JEP 107, 109)には少なくとも更に6週間は必要です。
The other M7 JEPs are not release drivers, so in theory they could be dropped from the release, but if Project Lambda needs more time then there's no point in doing that. 他のM7のJEPはリリースドライバではないので、セオリーでは最終的なリリースから除外することも可能でしょうが、 ProjectLambdaが多くの時間を必要とするならばそのようなことをする利点はありません。
この時はスケジュールに大幅な変更が出ることが示唆されただけで具体的なマイルストーンの提示はありませんでした。
そして4月18日にJDK8のメーリングリストにMarkReinholdさんが新しいスケジュールを提案しました。*3
それは以下のようなスケジュールです
2013/05/09 M7 Feature Complete 2013/07/18 Rampdown start 2013/09/05 M8 Developer Preview 2013/09/12 All Tests Run 2013/10/10 API/Interface Freeze 2013/10/24 Zero Bug Bounce 2013/11/21 Rampdown phase 2 2014/01/23 M9 Final Release Candidate 2014/03/18 GA General Availability
5月9日までにすべての機能の開発を終了するように変更され、最終的なリリースはおよそ半年遅れる結果になってしまいました。
なぜ開発が大幅に遅れたのかやなぜこのようなスケジュールを提案したのかなどについてのより詳細な情報はMarkReinholdさんが書かれたブログを参考にしてください。
http://mreinhold.org/blog/secure-the-train
日本語訳はこちらです。
http://orablogs-jp.blogspot.jp/2013/04/java-8-secure-train.html
上記ブログの要点としては以下のとおりです。
遅れた理由
開発が遅れた理由の1つはセキュリティ問題への対応にある。
当然のことながらセキュリティ問題への対応が最優先事項であったのでJavaSE8の開発よりもそれが優先され開発者がJavaSE8に携わる時間が少なくなったため。
現状
現状遅れていて最も重要なものがStreamAPIやラムダ式にまつわるコアライブラリの開発及び策定である。
予定より三ヶ月遅れており5月までには開発や策定が完了するであろう。
代替案
1. 当初の予定を守るためにLambdaをそぎ落とす
Lambdaが無いとJavaSE8の魅力が半減する。
2016年ごろの次のリリースまでLambdaが使えず、開発者はそれまで待てないであろう。
これらから×
2. Lambdaは残すが、他のテストなどのスケジュールを切り詰めて当初の予定を守る
品質に問題が発生する可能性がある。
特に言語仕様やAPI仕様は簡単に変えられないので根本的な欠陥があった場合はJavaにとって大きな問題になる。
新しい言語機能やAPIで置き換わるまで欠陥のある言語機能やAPIを使い続けなければならない可能性がある。
これらから×
3. 一年以上送らせてJavaSE8から漏れたJigsawも取り込みリリースする
Lambdaはほとんど完成して一年以上遅らせるのは得策ではない。
Jigsawの主要メンバがセキュリティ問題に多くの時間を費やしているため、Jigsawを完成させるためには一年以上必要になる。
これらから×
提案
・Lambdaが完成まで待って、テスト等を徹底的に行いリリースする
5月上旬までに開発が終われば夏ごろにはテストを開始しDeveloper Previewを提供できる
詳細なGAの日を決定するにはさらなる検討が必要だが2014年4月までには準備ができるだろう。
3ヶ月以上遅れているので11月(当初のGAの予定の9月の3ヶ月後)に準備ができるとは思えない。
他にも年末にリリースを行うのは得策でないと考える理由がある。
2年リリースについて
Javaは2年リリースを守ろうとしている。
リリース日を守って主要な機能が直近のリリースに間に合わなくても次のリリースに含めれば何ら問題ない。(直近のリリースは残念なものになるが・・・)
このポリシーは良いと考えているがLambdaを削ぎ落とすのは皆が望んでいるかというと疑わしい。
なのでこのポリシーには例外があっても良いと考えている。
セキュリティ問題落ち着けばJavaSE9からは再び2年リリースを行えるだろう。
もし提案しているスケジュールが採用されたらJavaSE8は2014年、JavaSE9は2016年にリリースできるだろう。
以上がブログの簡単なまとめです。
より詳細な情報は上記ブログを読んでください。
また提案しているスケジュールについての意見や他の提案も募集しているので意見や提案がある人は上記ブログかJDK8のMLにメールを送ってみてはいかがでしょうか。
無事JavaSE8がリリースされますように。