Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17


Patch for OpenJDK6 on BSD

Published on
6,690 Points
1 Endorsement
Last Modified:
Hello fellow BSD lovers,
I've created a patch process for patching openjdk6 for BSD (FreeBSD specifically), although I tried to keep all BSD versions in mind when creating my patch.

Welcome to OpenJDK6 on BSD

First let me start with a little background on why I choose to port openjdk6, and then I'll discuss the process I took to do it.  I work for Experts Exchange recently we decided to move from Linux to FreeBSD.  This decision came after a comprehensive test involving Linux, FreeBSD, and Solaris 10.  FreeBSD blew the others away doubling the performance of Linux and outperforming Solaris 10 by a significant margin as well.  We have come across several issues with the port java/jdk16, including lack of jmap functionality to track down memory errors and instability running the CMS garbage collector with a heap over 2G.  I created the a patch to bring jmap functionality to java/jdk16.  My next task was to begin hardening the VM, however it hardly makes sense to work on java/jdk16, because it's missing lots of bugs fixes from sun.  openjdk7 looked like the next choice to try and I compiled it up and gave it a try, however a third party library/software I was using didn't work and upon talking with terracotta developers they had no plans to support openjdk7 in the future.  I researched what exactly openjdk6 was and decided to give it a try.

How did I perform the Port

I started by duplicating jdk6 to bsd-port6.  Then I take the difference between jdk7 and bsd-port and import them.  I had trouble using patch -Nu jdk7 bsd-port because there were new files that contained long lines that patch complained about.  I whipped up a quick perl script to compare the directories and create the jdk7_bsd_changes_20090126.newfiles and jdk7_bsd_changes_20090126.patches directories.  Any file the was brand new to bsd-port was copied into jdk7_bsd_changes_20090126.newfiles to avoid the patch issue with long lines.  jdk7_bsd_changes_20090126.patches contains a separate patch for each file the was changed between jdk7 and bsd-port.  Not all of these patches applied cleanly so I then went through about 40 .rej files and applied the patches by hand, keeping track of the changes.  When compiling I released the build structure had changed between jdk6 and jdk7 and bsd-port6/hotspot/make/bsd/ had to be moved to bsd-port6/hotspot/build/bsd.  Makefiles also had to be patched to complete the change.  custom-patches contains these patches.

AMMENDMENT: I have modified the process described above as per suggested.  Instead of just copying a new file from bsd-port if they didn't exist in jdk7, I now reverse engineer the original process of porting from jdk7 to bsd-port, by taking the linux equivalents from jdk6 as a base, and apply the differences from the linux jdk7 version and the bsd-port version to it.  This wasn't terribly easy and lots of hand patching was required.  The upside is patch 0.1.0 produced a build envirnment that was mix between jdk7 and jdk6 build, and was hard to debug as a result.  From version 0.2.0 and on this patch will simulate the jdk6 build process.   Also version 0.2.0 should be completely jdk6 compatible.

Applying the patch.
*) run import_patch.pl
   - download jdk6 using mercurial to _jdk6
   - dupicate _jdk6 to bsd-port6
   - apply jdk7-bsd-changes-20090126
   - apply custom-patches
*) now compile, I've included a build_bsd-port6.sh script that I use to start compiling

jdk/src/share/bin/java.c - was hand patched, however I wasn't able to test compiling on Mac OS X, and I worry it won't compile

Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Join & Write a Comment

Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.
Suggested Courses
Next Article:

Keep in touch with Experts Exchange

Tech news and trends delivered to your inbox every month