The catch here is that I don't have any stacking software, and GIMP is only 8bit (and therefore unsuited to the task). So I started digging, and found out that I did indeed have stacking software... it's hidden in plain sight in most out-of-the-box Linux distros as the Imagemagick set of tools.
So what else did I need? Something to register each of my light frames with each other, for starters. Hugin's panorama tools includes a routine called align_image_stack which fit the bill perfectly. I also needed something that I could view the images in and tweak levels on the final image in 16bit color. Krita works for that well enough. It's buggy and unstable for general use, but for opening images and setting the black point and stretching levels/curves it's functional. One last thing I needed was a RAW converter that could batch convert my images, I chose UFRAW.
How it's done:
Drop all of your RAW files into a new directory. Navigate there in a terminal and type:
I shoot with a Canon, so that last bit of the command might be *.NEF or *.CRW etc depending on the brand of camera you use. Once this is done, move all of your RAW files to some safe-keeping location to get them out of the way.
ufraw-batch --out-type=tif --out-depth=16 *.CR2
When that's done, drop your darks in a folder made just for them. Navigate to this folder in a terminal window and issue the following command:
This will create a 16bit/channel averaged dark frame called "darkframe.tif".
convert -average *.tif darkframe.tif
This next part is the toughie (I'm working on learning how to script this, just so I don't have to issue a command for each and every image). Drop all your lights into their own folder along with a copy of darkframe.tif. Issue the following command for each light frame:
The command is structured thus: "composite -compose minus" calls up imagemagick's subtraction routine, takes the imagename.tif, subtracts darkframe.tif from it and writes the result to dsimagename.tif (I chose ds for dark-subtracted). In practice, this takes only a few seconds for each image since usually you're only changing the digits in the file names so you only type the full command once and use the terminal history to recall the last command and edit it.
composite -compose minus imagename.tif darkframe.tif dsimagename.tif
Next issue the following command:
"align_image_stack" calls Hugin's stacker. "-a" tells the program to use the next field in the command (in this case "ais") as the first set of characters in the output images' file names and increment them (so the output files will be ais0000.tif, ais0001.tif, ais0002.tif, etc). "ds*.tif" restricts the command to operating only on tif files that start with "ds". This can take a while, and will likely throw warnings, but should complete in a few minutes and generate a series of new files that are aligned and rotated to match the first image in your set of lights.
align_image_stack -a ais ds*.tif
(edited to remove an extraneous command option. Thanks, lambermo, for catching that [see below])
Next command is:
This is the same command we used to average the darks, we've simply specified different input and output files. "averagestack.tif" is your final stacked image, ready to open up in krita to set the black point and stretch levels to suit your taste. Save the image from krita to a 16bit/channel tif (don't forget to uncheck the alpha channel, it adds that by default). This file can be opened in GIMP and exported to 8bit/channel filetypes, or you can save from krita to such.
convert -average ais*.tif averagestack.tif
One of the resulting pics, 100% crop, with levels prolly stretched too far :