To this end, I decompressed src.zip from Java 1.5 on both Win32 and Linux, and did a recursive diff(1) of the two trees. Here is a complete list of the differences:
- First up is java.io.FileDescriptor, which I talked about already.
- There are the package-private classes UnixFileSystem, Win32FileSystem, and WinNTFileSystem, all implementations of the package-private FileSystem abstract class. This seems fine.
- There are various java.lang.CharacterDataX classes, generated by scripts during the build process. They contain comments showing that the builds were done at different times, and that the command-line arguments differed, but the classes themselves are identical. And anyway, these too are package-private.
- java.lang.ProcessEnvironment and java.lang.ProcessImpl differ, but again they're package-private classes. I'm not sure why they don't follow the UnixProcessEnvironment/Win32ProcessEnvironment pattern, though.
- java.lang.Terminator (again package-private) doesn't register a signal handler for SIGHUP on Win32. This is implemented by copying the class and removing a line rather than by run-time test.
- java.lang.UnixProcess isn't included in the Win32 src.zip.
- java.util.prefs contains different package-private classes on Unix and Win32.
It's not Java source, but there's also the launcher's java_md.c and java_md.h files ("_md" being Sun's convention for naming files containing machine-dependent source). And that's it.
So it's only java.io.FileDescriptor that seems dodgy. That's a relief.