Bugs in the E 0.8.7 Distribution on Java2 and WinNT/2000

Mark S. Miller markm@caplet.com
Mon, 24 Jan 2000 18:43:07 -0800


Yesterday, Henry Boreen tested the E 0.8.7 binary distribution for Windows 
using both WinNT & Win2000, and using both Javasoft's Java-1.1 and Java-2.  
Thanks!  His testing revealed six urgent bugs that I am currently in the 
process of fixing.  In the meantime, I'm posting these explanations and 
work-arounds, so no one will get stuck, and so I can get some feedback 
before deploying the fixes I describe.

(As I write this note, I just got email from Mark Shepard with more NT 
installation testing results.  I'll review that before my next email.  
Thanks Mark!)


Bug 1: The Slasher

The installer's default location for the install directory is "C:/Program 
Files/erights.org/".  Unfortunately, another part of the installer assumes 
that this directory name does not end in a slash, so it proceeds to append 
"/bin/jars/..." forming directory names with double slashes.  If you 
encounter this bug, you will see an error-window that shows a path with a 
double slash in it.

Work-around: When the installer (the Setup.exe program) presents the 
proposed installation settings, if the proposed install directory ends in a 
slash, say "n" when it asks you "ok?".  When it then asks for the 
installation directory, retype the name without the terminal slash.  You may 
safely accept all the other defaults, except for "Command Dir" -- see bug #2 
below.

Status: This bug occurs under all versions of Windows.  Fixed in two ways 
in the unreleased next version of the installer: 1) All of the installer's 
directory name handling is now tolerant of names that end in a slash or not.
2) The default install directory path no longer end in a slash.


Bug 2: A Command Performance?  Not.

Prior to Henry's testing, E 0.8.7 had only been tested on Win98.  The Win98 
PATH includes both "C:/Windows/Command" and "C:/Windows/System".  Since I want 
e.exe to be on the user's PATH, I copy it in one of these two, and in the 
corresponding directory on WinNT/Win2000.  Unfortunately, I guessed wrong.  
On Win2000 at least, C:/WinNT/Command is not on the PATH.

Work-around: As explained in the bug#1 workaround, say "n" when the 
installer asks "ok?".  When it asks for a "Command Dir", if you're on 
Win2000/WinNT and you see "C:/WinNT/Command", don't accept this default, but 
type in instead "C:/WinNT/System32".  If you see "C:/Windows/Command", then 
you are probably running Win98 or Win95.  While it's safe to accept this 
default, you will be better prepared for the next release if you enter 
"C:/Windows/System".

Status: This bug occurs under Win2000 and perhaps WinNT.  In the next 
unreleased version of the installer, this is fixed by copying e.exe into the 
"System" directory according to the Windows API GetSystemDirectory() 
function.  Under Win98 this is "C:/Windows/System".  Under Win2000/WinNT, 
this is expected to be "C:/WinNT/System32", but we haven't yet tested this.


Bug 3: I Need My Coffee

Like many of us, E cannot wake up without its coffee.  When Henry started
installing, his machine did not have a Java installed that E knew how to 
use.  (Henry did reasonably object "But I've got Microsoft Java installed, 
it comes with Internet Explorer."  The download pages need to make clear 
that E does not work with Microsoft Java.)

Unfortunately, the E install does not currently check whether there is a 
usable Java or not.  Instead, the install succeeds silently, but then both 
the "e" and "elmer" programs die with a mysterious error, something along 
the lines of "Exit code: -1".  Needless to say, most users will not be able 
to diagnose the problem from this!  By installing a Javasoft Java, the 
problem goes away.  Testing by Terry Stanley reveals that the Java runtime 
as installed by Symantec's Visual Cafe is also perfectly acceptable to e and 
elmer.

Work-around: Install a Java Runtime (or a JDK) from Javasoft.  Because of 
bug #6, install a Java-1.1.

Status: This bug occurs on all versions of Windows.  I haven't done anything 
to fix this yet.  I will be checking to see if there's either a "java.exe" or a 
"jre.exe" on the PATH.  This will also address bug #5 below.


Bug 4: Do You Swing?

E requires a swing library whose package prefix is "javax.swing" rather than 
"com.sun.java.swing".  I was surprised to find out that even the Javasoft 
1.1.8 runtime does not seem to come with such a swing already installed.  
There is a link on the E download page to a swingall.jar file you can 
download, and instructions on how to install it yourself.  However, if you 
don't have such a swing installed, the E install still seems to silently 
succeed, and then "elmer" dies an uninformative death.

Work-around: After installing E, download and install swingall.jar according 
to the instructions on the download page.

Status: This bug occurs in many (perhaps all) versions of Java-1.1.  I 
haven't done anything to fix this yet.  I plan to have "setup.exe" (which is 
written in C) end by executing the not-yet-written "welcome.e" which will be 
written in E.  Since this bug does not prevent E from working, an E program 
is the perfect place to stand to 1) diagnose this problem, and 2) offer to 
repair the problem by downloading swingall.jar from erights, and installing 
it where it needs to go.  This will also test whether E actually runs during 
the installer, allowing Setup.exe to complain if there's a further problem.


Bug 5: The Name of the Code

Javasoft seems to have done something so brain damaged that, despite their 
history, I can hardly believe it.  Unless I am confused (quite possible), it 
seems the Java-1.1 runtime for Windows installs a Java launcher on your PATH 
named "jre.exe", while the Java-2 runtime for Windows installs on your PATH 
a "java.exe" and a "javaw.exe".  Java-1.1 does not install a synonymous 
java.exe, and Java-2 does not install a synonymous jre.exe.  Therefore, 
there's no one name I can assume will work in either configuration.  Not 
anticipating this problem, the E 0.8.7 e.exe command has hard-coded into it 
the name "jre", which breaks under Javasoft's Java-2.

Work-around: Make a copy of your Java launcher named "jre.exe" and put it on 
your PATH.  For example, If you've installed Javasoft's Java-2 on WinNT, you 
will have a "java.exe" in your "C:/WinNT/System32" directory.  Make a copy 
of this file named "jre.exe" and put it in the same directory.

Status: This bug occurs at least in Javasoft's Java-2.  In the unreleased 
next version of the installer, I've added an install option for the name of 
the Java command, and I've extended e.exe to accept a new command-line 
option: "--javacmd <cmd>".  What still needs to be done: check at install 
time whether the user has a "java.exe", "jre.exe", both, or neither on their 
PATH.  If only one, and if it's not the one e.exe uses by default, generate 
the e.lnk and elmer.lnk shortcuts to use the --javacmd to specify the name.  
Alternatively, have the e.exe command always figure this out on each launch, 
or have the installer write a registry entry which e.exe reads.  The 
advantage of the latter two approaches is that "e" command still works 
without extra command line garbage.

If neither are defined, then the installer can address bug #3, and inform 
the user he has no java.  If both are found, things are a bit tricky.  From 
experimenting on my Win98 machine, if you install both Javasoft's Java-1.1 
and Java-2, you will end up with both files on your path.  However, only one 
will work -- the one more recently installed.  Fortunately, there's a 
registry entry which I can read to determine which one I can expect to work. 
Unfortunately, this approach isn't compatible with non-Javasoft 
distributions like Cafe's, which are otherwise perfectly compatible with E.  
Therefore, if both exist on the PATH, I will make the user choose one.


Bug 6:  Too Much Yaccing

To be covered in the next message.  This bug is currently fatal for the use 
of Javasoft's Java-2.  The only known work-around is to use a Java-1.1.  
More later.


         Cheers,
         --MarkM