386BSD 0.1 running on a 386sx

Looking around, I found this blog, which kind of reads under google translate where someone went ahead and booted up 386BSD 0.1 on his 386sx laptop. Sadly he doesn’t have a 80387sx so things like PS explode as it has a %f in the code…

Oh well it’s kind of fun to see things go round and round.

—-update…

I should mention I was thinking of 0.0 that didn’t include the floating point support.. Also “the fuck it crashes” is as good as any other google xlate disaster… 🙂

Multiuser DOS

This has been a fun thing to go through, but at one point it was a popular trend to convert big expensive 386 computers from the late 1980’s into multi-user, multi-tasking beasts much like a mainframe. But instead of CICS, and PROFS people ran Dbase III, WordPerfect, and all kinds of email solutions from ccmail, to MS mail, and even some dbase programs, compiled by clipper into being email clients.

In a way things were more ‘simple’ back then, and the 80386 CPU had a card up it’s sleeve v86 mode. v86 mode provides hardware emulation of a 8086, allowing the base OS to spawn dozens of these virtual machines. All that was up to the ‘supervisor’ was to create virtual peripherals, much like how Windows/386 of the day ran multiple MS-DOS VM’s on a single machine that you could see at once, these solutions provide the output to multiple terminals.

While Windows/386 sat on top of MS-DOS, these multitasking DOS’s had the v86 mode multitasking as part of it’s core, and some of the later ones were themselves protected mode operating systems.

But juggling multiple MS-DOS applications at one could be quite a challenge. And of course there was the whole dos extender thing, leading up to VCPI, and DPMI.

While MP/M-86 is a grand daddy to a bunch of Digital Research derived OS’s, it’s not 386 specific so I’m going to omit it for now. I’m sure it’ll be worth doing it’s own write up.

I’m sure I’m going to miss a bunch of these, but let’s have a quick rundown.

  • Concurrent DOS/386
  • DR-Multiuser-DOS 5.0
  • Real/32
  • TSX-32
  • PC-MOS/386
  • VM/386
  • VMOS/3

If anyone knows of any others feel free to give me a shout. It does seem that multiuser DOS was a good market at one point.

Old Unix tree’s

Well I was looking for a good way to see what changed between Net/2, 386BSD 0.0 and 386BSD 0.1 and it appears that nobody has a cvsweb of these early versions….

What is strange, is that cvsweb package for debian is lacking the actual cgi file.. So after going insane with cvsweb, I set one up.

http://unix.superglobalmegacorp.com/cgi-bin/cvsweb.cgi/#dirlist

I’ve never really setup a CVS repository before so this was my first shot…

rm -rf /var/lib/cvs
mkdir -p /var/lib/cvs
cvs -d /var/lib/cvs init
cd /var/www/unix.superglobalmegacorp.com/source/Net2
cvs -d /var/lib/cvs import -m “Net/2” Net2 CSRG Net2
cd /var/www/unix.superglobalmegacorp.com/source/386BSD-0.0
cvs -d /var/lib/cvs import -m “386BSD 0.0” Net2 BJolitz Jolix00
cd /var/www/unix.superglobalmegacorp.com/source/386BSD-0.1
cvs -d /var/lib/cvs import -m “386BSD 0.1” Net2 BJolitz Jolix01
cd /var/www/unix.superglobalmegacorp.com/source/NetBSD-0.8
cvs -d /var/lib/cvs import -m “NetBSD 0.8” Net2 NetBSD NetBSD08
cd /var/www/unix.superglobalmegacorp.com/source/NetBSD-0.9
cvs -d /var/lib/cvs import -m “NetBSD 0.9” Net2 NetBSD NetBSD09 

From what I saw the more the directories align, the better, so I moved all the i386 and other platform stuff into arch directories to better match NetBSD 0.9 …

I also setup src2html to browse various levels, it’s great for quickly finding things that may have moved… It’s here.

Now I just have to see about doing ‘forks’ in CVS and adding in the 4.4 lite stuff.

NetBSD 0.8 kernel boots!

Well, ok it’s not 100% the NetBSD 0.8 kernel, as a good chunk of the files have been intentionally removed from CVS. However from the announcement, it does make it clear that NetBSD 0.8 is 386 BSD pl22 with some pre pl23 changes thrown in. Since patch level 22 is lost, however patch level 23 is still around, then it wasn’t to hard to install a 386 BSD system, patch it to level 23, then unpack the NetBSD 0.8 sources, and fill in the missing parts.

I guess this is the Jurassic Park of kernels?

386bsd-pl22 booted

Anyways, here is the 386 BSD pl 23 kernel booting up

And now..

NetBSD 0.8 booted

NetBSD 0.8 booted

As you can see there is some differences in the boot strings, but at the same time, because so many files were just pulled in from 386 BSD, and I’m still using a 386 BSD userland, it reports itself as 386BSD.

dmesg’s were so small back then, here is the whole thing from the kernel:

386BSD 0.1 (GENERICISA) #2: Sun Dec  5 13:30:14 PST 2010
 [email protected]:/usr/src/sys.386bsd/arch/compile/J
real mem  = 67104768
avail mem = 64663552
pc0 at 0x60-0x6f irq 1 on isa
pc0: color
wdc0 at 0x1f0-0x1f7 irq 14 on isa
wdc0: 
wd0 at wdc0 slave 0
fdc0 at 0x3f0-0x3f7 irq 6 drq 2 on isa
ne0 at 0x320 irq 10 on isa
 ethernet address 52:54:00:12:34:56
npx0 at 0xf0 irq 13 on isa

Oh well it was moderately interesting.

For the insane, the merged source is here. I’ll provide a snapshot of my build environment, under Qemu here.

On the road to X11

This is going to be.. involved to do… But there is some hope. The source to X11 R5 is still online, even though the xfree86-1.2 stuff is long gone. I was able to find a binary 2 bit Xserver for 386BSD, so that’s promising.

So my hope would now lay in making up a configuration file that’ll satisfy the Xfree86 1.2 server, and build enough of X11R5 to where it’s able to do something….

I have no idea if it’s even that easy to do, but if anyone has any leads on a source copy of xfree86-1.2 or 1.3 that’d probably be easier to build for 386BSD as it was used in the time frame… 2.0 was for the forks of NetBSD & FreeBSD so no doubt it’d hinge on things like DLL’s…

In the meantime, you can check out Neils Horn’s blog, with an example of what Xfree86 1.x was capable of on 0.96 linux.. Back in the day.

HTTPD 1.3

Well I was looking for a way to move data out of the 386BSD vm without too much pain, and I’ve just been hitting this brick wall about trying to compile apache.

You see the thing is, 386BSD is so old, it doesn’t have dynamic libraries, and a uname command so you have to ‘fool’ the configure scripts, and even then if you do manage to get an executable it’ll just crash… For some reason gdb couldn’t help with the whole thing… very annoying. I think it may be a program size limit..? Either way, I’m sure it was ‘fixed’ in NetBSD 0.8 ..

So after googling around the ancient news groups, I came across this post..

NCSA httpd 1.1/1.2/1.3 compile straight (well almost) out of the box. I’ve not tried the CERN one yet. I’m happy with my NCSA 1.3.

Well, now that’s interesting… Remember that NCSA gave us Mosaic, but they also gave us httpd, which apache is based on. However NCSA no longer hosts the httpd source code… It’s gone with the wind…. Except for this Slackware mirror.

So after downloading it, and building, naturally…. it crashed. However this time I was able to fire up GDB, and see that it was crashing in the mime initialization… It seems it was using a null pointer… So for the heck of it, I changed the hash macro to use the 2nd definition, and it worked!!

So after all of that, I built some stuff for 386BSD to test the transfer of the web server, and it “seems” ok to me… Naturally I wouldn’t expect this to withstand any large amounts of traffic as it doesn’t seem to fork itself… I also suspect this version may work with the VAX 4.X BSD stuff as well…

httpd-1.3
com (CP/M emulator)
GNUMake-3.75
Frotz-2.32
screen-3.7.1
gcc-2.5.8
bash-1.14.7
bash-2.0

It is kind of scary how this old software is disappearing, and at the same time, we hear this promise of how we can keep everything forever in the “digital age”… At any rate, I guess this preserves a somewhat usable OS/Webserver configuration circa 1993…

Back to 386 BSD

Well gunkies is getting a little more life to it, and Dugo contributed this install guide for 386 BSD. Along the way I installed it again with floppy images, and I hit the same fault again:

/386bsd: wd0a: overlaps open partition (b)

However this time I noticed that if you keep on rebooting, it’ll actually stop complaining and work!

So not only was I able to recover from a crash after trying to install the source code, but I was able to complete the install, and install the patchkits! What this has resulted in, is that Qemu can now run 386BSD!!! And it’s significantly faster then Bochs. Not to mention you gain the whole SLiRP / Usermode networking.

So far I’ve tested this with Qemu-0.11.0 just fine. I’m not sure about other levels… so it’s another YMMV.

So now I’ve been able to not only rebuild the kernel & world, but the following programs:

gzip 1.2.4
unzip 5.52
irc II-4.4
lynx 2.8.2

Oh yeah, and another f2c build, and yes it’ll run Dungeon!

So for the few people interested in some BSD history, as this is the ‘first’ Net/2 derived freely available release in a qemu format right here (sorry, link removed, if you want it install this instead).

Just uncompress the qcow2 file (sorry it’ll blow out to 500MB), then run Qemu something like this:

i386-softmmu/qemu.exe -L pc-bios -hda bsd386.qcow2 -M isapc -net nic -net user -no-reboot -m 256

And with any luck, you’ll find the VM booting, and all set and ready to roll. If it comes up in single user-mode, just close Qemu & fire it up again..

I’ll probably put together a windows install package for this later, but for now I figure I’ll unleash some 386BSD onto the world.

386BSD & Bochs

386BSD

386BSD on Bochs

While checking around on wikipedia for something related to 4.2BSD, I found out that bochs 2.4 can run 386BSD!

Now the significance of 386BSD is that it was the real first time that BSD had been given to the masses, in that it *could* run on commodity hardware (read 386’s!), come with full source code and be free. It is no wonder that the initial 0.0 release had well over 100,000 downloads!

It is getting harder and harder to track down a download source for 386BSD as it too was swept up in the great lawsuit of AT&T vs BSDI/CSRG although it was never named in the suit. Not to mention it was quickly superseded by the FreeBSD & NetBSD projects. It is very unstable in the 0.1 release, there is clearly some issues with it’s “install” program with regards to allocating swap space, and in general with the OS’s swapping routines. Also because of the overlap any attempt to install on a disk larger then 100MB results in a corrupted file system that will no longer boot after the eventual file corruption. It’s quite sad, but if you search the news group at the time, there was all kinds of issues with the install process, and with it’s stability.

The installation process does involve quite a bit of floppy shuffling, and will almost result in lots of trial & error to get it going. While there is an install guide on the install disk, it isn’t worded into exactly how to do it. Needless to say the Free/Net BSD releases have improved on the install greatly.

On the other hand it sure is interesting to see a Net/2 BSD to see how far we have come, and how so much is the same.

You can find 386BSD on the mirror site oldlinux.org.

Just watch out that the install floppy (dist.fs) is only 1.2MB.. So be sure to alter your bochsrc file accordingly.