powertools-lambda-java
powertools-lambda-java copied to clipboard
RFC: Remove support for Java 8 in V2
Removing support of Java 8 in V2
Date: November 20, 2023 Status: Draft
Abstract
In this RFC I propose the deprecation of Java 8 support in Powertools for Lambda (Java) starting from version 2 ( #1522 ). Maintaining support for Java 8 has imposed significant resource requirements on the team and limited our ability to focus on new features. While this deprecation is not expected to happen immediately, I am seeking feedback from the community to ensure this is the right path forward with the library.
Background
With the release of Java 21 and the ongoing advancements in the Java ecosystem, supporting Java 8 has become increasingly burdensome.
- Complex Weaving Setup: Differences in aspect-oriented library support between Java 8 and subsequent versions have become a recurring complication. Powertools must continue to support both the old AspectJ codehaus plugin from 2021 and current AspectJ and prevents us from using newer features in the library.
- Friction Adding new Tooling Examples: Adding Gradle and Kotlin examples needed to take into account the same issues with the AspectJ libraries, increasing frustration of new contributors. For now, we build Kotlin and Gradle against Java 8 only because it was too difficult to get them to work generically across this and the other runtimes.
- Complex Third Party Library Support: Mockito has dropped support for Java 8 and we have to support both old and new versions increasing the complexity of the build environment and limiting our ability to use newer library features; this will only affect more of our dependencies going forward. Many other popular third party Java libraries have dropped support for Java 8 - Spring Boot 3 (Java 17), Mockito (Java 11). Additionally Kafka 4.0, Flink 2.0, Hadoop, and Spark 4.0 have all dropped Java 8 support.
This has lead to concrete issues for our users:
- Increased Friction Getting Started - The weaving configuration complexity impacts the clarity of the examples and the documentation which must special-case Java 8. It also means that Powertools must continue to support both the old AspectJ codehaus plugin from 2021 and current AspectJ. This leads to user confusion and bugs (e.g. #1401, #1342, #1156 ) .
- Incomplete Tooling Examples - In order to use Gradle or Kotlin examples with a newer version of the JDK some customization is needed on top of the included code. We have decided everything must support our lowest common runtime, which in this case complicates the newer runtimes, and again, adds friction for new users of the library.
- Decreased Feature Velocity - Time spent maintaining backwards compatibility detracts from time spent working on new features, such as achieving parity with the Python version of Powertools and improving performance. For example, we have been accumulating work for the v2 release - a focus of the project - since February 2022 - and have not yet got to RC status.
Java 8 was officially released on March 18, 2014, and will be deprecated by the end of 2030. Java8 on AL1 Lambda Runtime will be deprecated end of 2023. Java has continued to evolve since with each new version bringing performance improvements, language enhancements, and better tooling. Developers can benefit from these advancements by moving to a more recent version of Java.
While some organizations may still rely on this older version, it is important for Powertools for Lambda (Java) to align with the evolving Java landscape to maintain efficiency and support for new features.
Proposal
Deprecation Timeline
I propose that Powertools for AWS Lambda (Java) v2 will drop support for Java 8. We expect to release v2 in Q1 2024. With v2 launched, we will deprecate v1 and support critical security updates & bug fixes for 6 months. We will target new features and enhancements to existing utilities to v2 only.
Continued Support for Java 8 in Powertools for Lambda (Java) Version 1
To ensure a smooth transition for our users, we commit to continuing support for Java 8 in Powertools for Lambda (Java) version 1 for one year after the release of version 2. During this period, we will provide bug fixes and critical security updates, but no new features or enhancements specific to Java 8 will be introduced.
Implementation Plan
To execute this proposal effectively, we will follow these steps:
- Develop and release Powertools for Lambda (Java) version 2, which includes the necessary deprecation notices and update guide.
- Provide critical security updates for Java 8 support for a minimum period of 6 months after the release of version 2.
- Communicate the timeline and implications of the deprecation through official channels, including documentation, release notes, and community forums.
- Gather feedback from users and address any concerns or issues raised during the deprecation process.
- Continuously monitor the adoption of newer Java versions among our user base.
Open Questions
- Are there any specific concerns or considerations from the community regarding the deprecation of Java 8 support?
- Are there critical use cases or reasons for maintaining Java 8 support that we may have overlooked?
- How can we assist users in migrating their existing projects from Java 8 to a more recent Java version?
Conclusion
The deprecation of Java 8 support in Powertools for Lambda (Java) is a strategic decision aimed at improving resource allocation, staying current with Java advancements, and enhancing the overall quality of the library. We believe that this change will benefit our users in the long run, but we are committed to listening to the community's feedback and addressing any concerns throughout the deprecation process.