New informational JEP: 14: The Tip & Tail Model of Library Development
Karsten Silz
karsten.silz at gmail.com
Mon Oct 21 19:02:23 UTC 2024
Hi!
I'm writing an InfoQ news item about this JEP and contacted some folks for feedback. One person viewed the JEP more as recommendations than a strictly defined process and 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.
Please tell me whether my interpretation of "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!
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: https://app.screencast.com/p1YIaYwkSBuft

REQUIRED
1. New functionality only appears on the one tip release train
- YES: Only 3.2, 3.3, and 3.4 add new features every six months...
- …though unsupported releases (typically three milestone builds plus a release candidate, shown above) add nearly all those features
2. "From time to time", tip releases start a tail train
- YES: every tip release creates a tail train (tails 3-5 in the picture)
3. "backport as little as possible": Tail trains only get "critical bug fixes and security patches", though "there may be exceptions"
- YES: Tail releases only get bug fixes, documentation updates, and dependency updates...
- …though tail releases now add two Java versions to an enum during their one-year existence, which is classified as a new feature (e.g., 3.2.4: https://github.com/spring-projects/spring-boot/releases/tag/v3.2.4 and 3.2.9: https://github.com/spring-projects/spring-boot/releases/tag/v3.2.9)
4. Developers "continue update [tail train] even after new tip releases are made"
- YES: Tail train for version X is updated for one year - 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)…
- …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: https://spring.io/projects/spring-boot#support)
5. Developers "ensure that tail releases depend on the tail releases of other libraries, where available"
- YES: Spring Boo team tries to avoid dependency updates and picks tail releases where possible
6. There can be multiple tail trains
- YES: There are usually two at any time
I think Spring Boot does "Tip & Tail", as described by the JEP, as it follows all required procedures.
RECOMMENDED
7. "In the tip train, baseline each tip release on the JDK version that best supports the library's new features and enhancements."
- NO: 3.2 supported Java 21 via a multi-release JAR, but the baseline was still 17 (https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes#support-for-virtual-threads)
8. "In a tail train, keep the JDK baseline as constant as possible over the life of the train."
- YES: The JDK baseline only changes with a new Spring Framework Generation every few years
9. "It is not necessary to develop tip releases in lock step with the JDK's six-month tip releases."
- YES: Tip releases now appear two months after a new Java release and support features of that release
10. "It is typical to bump the JDK baseline of the tip train when the library needs new JDK features."
- NO: Baseline only changes with a new Spring Framework generation
11. "It is wise to baseline tail trains on JDK versions for which long-term support (LTS) offerings are available from reputable vendors."
- YES: All 3.x releases are based on Java 17
NO OPINION
12. "when or why tail trains are created, nor when or why they are discontinued"
- Every tip release creates a tail train that lives for 12 months – or 18 months if it's the last one in a generation
13. Release cycles: time-boxed vs. driven by features or bug fixes
- Time-boxed except for out-of-band security fixes, such as 2.6.6 (https://github.com/spring-projects/spring-boot/releases/tag/v2.6.6) for CVE-2022-22965 (https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement)
14. Library metadata, such as versioning number scheme
- The versioning scheme is MAJOR.MINOR.PATCH[-MODIFIER] (https://spring.io/blog/2020/04/30/updates-to-spring-versions#project-module-version-changes)
Regards,
Karsten Silz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/jdk-dev/attachments/20241021/828e38b6/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Spring Boot Tip and Tail.png
Type: image/png
Size: 55138 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/jdk-dev/attachments/20241021/828e38b6/SpringBootTipandTail-0001.png>
More information about the jdk-dev
mailing list