HPBSD: Utah's 4.3bsd port for HP9000 series machines



HPBSD is the local name for a port of 4.3bsd for the HP9000 300, 400, 700 and 800 series machines done at the University of Utah. Since it contains code encumbered by both AT&T (Novell? SCO?) and HP, we do not distribute it.

The current version, HPBSD 2.0, is still largely based on 4.3bsd but has the 4.4bsd filesystem and networking kernel code and utilities as well as the ANSI-compliant C library. This version was ``released'' in April 1993. Since that time development has been on the back burner as our focus changed to Mach and Flux. Improvements has been limited to bug fixes and support for new hp700 CPUs that we have. It is still the desktop operating system of choice inside the Flux and Avalanche research groups.

Technical Summary

HPBSD is based on the 4.3 release of BSD from CSRG at Berkeley with additions from 4.4bsd and numerous local modifications. It still looks and feels pretty much like a 4.3 system, but configuring and building software packages is more 4.4bsd-like. In a nutshell, HPBSD:
Is not POSIX compliant.
It lacks many of the POSIX system calls. Notably missing is the POSIX termios tty interface, HPBSD still uses the old 4.3 style tty interface. This includes anything having to do with ``sessions.''
Has the 4.4bsd (``Torek'') C library and include files.
This makes compilation look more like a 4.4 box.
Has the 4.4bsd filesystem code.
By adopting the filesystem code, we got rid of Sun's NFS implementation and utilities (that were in our 1.x release) and replaced them with the Macklem/CSRG NFS equivalents. The new filesystem code also brought the latest FFS code including support for clustered reads and writes allowing sequential access at bandwidths approaching that of the raw disk. Also extensively used is the memory filesystem (MFS). The loopback filesystem (LOFS), kernel filesystem (KERNFS), and log-structured filesystem (LFS) were also moderately tested but are not used locally. All other filesystems included compile but were not tested.
Has the 4.4bsd network code.
The networking code was brought in primarily because of the dependencies of NFS. The OSI (ISO?) networking code is there and compiles but was never tested.
Has the 4.3bsd filesystem layout (with local reorganizations).
HPBSD still uses the old BSD organization (e.g., /etc has binaries now found in /sbin in most Unixes) with some local modifications to support systems with small local disks.
Has the 4.3bsd VM system.
This means no mmap() and friends. However, it also means better performance and more robust under load!

Supported Hardware

Supported Hardware - HP300/400 (68k based)

CPUs 68020 based (318, 319, 320, 330 and 350)
68030 based (340, 345, 360, 370, 375, 400)
68040 based (380, 425, 433)
DISKs HP-IB/CS80 (7912, 7914, 7933, 7936, 7945, 7957, 7958, 7959, 2200, 2203) and SCSI-I (including magneto-optical and CD-ROM).
TAPEs Low-density CS80 cartridge (7914, 7946, 9144), high-density CS80 cartridge (9145), HP SCSI DAT and SCSI exabyte.
RS232 98644 built-in single-port, 98642 4-port and 98638 8-port interfaces.
NETWORK 98643 internal and external LAN cards.
GRAPHICS Terminal emulation and raw frame buffer support for 98544/98545/98547 (Topcat color & monochrome), 98548/98549/98550 (Catseye color & monochrome), 98700/98710 (Gatorbox), 98720/98721 (Renaissance), 98730/98731 (DaVinci) and A1096A (Hyperion monochrome).
INPUT General interface supporting all HIL devices. (e.g. keyboard, 2 and 3 button mice, ID module, ...)
MISC Battery-backed real time clock, builtin and 98625A/B HP-IB interfaces, builtin and 98658A SCSI interfaces, serial printers and plotters on HP-IB, and SCSI autochanger device.

Major items not supported include the 310, 332, 362 and 382 CPUs, 400 series machines configured for Domain/OS, EISA and VME bus adaptors, audio, the centronics port, 1/2" tape drives (7980), the PVRX/TVRX 3D graphics displays, and the optional fast internal HP-IB (98625C) on 345 and 375 CPUs. The 425e CPU has never been tested but should work.

Supported Hardware - HP700/800 (PA-RISC based)

CPUs original (705, 710, 720, 730, 750)
PA7100 (715/33, 715/50, 715/75, 725/50, 725/75, 735/99, 755/99)
PA7100LC (712/60, 712/80, 715/64, 715/80, 715/100, 725/100)
PA7150 (735/125, 755/125)
PA7200 (C100, C110, J200, J210)
DISKs internal single-ended SCSI, internal fast-wide-differential SCSI, GSC based fast-wide-differential SCSI, and EISA fast-differential SCSI
TAPEs internal single-ended SCSI (DAT)
RS232 builtin
NETWORK builtin 802.3 and experimental SGC FDDI board (Medusa)
GRAPHICS Terminal emulator and raw frame buffer support for GRX, CRX and 712/715 builtin
INPUT HIL devices, PS/2 keyboard and mouse
MISC audio types 1 and 2

Major items not supported include multiprocessor PA7200 machines (J200, J210), builtin FDDI, EISA (other than FD SCSI), parallel port, teleshare port, and PS/2 floppy.


Since HPBSD contains AT&T and HP proprietary code it is not freely available. In the past, we made bootable releases to sites with the necessary license agreements but we don't do that any longer.

There are freely available alternatives to HP-UX for both platforms. For the hp300 and hp400, you can get NetBSD/hp300.

For the hp700, you can get our Mach4 and Lites port. Though this port doesn't directly support the older hp800s, it does include code that would be useful in doing such a port.


HPBSD was born in 1987 when Mike Hibler (me) was hired by the Systems Programming Group at the University of Utah. My first project was to do a port of 4.3bsd to the hp320 and hp350 workstations so that they would run an operating system similar to what was running on the C.S. department's Vaxen and Suns. At the time they were running HP-UX 5.17 (or thereabouts) which was a hideous fusion of BSD and System 5. Among other things, it lacked long (> 14 character) file names, NFS, disk partitions, reasonable networking and BSD sysadmin tools.

The starting point was a 4.3-beta port for the hp200 done by David Davis (then in the CAD group at Berkeley--unrelated to CSRG) which included basic 68k locore support, device drivers, a PCC-based C compiler and many useful library routines. With that excellent base, the port was liming along within 1 month. The primary difference was support for a 32-bit x86-style MMU (the hp200 had 16-bit PTEs!).

From 4.3-beta, the port advanced to ``real'' 4.3bsd and then onto the version running on Utah's Vaxen which included the University of Wisconsin port of Sun's NFS. With the combined efforts of numerous individuals in the Systems Programming and PASS groups at the university as well as continued contributions from David Davis, HPBSD became increasingly robust and eventually replaced HP-UX on the 50+ hp320, hp350 and hp370 workstations in the department. One of the major reasons for its wide-spread acceptance was its ability to run HP-UX binaries such as HP Common Lisp and a third-party VLSI design tool. In some ways it ran them better than HP-UX since they could operate over NFS and use long filenames.

After informing HP of the project, they were extremely supportive, providing machines and technical documentation. In April of 1988 we made a release available to people with 32V and Sun NFS source licenses. This release was run by a number of universities, research institutions and even inside HP (as the basis for a Mach 2.0 port).

In December of 1988, with support and encouragement from HP, Mt Xinu picked up our then current source to merge into MORE/BSD for eventual release as a supported product.

In March 1989, with support and encouragement from HP, the CSRG at Berkeley adopted the hp300 as their standard platform and integrated our then current source (sans Sun encumbered NFS code) with their post-Tahoe code. This hp300 code was first included in the Reno release, the last release with the old vax-style VM system.

In April 1989, with encouragement from CSRG, I started the ``new VM project,'' integrating the Mach 2.0 VM system[1] into BSD. This was done in the context of our then current HPBSD. A reasonable prototype was done by November 1989 when I talked about it at the ``Berkeley workshop'' in Boulder[2]. Development on the new VM code in HPBSD continued off and on til May of 1990 when the VM code was merged into CSRG's source tree (what was to become net2 and later 4.4bsd).

During the summer of 1990, Donn Seeley did a Mach 2.5 port to the hp300 based on the HPBSD sources augmented with the new VM pmap module. This was a short-lived project sponsored by OSF. It never saw the light of day.

The addition of 68040 support in mid-1991 was the last major development in the hp300-specific code though I continued to make occasional fixes and enhancements to the hp300 4.4bsd sources after that.

Sometime in the fall of 1989, Jeff Forys started work on the hp800 (PA-RISC) port starting with a hybrid HP-UX/Mach kernel called ``Tut'' that was done as an experiment at HP Labs. By around February 1990 HPBSD was limping along on an hp835 and by later that year was running solidly on the PA.

For a short period of time in 1989-90, Mt Xinu also worked on the PA-RISC port. They actually produced the first usable part of the port, the boot loader, late in 1989. We used (and continue to use) this boot loader in our work.

In 1990, yet another Mach project was spun off of HPBSD. This was a Mach 3.0 + UX single server port for the 835 sponsored by HP and done primarily by Bob Wheeler. Around 1992, this port mutated into a Mach 3.0 + OSF/1 single server port for the 700 series (800 was dropped) and eventually became the Mach4 + Lites system that we distribute today (see the availability section).

Starting in May 1991, Leigh Stoller ported HPBSD to the ``snake'' (hp720) workstation. By the end of the year, we were using an hp720 as a server machine. In January 1992, the hp300 and hp800 kernels were merged into a common source tree.

The last major development to HPBSD was the addition of the 4.4bsd kernel filesystem and networking code and the 4.4bsd ANSI-compliant C library. Jeff Forys started this in April 1992 and by early 1993 all of our HPBSD machines had been converted. This version was known as HPBSD 2.0. Since this merge included the NFS implementation done by Rick Macklem, we were able to eliminate all Sun encumbered code. In April 1993, we made a semi-formal release of HPBSD 2.0 to the 2-3 sites which had the necessary agreements with HP (necessary to obtain the PA-RISC specific code). Since that time, active development of HPBSD had pretty much stopped other than adding support for new hardware that we have received.

Final note: As of Summer 1999, there are less than 10 HPBSD machines left: one 68k and the rest PA-RISC. The last significant efforts were to bring HP-UX compatibility up to 10.20 (to run the JDK) and to port a 3Com EISA 100Mbit ethernet driver. The good news is that there is active development on both Linux and OpenBSD ports. NetBSD may also be in the works. Good Luck to them all!

[1] ftp://reports.adm.cs.cmu.edu/usr/anon/1988/CMU-CS-88-106.ps is an online version of Avie Tevanian's original Mach VM thesis.

[2] http://www.cs.utah.edu/~mike/hpbsd/newvm-slides.ps is a copy of the slides I used for the presentation.

Mike Hibler <mike@cs.utah.edu>

Original version: June 1996 Last update: July 1999