What should the relationship between ports and developers of large projects be?

Alan Bateman Alan.Bateman at oracle.com
Mon May 30 09:05:19 UTC 2022


We have discussed ports, the suggestion of a "Maintainers" file to list 
the owners of ports and features, and also putting ports into tiers at a 
number of OpenJDK Committers' Workshops. As I recall, it was just 
discussion and there wasn't any proposals to decide or vote on. It's 
been a few years and there are a few additional ports added to the 
OpenJDK project with JEPs. These JEPs have/had owners so there is at 
least a starting point there. As we've seen from the replies, there are 
also a few ports that are maintained in downstream repos. In the early 
days of OpenJDK, the Porters Group was created to help create porting 
projects. The porters-dev mailing list still exists and maybe that is 
another starting point.

As regards JEP 425. I agree with your comment that monster features like 
this should try to integrate early in a release. A big change will 
usually result in a few surprises and follow-up issues to address after 
their initial integration. In this case, we had really hoped to have it 
integrated much earlier but it wasn't to be. These big integrations 
aren't easy to do, esp. with a moving target that is the main line and 
the constant merging and rework to keep the code working and tests 
passing. It's also impossible to know how long the code review and the 
PR for such a feature might take.

You mentioned not noticing the significance of JEP 425 being a preview 
feature and that preview features are not optional. That's a good 
discussion topic as I think several people were surprised by this.  
Every feature release since Java 14 has had preview features but it's 
been preview language features that didn't have a big impact on the 
runtime. Sealed classes and records required some support in the runtime 
when in preview but it wasn't anything that required porting work. JEP 
424 and JEP 425 are the first preview APIs to include big changes to the 
runtime and require porting work to platforms beyond x64 and aarch64. 
It's okay for a port to sit out a release but it might not be necessary 
for 19. For JEP 424, an implementation of the native Linker is optional 
as Maurizio mentioned. For JEP 425 we hope to integrate a non-scalable 
implementation of virtual threads that ports can use in the interim.

So what can we do better? I don't disagree that communication could have 
been better in this case. We did send a heads-up to porters-dev, as you 
noted, but there could have been more communication before the JEP was 
proposed to target and a reminder that preview features are not 
optional. This goes both ways too. If a port is actively maintained then 
it would be helpful to start before the code is final and before the 
feature integrates. I don't know how practical it would to have a "ready 
for porting" milestone in some projects, maybe it would but more likely 
it would be dealing with at least some code shimmer right up to integration.

Thomas Stüfe's suggestion to run a few online meetings with maybe 
design/code walk though is good idea. If we had JVMLS then there would 
have been recorded sessions and probably a few in-person meetings too. 
Thomas also brings up the suggestion to split up large patches into 
smaller chunks. We did try in this case but it was weighted more on the 
libraries side where it was possible to integrate a lot preparatory 
changes and 3 JEPs in advance of the main event. We didn't identify 
significant chunks for the hotspot code that could have integrated in 
advance, maybe we should have tried harder there. With Project Jigsaw 
(JDK 9) we were able to split the project into 3 big 
integrations/milestones and >1000 bite size pieces to prepare the code 
base but we didn't have anything like this here.

-Alan.


More information about the jdk-dev mailing list