Already a while ago 2.11BSD patch #499 was released – as cleanup and preparation for the release of a new master distribution as patch #500. It is by far the biggest patch in the history of 2.11BSD – looking at the file size alone, and that’s not even considering that the actual patch is compressed. Not really surprising that the PiDP-11 mailing list showed some patch anxiety…
But for sure, there’s no risks whatsoever involved in applying a patch to a 2.11BSD system nowadays. Everyone nerdy enough to run a PDP-11 operating system would surely also be nerdy enough to just make an image copy of the disk before starting the patch so they could back out if something went wrong, wouldn’t they? Ehh, oops.
And also, anyone nerdy enough to run 2.11BSD and applying patches would of course understand that if you apply a patch to a system you’ve been tinkering with, the patch might fail – and that means you actually need to check for failed patches. Wouldn’t they? Ehh, oops.
But surely that type of person would keep a clean copy of their last installation somewhere safe, to revert to if all else fails? Ehh, oops.
So yes, it took me three tries. First on the FPGA, and yes, that went smoothly, and also quite quickly – up until the step that says ‘just recompile everything in /usr/src’. That took a while – a bit over 12 hours. Makes me wonder, did anyone run this ‘make everything’ kind of job on a real PDP? how long did that take?
For me, the make got stuck three times. Once at a Makefile that I had messed with, but also in two that I’m not sure I had. Most obviously the one for tcsh – never liked tcsh, never used it, never saw any reason to mess with it. That helpful hint to run find to check for failed patches? Yeah, you might want to check for that, because things are likely to break if you ignore those.
Took a while fixing that, and after that and rerunning the 12 hour make job, it finally occurred to me that the image I started from was one of the testing images I used for the patch #490 issue, and that the compiler was actually the one I had patched myself instead of the one with the official fix in. Oops. Should do the whole thing again really to be sure I have a cleanly built system. In short, yes, up to this point did take me a week or so. Wall clock time, not cpu time.
At that point I thought I had sufficient excuses to use my blazingly fast and historically appropriate i5 desktop – appropriate since it is almost as old as PDP2011 is – and do the complete job of patching and compiling in a bit over an hour instead of literally taking all day.
Still took two tries, the image I thought was clean wasn’t quite. And when I finally got the right one, it still had the tcsh mismatch. Nothing major though – there were only a couple whitespace mismatches, and that’s probably also the cause, I used to apply patches with -l because the cutting I did would space-discombobulate the files. I could of course go back to my own write-up and start fresh from patch 457, and make sure I got everything right this time – making back-out images every step of the way, scripting all the input… Or I could just wait until patch #500 comes out with a new, certified fresh install image.
Meantime, nothing left to do but enjoy the latest #499 system I so painstakingly put together. But wait, what’s that weird output on vmstat? Couldn’t be a bug, could it? Did someone improve vmstat to make it look nicer, cause it kind of does?
Took me a while to figure it out – there was a bug in the printf routines for floating point numbers, when the field length of the fraction was zero and the argument was also zero it would just print spaces, although I couldn’t quite point out why. Took only a day for Ragge to track down the issue to e/f/gcvt and come up with a fix, and that’s now part of the upcoming patch #500.
> *** /usr/src/lib/libc/stdio/pfcom.c Fri Aug 29 10:53:21 2025
> --- pfcom.c Sat Feb 21 10:16:09 2026
> ***************
> *** 62,67 ****
> --- 62,68 ----
> *--fend = *--dbeg;
> #else
> fend = fbeg = fcvt(d, nd, &decpt, &sign);
> + if (*fbeg == 0) fend = fbeg = "0";
> while (*fend++); fend--;
>
> if (nd | falt) {
>
That’s all. And then do the 12-hour make job, of course…
If anyone asks, I’ll put up my image on the download page – it’s an RP07 image now, a bit upgraded from the write-up in the howto pages but essentially still the same thing. Let me know.