<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div><div>Hi!</div><div><br></div><div>I'm writing an InfoQ news item about this JEP and contacted some folks for feedback. One person <span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">viewed the JEP more as recommendations than a strictly defined process and </span>told me that, based on my explanation, Spring Boot may not fully do "Tip & Tail". Another person wasn't sure whether "Tip & Tail" required tip releases to pick the latest JDK as their baseline.</div><div><br></div><div>Please tell me whether my <span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">interpretation of </span>"Tip & Tail" and how Spring Boot fits is correct. And do the authors see the JEP as a strictly defined process or as recommendations? Thank you! </div><div><br></div><div><br></div><div>I depicted some Spring Boot releases as the JEP does. It's too wide for text in an email, so I attached the picture. I uploaded it, too: <a href="https://app.screencast.com/p1YIaYwkSBuft">https://app.screencast.com/p1YIaYwkSBuft</a></div><div><br></div><div><img alt="Spring Boot Tip and Tail.png" src="cid:250F7507-86EB-4CBC-AC2B-494C1F57FFAB"></div><div><br></div><div><br></div><div><p style="margin: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; line-height: normal; font-size-adjust: none; font-kerning: auto; font-variant-alternates: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; font-variant-emoji: normal; font-feature-settings: normal; font-optical-sizing: auto; font-variation-settings: normal;"><span style="font-kerning: none"><b>REQUIRED</b></span></p><p style="margin: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; line-height: normal; font-size-adjust: none; font-kerning: auto; font-variant-alternates: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; font-variant-emoji: normal; font-feature-settings: normal; font-optical-sizing: auto; font-variation-settings: normal;"><span style="font-kerning: none"><b><br></b></span></p></div><div>1. New functionality <b>only</b> appears on the <b>one</b> tip release train</div><div> - YES: Only 3.2, 3.3, and 3.4 add new features every six months...</div><div> - …though unsupported releases (typically three milestone builds plus a release candidate, shown above) add nearly all those features</div><div><br></div><div>2. "From time to time", tip releases start a tail train</div><div> - YES: every tip release creates a tail train (tails 3-5 in the picture)</div><div><br></div><div>3. <span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">"backport as little as possible": </span>Tail trains <b>only</b> get "critical bug fixes and security patches", though "there may be exceptions"</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"> - YES: Tail releases only get bug fixes, documentation updates, and dependency updates...</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"> - …though tail releases now add two Java versions to an <font face="Courier New">enum</font> during their one-year existence, which is classified as a new feature (e.g., 3.2.4: <a href="https://github.com/spring-projects/spring-boot/releases/tag/v3.2.4">https://github.com/spring-projects/spring-boot/releases/tag/v3.2.4</a> and 3.2.9: <a href="https://github.com/spring-projects/spring-boot/releases/tag/v3.2.9">https://github.com/spring-projects/spring-boot/releases/tag/v3.2.9</a>)</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><br></div><div>4. Developers "continue update [tail train] even after new tip releases are made"</div><div> - YES: Tail train for version X is updated for one year <span style="font-size: 11px;">- </span>until tip release X+2 appears (3.0 until 3.2, 3.1 until 3.3, and 3.2 until 3.4 in the picture above)…</div><div> - …except for the last tail release in a generation, which is maintained for 1.5 years (see the 2.7.x tail train here, not pictured above: <a href="https://spring.io/projects/spring-boot#support">https://spring.io/projects/spring-boot#support</a>)</div><div><br></div><div>5. Developers "ensure that tail releases depend on the tail releases of other libraries, where available"</div><div> - YES: Spring Boo team tries to avoid dependency updates and picks tail releases where possible<span class="Apple-tab-span" style="white-space:pre"> </span></div><div><br></div><div>6. There can be multiple tail trains</div><div> - YES: There are usually two at any time</div><div><br></div><div>I think Spring Boot <b>does</b> "Tip & Tail", as described by the JEP, as it follows all required procedures.</div><div><br></div><div><br></div><div><p style="margin: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; line-height: normal; font-size-adjust: none; font-kerning: auto; font-variant-alternates: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; font-variant-emoji: normal; font-feature-settings: normal; font-optical-sizing: auto; font-variation-settings: normal;"><span style="font-kerning: none"><b>RECOMMENDED</b></span></p><p style="margin: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; line-height: normal; font-size-adjust: none; font-kerning: auto; font-variant-alternates: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; font-variant-emoji: normal; font-feature-settings: normal; font-optical-sizing: auto; font-variation-settings: normal;"><span style="font-kerning: none"><b><br></b></span></p></div><div>7. "In the tip train, baseline each tip release on the JDK version that best supports the library's new features and enhancements."</div><div> - NO: 3.2 supported Java 21 via a multi-release JAR, but the baseline was still 17 (<a href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes#support-for-virtual-threads">https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes#support-for-virtual-threads</a>)</div><div><br></div><div>8. "In a tail train, keep the JDK baseline as constant as possible over the life of the train."</div><div> - YES: The JDK baseline only changes with a new Spring Framework Generation every few years</div><div><br></div><div></div><div>9. "It is not necessary to develop tip releases in lock step with the JDK's six-month tip releases."</div><div> - YES: Tip releases now appear two months after a new Java release and support features of that release</div><div><br></div><div>10. "It is typical to bump the JDK baseline of the tip train when the library needs new JDK features."</div><div> - NO: Baseline only changes with a new Spring Framework generation</div><div><br></div><div>11. "It is wise to baseline tail trains on JDK versions for which long-term support (LTS) offerings are available from reputable vendors."</div><div> - YES: All 3.x releases are based on Java 17</div><div><br></div><div><br></div><div><p style="margin: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; line-height: normal; font-size-adjust: none; font-kerning: auto; font-variant-alternates: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; font-variant-emoji: normal; font-feature-settings: normal; font-optical-sizing: auto; font-variation-settings: normal;"><span style="font-kerning: none"><b>NO OPINION</b></span></p><p style="margin: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; line-height: normal; font-size-adjust: none; font-kerning: auto; font-variant-alternates: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-position: normal; font-variant-emoji: normal; font-feature-settings: normal; font-optical-sizing: auto; font-variation-settings: normal;"><span style="font-kerning: none"><b><br></b></span></p></div><div>12. "when or why tail trains are created, nor when or why they are discontinued"</div><div> - Every tip release creates a tail train that lives for 12 months – or 18 months if it's the last one in a generation </div><div><br></div><div>13. <span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);">Release cycles:</span> time-boxed vs. driven by features or bug fixes</div></div><div> - Time-boxed except for out-of-band security fixes, such as 2.6.6 (<a href="https://github.com/spring-projects/spring-boot/releases/tag/v2.6.6">https://github.com/spring-projects/spring-boot/releases/tag/v2.6.6</a>) for CVE-2022-22965 (<a href="https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement">https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement</a>)</div><div><br></div><div>14. Library metadata, such as versioning number scheme</div><div> - The versioning scheme is MAJOR.MINOR.PATCH[-MODIFIER] (<a href="https://spring.io/blog/2020/04/30/updates-to-spring-versions#project-module-version-changes">https://spring.io/blog/2020/04/30/updates-to-spring-versions#project-module-version-changes</a>)</div><div><br></div><div><br></div><div><div><br></div><div>Regards,</div><div>Karsten Silz</div></div></body></html>