Subject: Compatibility options -- what do they do?
To: None <current-users@NetBSD.ORG>
From: Tom I Helbekkmo <tih@Hamartun.Priv.NO>
List: current-users
Date: 05/27/1996 20:38:03
One of my wishes for the 1.2 release is some documentation for the
various compatibility options in the kernel configuration file.  I do
understand what most of them are for, but not all, and I certainly do
not know what the trade-offs are in the various cases.  Here are some
examples from the i386 configuration:

options		COMPAT_NOMID	# compatibility with 386BSD, BSDI, NetBSD 0.8,
options		COMPAT_09	# NetBSD 0.9,
options		COMPAT_10	# NetBSD 1.0,
options		COMPAT_11	# NetBSD 1.1,

How far back is it reasonable to maintain compatibility here?  How far
do I have to go if I want to be able to run BSDI binaries?  What are
the trade-offs involved?  (Do I lose functionality or performance or
both with some of these?)  Moving along,

options		COMPAT_43	# and 4.3BSD
options		TCP_COMPAT_42	# TCP bug compatibility with 4.2BSD

What exactly does 4.3BSD compatibility do in the kernel?  Some kind of
tty ioctl stuff is my guess, but I really don't know.  The 4.2BSD TCP
bug compatibility is probably so old by now that only those who have
their own retrocomputing museums (me, for one) would ever need.  Now
on to some more fun stuff:

options		COMPAT_SVR4	# binary compatibility with SVR4
options		COMPAT_IBCS2	# binary compatibility with SCO and ISC
options		COMPAT_LINUX	# binary compatibility with Linux
options		COMPAT_FREEBSD	# binary compatibility with FreeBSD

These are straightforward enough, on the surface.  However, I don't
know if any of them depend on any of the others (do the IBCS2 and/or
LINUX compatibility options demand COMPAT_SVR4?), and I'm really quite
confused as to when I need an /emul tree and when I don't.  I've tried
running a Linux binary once, which not only needed to have the Linux
shared library stuff under /emul (no surprise there), but also could
not find any data files unless they were in that same subtree!  On the
other hand, a statically linked FreeBSD that I'm using quite a bit
these days (CMU Common Lisp, actually) lives in my regular file tree
with all its auxiliary stuff, and it's only by using the 'file'
command that one can discover that it's not a "native" binary.

(Speaking of CMUCL, the Werkowski port is great!  I've seen this baby
generate better (faster) code for a Lisp program than GCC 2.7.2 does
for the equivalent C program.  Any Lispers out there with NetBSD/i386
should definitely grab a copy from http://www.mv.com/users/pw/lisp !)

Jumping over to the VAX port, COMPAT_RENO seems to have gone away,
although there are indications that it might now be the silent
default, and COMPAT_ULTRIX has arrived.  There are comments to the
effect that they are mutually exclusive, but again, what are the
trade-offs involved?  Do I lose anything I might want by compiling in
support for running Ultrix programs?  Taking a speed hit just because
I might some day want to run an Ultrix binary is no fun on a KA630.

So, I think it would be really nice if those who know the various
compatibility options well would take the time to get just a brief
overview of what they do and what they cost into the INSTALL text.

-tih
-- 
Tom Ivar Helbekkmo
tih@Hamartun.Priv.NO