Hi Neale,
I see you've been busy with quite a few pull requests and really digging into the build part of Lombok. That's some of the trickier parts of our codebase, so I appreciate the effort!
I'm going to be the bearer of bad news here, for you. For the community, the point'd be that it's good news:
> Support only non-LTS releases since the last LTS. i.e. at the moment we'd support JDK 26 and JDK 27-ea
> Drop support before JDK 17.
Why? Support for a release is a matter of costs vs benefits. How much of a benefit is it to the community that we support, say, JDK24, versus how much of a burden is it to us to maintain it?
I submit that the benefit is somewhat limited. 24 is not an LTS release; surely anybody still using 24 should be moving on to 25. But it's not zero. At conferences we tend to poll the version of JDK that folks are using out in the wild and you'd be surprised /horrified as to the answers. That benefit is significant, and we don't want to throw out support for older versions lightly.
The cost is about as near to zero as can be, though. At least, to us. I have the feeling (given that you haven't explained much) that you just stared at the lombok build process, got confused (understandably so!) and just decided to take out a bazooka and shoot down anything that might possibly introduce any sort of complexity. You threw in 'lets just kill all support for non-LTS release prior to LTS, because, why not), based mostly on a 'benefits' analysis.
If I'm missing something as to how the costs to lombok maintenance are reduced by e.g. killing JDK24 support, I'd love to hear it.
At this juncture, cleaning up our build processes by getting rid of support for java1.6 and java1.7 is a lot more acceptable. I think we still draw the line at java8 support (based on those polls we do at conferences), though. That has to stay, barring a really good argument about how it reduces costs.
Perhaps we could document things a little better though. We do not intend to go out of our way to explicitly deny support for e.g. JDK24, however, we also more or less officially don't really 'care' much about it either - for example, we don't run all whole test suite against every java release from 6 on up - we skip most of the older non-LTS releases, only restoring a test if we get a bug report (which, fortunately, essentially never happens, which goes back to: The cost of 'supporting' these older versions seems really low, so, why get rid of it?)
> Migrate the build to Gradle
I was out running yesterday and stubbed my toe.
I propose we paint the house red.
Hey, I did something, right?
My point is: This is a nonsensical move. You're going to have the explain the benefit. But I can guess: "Because nobody knows how ant works anymore". You've completely missed the forest for the trees: Lombok's build is nothing like other projects. Even if we do this lombok 2.0 move you're talking about and ditch support for older versions, we would still have to run our tests against multiple separate JDKs, we would still have to compile different parts of lombok with different compilers, we would still need all sorts of crazy stub solutions. At best, we clean it allll up to just JDK25 and up and end up at a nice 'clean' maven build that doesn't do all these things... and then we'd have to put back all the stuff we painstakingly removed the next time whomever works on javac at OpenJDK sees a black cat and decides to break the javac internals. Which they are allowed to do; it's private API.
The point is: The lombok build is complicated. And sometimes it rains. The thing to do with both of those facts is to find your zen and accept them. There is no fixing this.
If we moved the build to another system, that build would be just as convoluted and would involve us first using the base build tool to compile a plugin for that build tool (or probably a number of them!) and then compiling lombok, at which point it'd be just as complicated as our current ant build.
Separately: It'd be maven. Or maybe even something like mill. Definitely not gradle.
> Allow use of all modern IDEs
There is no particular reason that the current lombok build wouldn't be able to be adopted to modern IDEs. Hence I take this in the spirit of 'if we do this lombok 2.0 thing then you get support in all IDEs for free'. And that'd be a false claim, see above.
If you want to hack on lombok in some IDE somebody has to put in the effort to make it work due to the inherent complexities. We write it in eclipse, so this is one of those 'itch scratch' situations. If you want to contribute an ant job that sets up e.g. support in intellij, go for it. We'll accept it with the caveat that it'll last as long as you support it.
We even had work-on-lombok-in-intellij support for a while a long time ago (`ant intellij`) - but insofar that those tasks still exist, they should be removed, we don't maintain those at all anymore, for the obvious reason (we don't need it, and we have plenty to do that has higher priority).
Separately I detect a certain disdain in your use of this phrase. Are you insinuating eclipse isn't modern? So what is modern? I don't like these insinuations. You're free to crap on tools, but please be clear about it instead of forcing me to try to read your intentions. Eclipse is the language server for VSCode, so if we define 'modern' by date-of-release, we support the most modern IDE, hence, the need to be clear about what you really mean with such claims.
> Allow the use of modern APIs within the JDK
There are no APIs within the JDK we are particularly interested in, other than the basics of, say, `List.of`. The benefit of having access to these is limited. I do see a point of moving our support forward to 1.8, but there's (to us, anyway) no clear case here: The benefit of being able to use, say, stream gatherers does not outweigh the cost of dropping support for older versions of java, given that the community isn't always on the latest version.
> Provide a foundation for support around notable language changes coming such as value types and explicit nullability.
The magic monkey you speak of must be some JVM feature that would allow for significant performance gains, but which cannot be accessed unless using very recent versions of the lang spec. So far no such monkies have ever existed, but if one ever will, yeah, value types might well be it. However, our biggest 'heap mem load' lies in our AST mirror and I don't think we'd want to replace those with value objects even if was available.
> I propose that future contributions can be made notably simpler via a Lombok 2.0 release
Our cost/benefit analysis is probably different than yours. We are much more familiar with lombok's code base and its build stack than you are (and as old fogies we have lived through java 1.6 and still remember how to write for it, perhaps), hence, the benefit side of the equation is considerably less for us.
But, and I do not mean to offend, simply to be clear: Our (Roel and my) opinion is more important than your opinion. Our responsibilities exceeds yours in regards to maintaining lombok, hence, it's more important we feel comfortable with the code base than you do. I'm keeping a tally of how much lombok's wonky build and support for very old stuff scares away would-be contributors. I'd love for that to go away, but my fear is that it's not as simple as throwing in the towel and declaring it's time for 'lombok 2.0' - the core factors that led to lombok's complex build are still there and would mean the fate of lombok 2.0 is the exact same. For us, the cost/benefit analysis is that we do not want to do this 2.0 thing.