We have a project here that uses GWT for all its web UI and is still 
running Java 1.8. The SAP JVM 8 will be supported at least until 2030. 
According to 
https://newrelic.com/resources/report/2022-state-of-java-ecosystem in April 
2022 still close to half of the projects (46%) were using Java 1.8. We have 
made some efforts to move to 11 and 17 and succeeded to the degree that we 
have the build pipelines running for those two new LTS versions using their 
respective JDKs to compile, have our Docker images ready and can run the 
solution with both these new Java LTS releases. But this took a few months, 
and I find it very likely that from the 46% of the projects not all have 
the resources to invest into the migration. If only half of them do, we're 
still at those ~25% that Colin already sampled from the responses on this 
thread who will continue to use 1.8 for some time to come.

Still, we're not yet decided on making the move. Even when using the 
sapmachine.io flavors of the new JDKs we will lose some beloved features we 
get from SAP JVM 8, among them a really neat profiler that integrates 
nicely with Eclipse, as well as reversible on-the-fly debugging. The only 
immediate incentive for a migration to 17 could be the performance 
improvements we measure (depending on the type of workload an average 
improvement by 10-20%), whereas language features or the new GCs (which 
frankly were a bit disappointing for our parallelizing workloads) are not 
in such high demand in our case.

Ironically, since we live off a fork of the GWT project to already 
incorporate two PRs we've made into our production, Java 1.8 is still 
required to run the GWT build...

The compatibility issues raised here are of course all very valid. Some 
things seem reasonably easy to deal with (see, e.g., 
https://github.com/gwtproject/gwt/pull/9791). Other cases, some of which 
discussed here, too, such as potentially giving up the classic DevMode in a 
future release, and removing support for old IE versions in the current 
2.10 release, may break existing projects for sure. The same applies for 
potential changes that don't deal "only" with bumping versions of 
dependencies but that try to improve aspects of GWT at the expense of what 
I would call minor compatibility glitches (see the discussion here: 
https://github.com/gwtproject/gwt/pull/9779).

With some of these things I find it a problem that GWT doesn't seem to have 
a clearly defined "set of contracts" based on which "backward 
compatibility" could be defined. There are, e.g., things that for technical 
reasons have been made "protected" in non-final classes or public in other 
classes that probably shouldn't count as part of the "GWT contract." Yet, 
with enough projects out there in the wild there may be a few that exploit 
exactly those elements and hence would break in case of changes in those 
areas. Disallowing any change in any of these areas, however, may box GWT 
in this compatibility trap forever. And having to postponse such changes to 
releases that will break massively in other areas and hence may cause 
disruption and lack of adoption for a fair share of GWT-based projects 
doesn't seem ideal to me, either.

Maybe we should take away from these challenges that it would be a good 
thing going forward to be more explicit abut which parts of GWT are 
contract and which ones are not; and those latter ones we then should be 
able to change incompatibly without worrying about adopters.
On Thursday, August 4, 2022 at 5:05:45 AM UTC+2 nilo...@gmail.com wrote:

>
>
> If there’s one thing that GWT has tried to be consistent about, it is 
> retaining support for technologies past their “best by” dates. This is a 
> sore point from time to time, as it makes the tooling feel dated even right 
> after a release, but it has some specific advantages with regards to 
> enabling projects that are otherwise in maintenance mode to still be able 
> to upgrade to a newer version. Similarly, GWT has traditionally only 
> supported the current release, with no fixes backported, due to the extra 
> work that would need to be done in testing, backporting, etc.
>
>
> To get stuck on a tangent before even reaching the point of this post, 
> this is part of the reason that each of the GWT modules which previously 
> lived in gwt-user.jar is getting its own git repo, and being released as 
> its own pace, separate from the GWT compiler and its neighbors (and also 
> separate from J2CL, with tests to ensure it can work with both toolkits). 
> Migrating to a specific version of one of those modules might require some 
> code changes be made to a project, but is intended to uncouple changes to 
> that project from changes made to either J2CL or GWT2 toolchains. 
>
> GWT 2.10 has been released, with a few important changes that border on 
> breaking - the groupId has changed from com.google.gwt to org.gwtproject, 
> Jetty was updated after languishing for years, and IE 8, 9, and 10 support 
> has been dropped. The Jetty change has caused a few minute hiccups, one of 
> which will probably result in a GWT 2.10.1 release, but otherwise things 
> seem to have gone well.
>
> Looking forward, we have some other decisions to make around deprecating 
> or dropping support for certain features or compatibility. The chief issue 
> is dropping support for Java 8. Jetty 9 is EOL (though still receiving 
> occasional security updates for now), and Jetty 10 requires Java 11 at a 
> minimum. Recent versions of the Eclipse JDT will also require Java 11, so 
> we can’t add support for Java 17 language features without dropping support 
> for running on Java 8. While it is possible that we might be able to 
> continue to compile gwt-servlet and other production server-side code for 
> Java 8, that is going to need dedicated testing to ensure it behaves as we 
> expect, so I wouldn’t want to have it be one of our first choices.
>
> We would be in good company with dropping Java 8 in our next release - the 
> Spring Framework has gone so far as to drop Java 11 support as well, 
> requiring Java 17 as the minimum supported Java version as of version 6 
> <https://spring.io/blog/2022/03/28/an-update-on-java-17-adoption>. 
>
> Other deprecations/updates/removals to consider - I haven’t spent a great 
> deal of time investigating any of these, but wanted to at least open the 
> door to some of these.
>
>
>    - Legacy Dev Mode - the use cases are diminishing but not totally gone 
>    yet. IE11 technically supports it, and HtmlUnit can use it as well. Some 
>    testing tools like gwt-mockito and Emma require it as well. With that 
> said, 
>    if removed, there is considerable old code that can go with it, not just 
> in 
>    the compiler and dev mode, but simplification that can happen in emulation 
>    as well.
>    - Selenium - Selenium support is ancient, and I’m not aware of a way 
>    to make it work with recent browsers. Moving to modern WebDriver would 
> make 
>    sense, though this is a bit of a moving target in my experience, but 
>    downstream projects should be able to update without affecting GWT. It 
>    might even make sense to leave this as an optional dependency, and rely on 
>    the downstream project adding its own implementation.
>    - javax.servlet -> jakarta.servlet - This could potentially be done in 
>    a way to support both APIs in a single release, though that may also 
>    require supporting two sets of dev mode implementations, for users that 
> run 
>    their own servlets in the dev mode server.
>
>
> Inevitably, removing these before they are formally end-of-life’d is bound 
> to inconvenience at least a few downstream developers, so this isn’t to be 
> taken lightly, nor done without some plan to continue to support critical 
> fixes. Some quick options, based on how much pushback we get on each:
>
>    - Keep all compatibility until the dependency in question is formally 
>    end-of-life’d. We’ll be waiting until something like 2026 to pick up the 
>    Java 17 support through JDT, though other options might be possible along 
>    the way.
>    - Be very aggressive in dropping support, such as Spring’s model, 
>    where the next release will only support Java 17+. This will undoubtedly 
>    cut off support for many projects far before they are ready to update.
>    - Let the main branch work towards updating some of these dependencies 
>    for a 2.11 release, and backport any fixes that don’t directly relate to 
>    upgrades to the release/2.10 branch. This would represent a shift in 
>    existing policy around releases, and might require more support from 
>    community members for testing and such. There is also the risk that 2.10 
>    could miss out on some fixes. As the “current version” of Java is going to 
>    keep on marching forward, likely 2.12 and so on would continue to be 
>    released, and 2.10 would remain the “LTS” version.
>    - Same as above, but let 2.11 become the LTS release (so as to give 
>    the project time to adapt to being moved to GitHub, and to get a 2.10.1 
> out 
>    to fix known regressions), and let 2.12+ feel comfortable dropping support 
>    for Java 8, etc.
>    - Same as above, but a more complex plan where more than one version 
>    is maintained long-term, to allow (for example) 2.11 to drop Java 8, 2.12 
>    to drop javax.servlet, 2.13 to drop Java 11 and so on. This could easily 
>    explode out of control with many backported fixes to manage and test.
>
>
> I don’t want to dwell too much yet on exactly what should be dropped and 
> when, at least until some initial conversation is had on generally handling 
> deprecations and potentially picking a potential strategy for keeping a 
> “LTS”-style release. Then, discuss community support needs for the various 
> dependencies in a broader audience, and make decisions from there.
>
> Thoughts on how to generally balance deprecations against updates?
>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Contributors" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/884d3e15-e75d-4b8b-b655-41101b8e46e5n%40googlegroups.com.

Reply via email to