COMPAT_30(8) | System Manager's Manual | COMPAT_30(8)

# NAME

`compat_30` —
setup procedure for backward compatibility on post-3.0 releases

# SYNOPSIS

`options COMPAT_30`

# DESCRIPTION

The `compat_30` module allows NetBSD to run NetBSD 3.0 executables.

The support is present if the kernel was built with option `COMPAT_30`. It is not available as a loadable module.

Static executables typically need no additional setup. Dynamic binaries may require shared libraries whose major version number changed since NetBSD 3.0, which are listed below. A shadow directory under /emul is not used; the libraries can be obtained from a NetBSD 3.0 distribution and installed in the original directories shown, as the major version number in the file name will prevent conflicts. If an upgrade installation from NetBSD 3.0 has been done and these libraries are still present, nothing more need be done.

## Libraries needed from 3.0

- /lib/libcrypto.so.2.1 /lib/libcrypto.so.2
- /usr/lib/libcrypto.so.2.1 /usr/lib/libcrypto.so.2
- /lib/libevent.so.0.2 /lib/libevent.so.0
- /usr/lib/libevent.so.0.2 /usr/lib/libevent.so.0
- /usr/lib/libg2c.so.2.0 /usr/lib/libg2c.so.2
- /usr/lib/libkadm.so.5.0 /usr/lib/libkadm.so.5
- /usr/lib/libkafs.so.6.0 /usr/lib/libkafs.so.6
- /usr/lib/libkdb.so.5.0 /usr/lib/libkdb.so.5
- /usr/lib/libkrb5.so.19.1 /usr/lib/libkrb5.so.19
- /usr/lib/libkrb.so.6.0 /usr/lib/libkrb.so.6
- /usr/lib/libkstream.so.2.0 /usr/lib/libkstream.so.2
- /usr/lib/libmagic.so.0.1 /usr/lib/libmagic.so.0
- /usr/lib/libpcap.so.1.4 /usr/lib/libpcap.so.1
- /lib/libradius.so.0.0 /lib/libradius.so.0
- /usr/lib/libradius.so.0.0 /usr/lib/libradius.so.0
- /usr/lib/libssh.so.1.0 /usr/lib/libssh.so.1
- /usr/lib/libssl.so.3.0 /usr/lib/libssl.so.3
- /usr/lib/libstdc++.so.5.0 /usr/lib/libstdc++.so.5
- /lib/libz.so.0.4 /lib/libz.so.0
- /usr/lib/libz.so.0.4 /usr/lib/libz.so.0
- /usr/lib/libamu.so.2.1 /usr/lib/libamu.so.2

# IMPLEMENTATION NOTES

`COMPAT_30` enables the NetBSD 3.0 versions of the following system calls, whose syscall numbers and argument structures were changed after the 3.0 release to accommodate 64-bit filesystems: fhstat(2), fstat(2), getdents(2), lstat(2), stat(2).

The filehandle structure (formerly fhandle_t) was made opaque to userland and variable-sized. A fh_size argument was added to related syscalls: fhstat(2), fhstatvfs(2), fhstatvfs1(2), fhopen(2), getfh(2). This changes the API and ABI of those syscalls, `COMPAT_30` enables binary compatibility with the old ABI. Source compatibility is not provided, as use of those syscalls is supposed to be rare.

The error code from the socket(2) syscall changed from `EPROTONOSUPPORT` to `EAFNOSUPPORT` in the case of an unsupported address family. `COMPAT_30` enables binary compatibility with the old ABI. Source compatiblility is not provided.

The struct ntptimeval used by ntp_gettime(2) changed with the implementation of timecounters.

# SEE ALSO

config(1), fhstat(2), fstat(2), getdents(2), lstat(2), stat(2), options(4)

# HISTORY

NetBSD offers back-compatibility options back to NetBSD 0.9, but the first to be documented with a manual page is `compat_30`.

# BUGS

The compatible getdents(2) is unable to see directory entries beneath the top layer of a union, even though the real 3.0 `getdents`() did not have that problem.

# SECURITY CONSIDERATIONS

Programs with security impact that receive incorrect directory contents from `getdents`() may behave improperly, as when they are unable to find, or find the wrong versions of, important files.

December 15, 2007 | NetBSD 9.4