Over the next few months new versions of the major operating systems will be released: Mac OS X v10.6 (Snow Leopard) sometime in September, Windows 7 on 22 October, and Ubuntu 9.10 (Karmic Koala), also in October.

Many post have already been written about these upcoming releases, but let’s not forget about FreeBSD. FreeBSD 7 was released on 27 February 2008 and developers have been working hard ever since, and even before, on the next major release, FreeBSD 8, which is scheduled to be released late September.

freebsd_logo-100x100FreeBSD 8 was initially intended to be a more or less evolutional release with few major changes. Remember the article “FreeBSD 8 won’t rewrite the book“? It’s now obvious that the 8.0 release will be another major release with groundbreaking changes (release notes).

The traditional code freeze was announced on 26 June to concentrate on streamlining the code and bug fixing, and less on adding new features. FreeBSD is shaping up nicely: Beta1 and Beta2 have now seen the light, and Ken Smith created the RELEN_8 branch on 3 August to prepare for the final 8.0 release. After Beta3, scheduled for 17 August, no more new features will be added to 8.0.

Developers are now working hard to make the final changes, amendments and fixes. Due to a problem with the SVN to CVS export, the release process has been a little delayed. Most jobs, tasks and issues have been solved, with a number of patches now waiting to be approved (more about the release engineering).

So what improvements and new features can we expect in FreeBSD 8? Many. The following are the ones I’m really looking forward to:

  • Jail improvements
  • DTtrace
  • Virtual IEEE 802.11 fixes & network stack virtualisation
  • superpages
  • Xen DomU support
  • stack-smashing protection
  • TTY layer rewrite
  • much improved ZFS support
  • new USB stack
  • rewritten NFS client/server introducing NFSv4
  • Improved device mmap() extensions will allow the technical implementation of a 64-bit Nvidia display driver for the amd64 platform

Apart from these new/improved features, there are many more features, stability tweaks and code improvements.

Ivan Voras has kept a very useful page up to date with all new features introduced into 8.0, documenting all changes and describing differences between 7.0 and 8.0. I’ve taken a number of features and summarised/abridged them below. For the full list and details visit “What’s cooking for FreeBSD 8.0“.

Parallel port builds

The port infrastructure for source builds has been enhanced to allow parallel builds of individual ports. In the age of multi-core CPUs this means package build times will be drastically decreased. By default, all available logical CPUs will be used.

Better handling of mounted device removals

Panics on “hot” removal of devices with file systems mounted from them (the canonical example is the removal of USB flash memory keys while the file system was mounted) were the most commonly reported problem from end-users. New development, funded by the FreeBSD foundation, has solved this issue.

Jails v2

The jails subsystem has been enhanced, extended and updated to support modern FreeBSD features. In addition to the support for multiple IP addresses per jail (or none), support for IPv6 and SCTP has been implemented, jails can be nested hierarhically and jails can now be restricted to certain CPUs.

Xen dom-U support

Xen support has been integrated into FreeBSD, allowing it to be used as a 32-bit guest operating system on recent versions of Xen dom0, but not as host.

New USB stack

The USB stack received a significant overhaul and the new code fixes many standing problems.


The TTY layer is the traditional Unix interface to system users, providing them with interactive sessions to run shells, etc. The current TTY layer in FreeBSD is for the most part the traditional BSD TTY, which has now been upgraded and abstracted from drivers and other layers.

Kernel memory limit on AMD64 increased

Up to now, it was only possible to allocate up to 2 GB forkmem_max, which is becoming a bit cramped. This limit has recently been increased to 512 GB.

Kernel threads

Kernel threads upto now were actually “heavy weight” processes running in the kernel address space. This change introduces real light weight kernel threads which consume less low-level resources (process locks, memory maps). It also allows better grouping of threads for display purposes.


The usual thing that happens after a kernel panic is a kernel memory dump, either full or a “minidump”. The new “textdump” feature doesn’t store the actual kernel memory dump, but extracts commonly needed information from it, stores it into a tar archive of text files, and deletes the dump file. This reduces the size requirements of collecting such information, speeds up development, and enables people to collect debugging information after a crash without kernel developer experience.

ULE 3.0

New version of the SMP-optimized scheduler. Evolution of the ULE scheduler resulted in support for fine-grained CPU affinity calculations, taking into account the physical topology of the CPUs (caches, cores, sockets) and much improved support for binding threads to CPUs. This results in additional functionalities and noticeable performance improvements.


Most general-purpose processors provide support for memory pages of large sizes, calledsuperpages. Superpages enable each entry in the translation lookaside buffer (TLB) to map a large physical memory region into a virtual address space. This dramatically increases TLB coverage, reduces TLB misses, and promises performance improvements for many applications.


DTrace is a tool and a language developed by Sun Microsystems to help debugging and profiling operating systems. It can aggregate information from different parts of kernel and analyze them in a ways that’s meaningful to the user.

Network stack virtualisation

The network stack virtualisation project aims at extending the FreeBSD kernel to maintain multiple independent instances of networking state. This will allow for complete networking independence between jails on a system, including giving each jail its own firewall, virtual network interfaces, rate limiting, routing tables, and IPSEC configuration.

Multiple routing tables

Support for multiple routing tables (forwarding information bases) allows advanced network topologies.

Equal cost multipath routing

ECMP routing allows for multiple routes to be handled by the kernel, including default routes. It potentially offers substantial increases in bandwidth by load-balancing traffic over multiple paths.

Kernel NFS locking support

NFS lock manager in kernel improves performance and behaviour of NFS locking (used to synchronise file access on remote machines). New features include multithreaded operation, deadlock detection, and transparent interaction with local file locks on the server.

NFSv4 support

NFSv4 is a major overhaul of the NFS protocol and brings many new features like a stateful protocol, performance improvements and stronger security.

Experimental new driver for AHCI

The new driver supports native AHCI via the CAM (common access method for storage) system.

gvinum 2

gvinum is a logical volume manager based on and compatible with vinum, the FreeBSD’s long-standing and practically traditional volume manager. Its features include JBOD, RAID 0, RAID 1 and RAID 5 modes of combining storage devices into higher level volumes, and due to the new version’s integration with GEOM it can use and be used by other GEOM devices and classes.

GEOM_PART becomes the default slicer

GEOM_PART (gpart) is a new GEOM partition class (slicer) and utility that rolls up support for many partitioning formats (MBR, BSD, GPT etc.) into a single code base.

Boot support for GPT partitions

This support includes the boot sector and loader that enable common i386 machines with a generic BIOS to boot from GPT-partitioned drives.

bsdlabel extension

bsdlabel is extended to support more than 8 partitions. The new limit of 26 partitions comes from the number of lower-case letters.

ProPolice SSP (stack-smashing protection)

ProPolice helps prevent exploits that use stack-based buffer overflows by setting a random integer in the stack right before the return address.