2005-11-22

Solaris 10

I've been using Solaris 10 for a while now, and feel in a better position to comment on it than I was when I wrote my earlier post about my Ultra 20.

Home-Use Installation Weaknesses
As I mentioned in my Ultra 20 post, I wasn't asked for a machine name during installation. I assumed that hostname(1) was what I'd use to permanently set the hostname, but it isn't. As explained here, I needed to echo the name to /etc/nodename to change my machine's name from "unknown". I guess they don't expect many home users. Or they expect home users with a DNS server. Apple do this right for the stand-alone user. (My Solaris admin friend points out that Apple don't necessarily do what you want if you've got a laptop that sometimes joins a DHCP network and you end up editing /etc/hostconfig to ignore any DHCP-provided name.)

A few days later, I noticed that the machine's time was about six minutes out. I can't remember the last time I saw a computer give such bad time, and it turned out to be because NTP isn't enabled by default. Crazy. I copied the configuration from http://ntp.isc.org/bin/view/Servers/NTPPoolServers and ran "svcadm enable network/ntp" as root and the clock was fixed. This is stupid, though. Sun should have public NTP servers, and Solaris should default to using them. Apple do this right.

Command-line Utilities
Solaris still has a bunch of weird versions of familiar utilities, such as its odd version of ping(1). Even its netstat(1) looks different. Root's shell isn't bash(1), which has been the least worst choice since rc(1) faded away. Many utilities only support POSIX options, so if your scripts are using GNU long options, you might have to change them. Worse, you'll find you've gotten used to a lot of GNU extensions to various commands. GNU tar(1)'s ability to handle .tgz files being an obvious example. Things like sudo(1) and top(1) that you take for granted on other systems just aren't there on Solaris, even in idiosyncratic form. Things like firefox(1) and g++(1) are installed but hidden away in a directory that isn't on the default path. And while g++(1) is present, gdb(1) isn't.

Blastwave will help with this kind of thing, but it's still more conservative than I'd be: you'll end up with "gtar" and the like in /usr/csw/bin for those commands that aren't actually missing in Solaris.

Blastwave's Ruby doesn't work (a shared library problem I mailed the package maintainer about, but received no reply about). Also, there's no locate(1) package. This is ironic because, as my Solaris sys admin friend says, it's hard to think of an operating system that needs locate(1) more.

Apple mostly do this right, though there's still a lot of non-GNU cruft, and a lot of GNU stuff can get quite out of date with Apple's slow release cycles.

Java
Sun has a weird directory structure under /usr/java/ that isn't entirely obvious, and doesn't seem to be documented. This is silly when Sun makes it so easy to have parallel versions of Java and just choose your preferred one with $PATH. Apple do this right, even if they do lag far behind, and still haven't made 1.5.0 the default.

Java Desktop System (a.k.a. GNOME)
I complained in the Ultra 20 post about the stupid "[ English/European ]" windows attached to all the Java windows on my display. Presumably because I chose a UTF-8 locale. I don't understand why I can turn this off for non-Java applications, and still don't have a work-around. I have submitted a bug report, though. (And it made it to being Sun 6336941 which was closed as a duplicate of an earlier bug with a terrible title that I defy anyone to have found. If you care about UTF-8 and a decent desktop experience, reading the Sun engineer's evaluation of that bug will make you angry, so either don't, or go vote for it to be fixed rather than ignored.) Apple do this right.

Evolution is better than last time I used it, but still pretty unusable if you're talking to a high-latency remote IMAP server. This particular version seems to have a bug that causes it to crash if you double-click to select text in the preview pane. I gave up on Evolution after a week, in part because it's excruciatingly painful to use over a high-latency link because of the apparent absence of local message caching, and in part because its behavior with modern RFC-compliant mail is nothing short of idiotic. It's all very well not breaking lines when quoting text, but you can't present them to the user unwrapped. That's just unusable. Not supporting CSS makes much of the mail I receive unreadable too. Thunderbird does a much better job of all of these things, and in general. Since the much newer version of Evolution I can get on Linux from Debian unstable also sucks badly, I'm not holding my breath for a usable Evolution any time soon. The main problem I have with Thunderbird (other than it not looking like a GNOME application, which seems a churlish complaint given that Ethereal, which looks like it fell from a dog's arse and as if about as much effort went into its design as you'd expect a dog to put into its pavement art, is the only GNOME application worth running) is that it doesn't cope well with problems talking to the server. Mac OS 10.3's Mail (but not earlier or later versions) is the only mailer I've had that seemed to cope seamlessly with with retrying connections; 10.4's Mail is the second best.

There's some clunky old version of Mozilla installed, but Blastwave has a reasonably up-to-date Firefox. Annoyingly, if you install both Blastwave Firefox and Thunderbird, hyperlinks in the latter don't open in the former. Worse, they don't open at all, and you're left using copy & paste, and starting a copy of Firefox from the shell. I'll point no finger here, though, because this could be just about anybody's fault. But half a finger gets pointed in Sun's direction for shipping a web browser and mailer so bad that you're forced to install third-party alternatives to get any work done.

Leaving "GNOME Performance Meter" running for a few days seemed to do very bad things to Xorg, causing it to use 100% CPU. At least, that's what I assumed when killing Performance Meter returned performance to normal. Having had Xorg behave badly a couple of other times (though I've not run Performance Meter since, because it wasn't exactly impressive anyway), I'm not so sure. It's surprisingly easy to make the X server appear responsible for soaking up CPU time by having a Java application cause unnecessary redraws. This is also true on Linux. I should get round to learning dtrace(1), which ought to help distinguish real Xorg problems from fake ones. Apple's "Activity Monitor" is light years ahead of anything else; the next nearest is, believe it or not, Sysinternals' ProcessExplorer for Win32 (the main thing lacking is the one-click profiling which is Activity Monitor's best feature).

"Software Update"
I was initially disappointed that there didn't seem to be anything akin to Mac OS' Software Update. My friend the Solaris sys admin told me to run "smpatch analyze" and "smpatch update" from single-user mode. When I finally got round to that, it turned out to install Software Update's ugly sister, Sun(TM) Update Manager. It works, but it looks like My First Swing Application. It makes no attempt to fit in with the GNOME desktop (doesn't even use Java 5's rather weak GTK+ look and feel), is rather insanely garish, and displays plenty of bad habits such as blocking the event dispatch thread. My personal favorite is the way that the JTextArea in the about box isn't in a JScrollPane, but the text contains too many lines to fit. But who cares? No-one reads French anyway, and the English fits just fine.

The date is shown in ISO order, but not ISO format (so "2005/10/19" rather than "2005-10-19"), and references to Sun bug ids aren't linked to the bug database. (I assume the Solaris bug database is available on-line like the Java one, though I've never seen it.)

I wish the Blastwave packages were incorporated with Sun Update Manager. Given how important Blastwave seems to be to getting a useful Solaris system, it's a pity Sun don't let them share this.

One interesting difference between Mac OS and Solaris here is that Sun trickles out tiny updates on an almost daily basis. Rather than wait months for Mac OS 10.4.4, which breaks as much stuff as it fixes, you get, say, a patch to sort(1) available one day and a patch to Xsun(1) the next, and a DHCP daemon patch the day after that. I rather like this.

Sun's system, though, is broken. How the hell do I restart Solaris 10 in a way that will cause it to finish installing updates it's got marked for installation next restart? When I ran the smanalyze/smpatch commands the first time, I guessed reboot. That installed a GUI tool that -- the first time i used it -- explained that "reboot" wasn't sufficient to install updates and would I like it to restart the system. Yes, I would, but I'd also like you to (a) tell me how you're going to do it in case I ever need to do it manually and (b) fix reboot(1). I've given up on the GUI which continues to list various updates as requiring a reboot and have fallen back to the command-line, which thinks otherwise. Nice.

Apple does this right. I'd not been impressed with Software Update.app (the GUI) or softwareupdate(1) before, because I'd not been exposed to a broken equivalent. Solaris, though, has shown me that there are any number of ways Apple could have fucked things up, but didn't.

This has been by far the biggest annoyance, because I was expecting to have to keep the Mac as my desktop machine anyway. What I wasn't expecting was for basic system administration to be so unnecessarily difficult. See also NTP. That's a checkbox (to enable or disable) and a combo box (to choose a local server) on Mac OS. Since I registered my machine, Sun keep mailing me "opportunities" to "take advantage of Sun's special Solaris 10 training offer [sic] and support options". But really I just want them to fuck off and fix it. I'll pay them USD120/year, as I do Apple, but I want to see that they understand that for those of us not running centers, clusters, or farms, we want less administration, less need for training, and less need for support. I have better things to do with my time than maintain computers, even if that only translates to posting more crap to my blog.

(As an aside, I was amused that the penultimate mail I received on this subject was entitled "Last chance: Solaris 10 training and support offers", and other than a specific offer to trade in my Dell servers, is identical to the one I received two days later, which in turn is identical to the one I received 18 days previously. Presumably they have a cron job entitled "see if they've noticed that Solaris is a big fat pain in the ass yet" sending these things out.)

DVDs
Put a DVD (I chose "The Big Lebowski") in the Ultra 20, and you'll see it auto-mounted and an icon appear on the desktop. But there's no obvious way to play the DVD. There's a "Movie Player" application, but that claims not to be able to find any DVD. Apple does this right.

I thought I'd try ripping the DVD and playing the mp4, and I'd heard of ffmpeg, and saw that although it's not part of Solaris, it's available from Blastwave. But I checked out the documentation while it was downloading and realized it's far more complicated than I can be bothered with. HandBrake on Mac OS does this right.

Ejecting a DVD when the device is in use is as feedback-free a frustration as on most operating systems. Only not only does Solaris/GNOME not tell you which application is the problem, it doesn't tell you there's a problem. It just doesn't eject the DVD, no matter how many times you choose "Eject" from the menu.

Digital Cameras
Digital camera next. I plugged it in to one of the USB slots in the Apple keyboard I have connected to the Sun. An icon appears that looks like some kind of removable media (which is actually one up on Mac OS, which just uses its generic pessary-like "storage" icon with the slightly obscene slot in the front, as it does for my iPod and for the .dmg of anything I install). Double-clicking the icon lets me see the pictures. There's no obvious way to get to anything like iPhoto, though. Back on the "Launch" menu there's an application called "Digital Camera Browser", but that fails to recognize that there's a camera attached. Apple does this right.

iPod
Plugging my iPod into one of the USB slots in the keyboard has no effect. Apple does this right.

Instant Messaging
GAIM is no Adium, but it's okay. If I hadn't known that Adium was built on libgaim, though, I don't think I'd have persevered enough to work out that I can use GAIM for non-AIM accounts. The GAIM people should think seriously about just ripping off Adium's interface wholesale. (Apart from the ridiculously over-complicated preferences, which no sane person would ever need.) I've never used Apple's iChat because it doesn't support MSN.

Summary
Solaris blows. It really does. If all you want is a fast build machine to run Java on, it's fine. The Ultra 20 is a nice piece of hardware, and Solaris doesn't seem to get in its way much. CPU-intensive and I/O-intensive stuff is way quicker than on my dual G5 2.5GHz. But don't expect to want to use Solaris as your desktop. It's barely functional even for the stuff a developer does, let alone the kind of stuff real people would want to do.

You want your mail, your music, your photos, or your DVDs? Hard luck.

You want decent integrated address books, calendars, or RSS readers? Hard luck.

You want a great web browser? Install one yourself and forget about anything that requires plug-ins (there's unsurprisingly little available for Solaris/x86_64), or hard luck.

You want something that comes set up with sensible defaults and requires hardly any administration, most of which consists of no more than clicking "Install" or "Restart"? Hard luck.

Where by "hard luck" I mean "buy a Mac". I know I've been down on Apple lately because 10.4 was a bigger disappointment than I was expecting (the only "feature" that interested me was support for Java 1.5.0, and I've barely got that), but this shouldn't be allowed to obscure the fact that it's still light years (and years) ahead of all the competition.

If it were no more complicated than inserting a DVD and power-cycling, I'd be installing Linux on my Ultra 20 right about now.

2005-11-15

Submitting a HotSpot VM error

I've never read the boilerplate on Sun's "Re: (Incident Review ID..." mails before. I've always replied to requests for more information assuming that there was some point to doing so.

I recently submitted the following bug report:

dateCreated: Sun Oct 23 20:22:03 MDT 2005
type: bug
cust_name: Elliott Hughes
status: Waiting
category: hotspot
subcategory: runtime_system
release: 5.0
hardware: sparcv9
OSversion: solaris_10
priority: 4
synopsis: HotSpot VM error in xiiimp.so.2
description: FULL PRODUCT VERSION :
See hs_pid output.

FULL OS VERSION :
SunOS helium 5.10 Generic_118844-19 i86pc i386 i86pc


A DESCRIPTION OF THE PROBLEM :
I don't remember this crash, but I just found a core dump and an hs_pid file.

THE PROBLEM WAS REPRODUCIBLE WITH -Xint FLAG: Did not try

THE PROBLEM WAS REPRODUCIBLE WITH -server FLAG: Did not try

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
I ran the Sun(TM) Update Manager.

ERROR MESSAGES/STACK TRACES THAT OCCUR :
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# SIGSEGV (0xb) at pc=0xed9868f2, pid=7756, tid=11
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_01-b08 mixed mode)
# Problematic frame:
# C [xiiimp.so.2+0x68f2]
#

--------------- T H R E A D ---------------

Current thread (0x08884a38): JavaThread "AWT-Motif" daemon [_thread_in_native, id=11]

siginfo:si_signo=11, si_errno=0, si_code=1, si_addr=0x00000024

Registers:
EAX=0x00000014, EBX=0x00008000, ECX=0x08d90438, EDX=0xed90b970
ESP=0xed90b930, EBP=0xed90b930, ESI=0x08c492d8, EDI=0x0000000c
EIP=0xed9868f2, EFLAGS=0x00010206

Top of Stack: (sp=0xed90b930)
0xed90b930: ed90b954 edbedf86 085e8f00 03e0006c
0xed90b940: ed90b970 08d90438 08884af4 edf31500
0xed90b950: edf2e000 ed90ba40 eded3cea ed90b970
0xed90b960: 00000000 08884af4 00000007 edf2e000
0xed90b970: 0000000c 00000512 00000000 085e8f00
0xed90b980: 03e0006c 00000000 00000000 000000b4
0xed90b990: 00000017 00000000 36373931 5c3b302d
0xed90b9a0: 2020200a 20202020 75732d20 6f672d6e

Instructions: (pc=0xed9868f2)
0xed9868e2: 55 8b ec 8b 4d 14 8b 81 08 01 00 00 85 c0 74 0e
0xed9868f2: 83 78 10 00 74 08 6a 00 51 e8 76 01 00 00 b8 01

Stack: [0xed8cc000,0xed90c000), sp=0xed90b930, free space=254k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [xiiimp.so.2+0x68f2]
C [libX11.so.4+0x2df86] XFilterEvent+0x72
C [libmawt.so+0x13cea]
C [libmawt.so+0x136d6]
C [libmawt.so+0x13574] Java_sun_awt_motif_MToolkit_run+0x34
j sun.awt.motif.MToolkit.run()V+0
j java.lang.Thread.run()V+11
v ~StubRoutines::call_stub
V [libjvm.so+0xa71e7]
V [libjvm.so+0xa7054]
V [libjvm.so+0xa7038]
V [libjvm.so+0xb38ae]
V [libjvm.so+0xb37dd]
V [libjvm.so+0xb3750]
V [libjvm.so+0xb3651]
V [libjvm.so+0xb35e8]
V [libjvm.so+0xa5af2]
C [libc.so.1+0x9f525]
C [libc.so.1+0x9f810]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j sun.awt.motif.MToolkit.run()V+0
j java.lang.Thread.run()V+11
v ~StubRoutines::call_stub

--------------- P R O C E S S ---------------

Java Threads: ( => current thread )
0x08a724d8 JavaThread "AWT-EventQueue-0" [_thread_blocked, id=13]
0x088bcc90 JavaThread "Image Fetcher 0" daemon [_thread_blocked, id=12]
=>0x08884a38 JavaThread "AWT-Motif" daemon [_thread_in_native, id=11]
0x08884560 JavaThread "AWT-Shutdown" [_thread_blocked, id=10]
0x085e9738 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=9]
0x081462c8 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=7]
0x08143930 JavaThread "CompilerThread0" daemon [_thread_blocked, id=6]
0x08142c78 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=5]
0x08137208 JavaThread "Finalizer" daemon [_thread_blocked, id=4]
0x08136660 JavaThread "Reference Handler" daemon [_thread_blocked, id=3]
0x08072dd8 JavaThread "main" [_thread_blocked, id=1]

Other Threads:
0x08133e18 VMThread [id=2]
0x08160c78 WatcherThread [id=8]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
def new generation total 576K, used 407K [0xef200000, 0xef2a0000, 0xef6e0000)
eden space 512K, 67% used [0xef200000, 0xef255cc8, 0xef280000)
from space 64K, 100% used [0xef280000, 0xef290000, 0xef290000)
to space 64K, 0% used [0xef290000, 0xef290000, 0xef2a0000)
tenured generation total 1408K, used 1071K [0xef6e0000, 0xef840000, 0xf3200000)
the space 1408K, 76% used [0xef6e0000, 0xef7ebd38, 0xef7ebe00, 0xef840000)
compacting perm gen total 8192K, used 6670K [0xf3200000, 0xf3a00000, 0xf7200000)
the space 8192K, 81% used [0xf3200000, 0xf3883ba8, 0xf3883c00, 0xf3a00000)
No shared spaces configured.

Dynamic libraries:
0x08050000 /usr/jdk/instances/jdk1.5.0/bin/java
0xfefc0000 /lib/libthread.so.1
0xfefd0000 /lib/libdl.so.1
0xfeec0000 /lib/libc.so.1
0xfea00000 /usr/jdk/instances/jdk1.5.0/jre/lib/i386/client/libjvm.so
0xfee90000 /lib/libsocket.so.1
0xfeeb0000 /usr/lib/libsched.so.1
0xfee40000 /usr/lib/libCrun.so.1
0xfee20000 /lib/libm.so.1
0xfe970000 /lib/libnsl.so.1
0xfedb0000 /lib/libm.so.2
0xfe940000 /lib/libscf.so.1
0xfed90000 /lib/libdoor.so.1
0xfe910000 /lib/libuutil.so.1
0xfe8f0000 /lib/libmd5.so.1
0xfe8d0000 /lib/libmp.so.2
0xfe8a0000 /usr/jdk/instances/jdk1.5.0/jre/lib/i386/native_threads/libhpi.so
0xfe850000 /usr/jdk/instances/jdk1.5.0/jre/lib/i386/libverify.so
0xfe3c0000 /usr/jdk/instances/jdk1.5.0/jre/lib/i386/libjava.so
0xfe810000 /usr/jdk/instances/jdk1.5.0/jre/lib/i386/libzip.so
0xeee00000 /usr/lib/locale/en_US.UTF-8/en_US.UTF-8.so.3
0xfbb60000 /usr/lib/locale/en_US.UTF-8/methods_en_US.UTF-8.so.3
0xee8f0000 /usr/jdk/instances/jdk1.5.0/jre/lib/i386/libnet.so
0xee8d0000 /usr/jdk/instances/jdk1.5.0/jre/lib/i386/libnio.so
0xee8a0000 /lib/librt.so.1
0xee880000 /lib/libaio.so.1
0xee860000 /usr/lib/libsendfile.so.1
0xee370000 /usr/jdk/instances/jdk1.5.0/jre/lib/i386/libawt.so
0xedf40000 /usr/jdk/instances/jdk1.5.0/jre/lib/i386/libmlib_image.so
0xedec0000 /usr/jdk/instances/jdk1.5.0/jre/lib/i386/motif21/libmawt.so
0xedce0000 /usr/dt/lib/libXm.so.4
0xee350000 /usr/openwin/lib/libXp.so.1
0xedc80000 /usr/openwin/lib/libXt.so.4
0xedc50000 /usr/openwin/lib/libXext.so.0
0xee330000 /usr/openwin/lib/libXtst.so.1
0xedbc0000 /usr/openwin/lib/libX11.so.4
0xedb40000 /usr/jdk/instances/jdk1.5.0/jre/lib/i386/libfontmanager.so
0xedb10000 /usr/openwin/lib/libSM.so.6
0xedaf0000 /usr/openwin/lib/libICE.so.6
0xeda80000 /usr/openwin/lib/locale/common/xlcUTF-8.so.2
0xeda60000 /usr/openwin/lib/locale/common/xomLTRTTB.so.2
0xeda40000 /usr/lib/liblayout.so.1
0xed9c0000 /usr/lib/locale/en_US.UTF-8/LO_LTYPE/en_US.UTF-8.layout.so.1
0xed980000 /usr/openwin/lib/locale/common/xiiimp.so.2
0xed960000 /usr/lib/iconv/UTF-16%UTF-8.so
0xed5c0000 /usr/lib/iconv/UTF-8%UTF-16.so
0xed5a0000 /usr/lib/im/locale/th_TH/aux.so
0xed580000 /usr/lib/im/locale/ko_KR/aux.so
0xed560000 /usr/lib/im/locale/zh_CN/aux.so
0xed530000 /usr/lib/im/locale/zh_TW/aux.so
0xed510000 /usr/lib/im/locale/ja/atokserver/atok12aux.so
0xed4e0000 /lib/libelf.so.1
0xed4c0000 /usr/lib/im/locale/zh_HK/aux.so
0xed490000 /usr/lib/iconv/UTF-8%UTF-32.so
0xed470000 /usr/lib/iconv/UTF-32%UTF-8.so

VM Arguments:
java_command: /usr/lib/patch/swupdate.jar

Environment Variables:
PATH=/usr/bin:/usr/openwin/bin:/usr/ucb
LD_LIBRARY_PATH=/usr/jdk/instances/jdk1.5.0/jre/lib/i386/client:/usr/jdk/instances/jdk1.5.0/jre/lib/i386:/usr/jdk/instances/jdk1.5.0/jre/../lib/i386:/usr/lib/breg:/usr/lib/dc
SHELL=/bin/bash
DISPLAY=:0


--------------- S Y S T E M ---------------

OS: Solaris 10 3/05 s10_74L2a X86
Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
Use is subject to license terms.
Assembled 22 January 2005

uname:SunOS 5.10 Generic_118844-08 i86pc (T2 libthread)
rlimit: STACK 10240k, CORE infinity, NOFILE 65536, AS infinity
load average:0.18 0.11 0.09

CPU:total 1 family 47, cmov, cx8, fxsr, mmx, sse, sse2

Memory: 4k page, physical 1048124k(383596k free)

vm_info: Java HotSpot(TM) Client VM (1.5.0_01-b08) for solaris-x86, built on Dec 6 2004 20:59:13 by unknown with unknown Workshop:0x550



REPRODUCIBILITY :
This bug can be reproduced rarely.

And received this reply:

Hi Elliott Hughes,

Thank you for this report.

We need more information to create a new Bug. In addition to
the information already given, please provide the following
details so that we can reproduce the problem ourselves:

- Complete source code of an executable test case.
To focus the investigation on what really matters, please make the
test as small as possible.
- Exact steps to run the test case.
- Expected behavior and actual behavior, including the exact text of
any output from the test case.
- Additional configuration information that may be relevant.

I was annoyed by this.

I realize that the Solaris and Java teams are separate but you'd imagine that "java_command: /usr/lib/patch/swupdate.jar" and the fact that the crash was on Solaris would have created a suspicion this might be a problem in all-Sun code.

You'd also imagine that "java_command: /usr/lib/patch/swupdate.jar" tells you how to run the test case.

You'd also imagine that a VM crash makes the "expected behavior" versus "actual behavior" question quite clear.

You'd also imagine that if I knew what "additional configuration information ... may be relevant", I'd have included it already. I mentioned that I had a core dump, but no interest was expressed in that.

But what really annoyed me was this:

We recently released J2SE 5.0 Update 5 with many bug fixes and
enhancements. Consider downloading a free copy at
http://java.sun.com/j2se/1.5.0/ and checking if the problem persists.

I experienced the crash on a fully-patched Solaris 10 system. I'd manually installed 1.5.0_05 (and various 1.6.0 builds too), but Sun doesn't try to keep my Solaris machine's Java installation up to date. And I'm not in control of what JVM Sun use to run their program when I click on their icon on the GNOME panel in their "Java Desktop System".

When I finally finish my post on my Solaris 10 experiences, I'll have a lot more to say about swupdate.jar's pathetic excuse for an automatic software update system.

I thought I couldn't get more annoyed by this "we're not even going to pass a VM crash to anyone with a clue", but I was wrong. I hadn't read the penultimate paragraph:

Since the report is likely to change significantly, please re-submit
this bug report at http://bugs.sun.com/bugdatabase/index.jsp.

It turns out that this means "we will ignore this report, and we will ignore any reply you might make".

Thank you for your help.

Sarcastic bastards.

At least Sun 6315773: Generate consumer friendly jvm hotspot crash log file (hs_err_pid*) suggests that in future hs_err_pid files will contain the URL you're supposed to submit VM crashes to. I'll try that, and see if I have any more luck.

(I like the way Solaris 10/amd64 isn't an option when selecting your OS. Maybe it's not expected to work? "Solaris x86" turns into "solaris_9", which is odd.)

[Update: the crash has since been accepted as Sun 6359201. Maybe first time round the response was from a script that noticed a bunch of fields weren't filled in, but second time round I got a human? Having filed another, different, VM crash this week, it's weird to me that the form asks you to fill in so much stuff that's already in the hs_err_pid file, as well as asking for the hs_err_pid file.]

2005-11-12

Ductus

If you're a Java 2D programmer, you've surely seen the word "ductus". Probably in a context like this:

at sun.dc.pr.PathStroker.endPath(Native Method)
at sun.dc.pr.Rasterizer.endPath(Rasterizer.java:561)
at sun.java2d.pipe.DuctusRenderer.createShapeRasterizer(DuctusRenderer.java:576)
at sun.java2d.pipe.DuctusShapeRenderer.renderPath(DuctusShapeRenderer.java:57)
at sun.java2d.pipe.DuctusShapeRenderer.draw(DuctusShapeRenderer.java:45)
at sun.java2d.pipe.PixelToShapeConverter.drawLine(PixelToShapeConverter.java:34)
at sun.java2d.SunGraphics2D.drawLine(SunGraphics2D.java:2101)

And you've probably wondered what it meant. What is a "ductus" shape? Is it a concave shape, maybe?

Nothing so interesting. It turns out that I parsed "DuctusRenderer" wrong. It's not a renderer of ductuses; it's Ductus' renderer. Ductus being a company that licensed their rendering technology to Sun.

Boring but true.

2005-11-05

Mac OS 10.4.3 / WebKit ChangeLog

I haven't installed 10.4.3 yet. This post is part of my attempt to tidy up my desktop in preparation. No, now is not a good time to reboot. Edit and NetNewsWire are about the only applications I can trust to save and restore any state. And even they have no way to remember the simple fact that they were running.

Unlike Sun, Apple are pretty good at having links in their Software Update application to more details about individual updates, at least when they're big OS updates. But if you look at something like About the Mac OS X 10.4.3 Update you'll find the information given is very vague.

One highlight was "Disables Quartz 2D Extreme—Quartz 2D Extreme is not a supported feature in Tiger, and re-enabling it may lead to video redraw issues or kernel panics."

But the weirdest part, I felt, was "Improves compatibility of Safari with many webcams."

Luckily, over on the WebKit blog, they have a more complete list of WebKit Fixes in Safari 2.0.2 / Mac OS X 10.4.3 where the true geek can read the much more informative "Added support for multipart/x-mixed-replace content (often used by web cams)."

I'm the kind of person who does read the ChangeLog before deciding whether to update an application, so I really appreciate this. I wish this were linked to more directly from Software Update, and I wish that we had a similar level of detail for other Apple software.

Anyway, I need to post this so I can get back to preparing for a reboot...