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がリリースされますように。