RFR: JDK-8147795 Build system support for BSD

Magnus Ihse Bursie magnus.ihse.bursie at oracle.com
Wed Jan 20 21:17:16 UTC 2016

On 2016-01-20 13:06, David Holmes wrote:
> On 20/01/2016 9:15 PM, Alan Bateman wrote:
>> On 20/01/2016 10:54, Magnus Ihse Bursie wrote:
>>> During my spare time last autumn, and in the holidays, I've been
>>> playing around with the three major BSDs (FreeBSD, OpenBSD and
>>> NetBSD), trying to learn something new. (Yeah, I know, this proves
>>> that I have no life :-)).
>>> And what better way to learn an operating system than to try and build
>>> OpenJDK on it? :-) It quickly turned out that while there is a
>>> bsd-port/jdk9 forest, it is empty (that is, it's identical to
>>> jdk9/jdk9 with no BSD-specific patches in it). And building jdk8 is
>>> sooo 2014. :)
>>> So I started hacking around, focusing on improving issues in the build
>>> system that prevented the build to succeed. I also needed to fix
>>> issues in the source code (of course), but not as much as I'd
>>> expected. My total solution builds and runs (I've tested "javac
>>> HelloWorld.java") on the three BSDs, but some workarounds are needed,
>>> mostly likely due to incomplete fixes in the source code.
>>> The build changes turned out to also be an improvement for all
>>> platforms in some areas, and I'd like to integrate it into the
>>> mainline. While it is not enough in itself to build on BSD, it's a
>>> (necessary) step on the way. I'll post a second review later on for my
>>> source code changes, which still need some more cleanup to be
>>> presentable.
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8147795
>>> WebRev:
>>> http://cr.openjdk.java.net/~ihse/JDK-8147795-build-system-support-for-bsd/webrev.01 
>> Clearly some good work here but who is going to maintain this? For the
>> AIX port then the SAP engineers maintain the port and keeping it
>> working, it's not clear what will happen here. Also support for new
>> ports feels like it should have a JEP.
> My thoughts exactly. I was under the impression that what we had for 
> OSX already worked on some of the BSD's as we have had some patches in 
> the past from people building on that platform. But an attempt to 
> produce complete support for the various BSD's needs to come with some 
> level of support and commitment.

I think I need to elaborate a bit on my thinking here.

First of all, I agree that adding full support for a complete new port 
would, at the very least, require a JEP. This is not what I intended 
with this change. A reflection, though: If the requirement for such a 
port is that a company provides continuous testing and support, then I 
believe it's unlikely that any BSD port will ever reach the mainline, 
due to the community based nature of the BSD projects. (I'll leave aside 
the question if that is a reasonable requirement.)

We already have the BSD Port Project [1], sponsored by the Porters Group 
[2]. They maintain their own forests. For jdk8, the forest contains a 
number of patches for BSD. These have not been included upstream, for 
reasons I can only speculate in. For jdk9, as I wrote in my mail, the 
forest has been created but no BSD-specific patches has been submitted. 
 From my cursory inspection, the source code changes in bsd-port/jdk8 
could probably be moved to bsd-port/jdk9 with considerable less effort 
than the makefile changes.

It is my general impression that developers working with porting is good 
at fixing C/C++ changes that relate to the target platform of their 
port, but considerably less so in working with the makefile changes that 
might be needed. (That's not just about porting; developers in general 
are often more fluent and comfortable working in C/C++ than in makefiles 
or shell scripts.) My idea was to provide a sane basis in the build 
system, on top of which it is easier to create a full port. Note that 
I'm not *introducing* BSD support in the OpenJDK build system. We 
already have that, but only partially. I'm just filling in the holes.

Most of the changes in my patch relate to the configure script. The 
configure script is by it's very nature adapted to running in various 
environments, officially supported as well as other, common as well as 
rare. Much of the peculiarities of the BSDs from the configure scripts 
point of view, is not very different from e.g. the recent request to 
support freetype on OS X El Capitan.

I assumed that a bening change to the build system that does not affect 
any existing platforms, and which provides a good foundation for 
bringing the bsd-port to jdk9, would be a bit of a no-brainer to 
integrate. Even if it would break later on due to lack of continous 
testing, it's often a task of an order of magnitute simpler to fix a 
previously working code (even in Makefiles, and even to developers that 
are not fluent in make), than to add the initial code.

I've cc:ed the bsd-port mailing list in this discussion. Maybe someone 
from that group has anything to add?


[1] http://openjdk.java.net/projects/bsd-port/
[2] http://openjdk.java.net/groups/porters/

> David
> -----
>> Maybe I need to wait for the "source code webrev" but I could imagine
>> some refactoring needed to avoid duplication with OS X specific code.
>> Also when the Mac port was brought into OpenJDK then it came with a lot
>> of #ifdef _ALLBSD_SOURCE patches and a lot of inconsistencies. General
>> PITA when trying to move OS X specific patches forward and I know of
>> several areas where the BSD specific code was just dropped.
>> -Alan.

More information about the build-dev mailing list