|Front | Info | Lists | Newsfeeds | Study Guide | What is BSD?|
20 years of NetBSD
Jeremy C. Reed
NetBSD's first commits in its current CVS repo were twenty years ago, March 21, 1993. This is notable since NetBSD is the oldest, continuously maintained open source operating system (slightly older than Slackware, FreeBSD, and Debian). In celebration of its 20 years, here is a quick listing of various significant or notable events in NetBSD history. This is only a brief introduction; many of these stories are covered in detail in my upcoming book about the history of Berkeley Unix.
Derived from Net/2, 386BSD, and the "patchkits", its birth began earlier that year during conversations at the Winter Usenix in San Diego and an initial CVS repo was setup within days. Within a month of the final CVS setup, NetBSD was announced and released via anonymous FTP with a goal: ``the rapid development of a stable release which we would consider of "production quality."''
The re-integration of hp300 from Net/2. The code was cleaned up and the port was running by mid 1993. NetBSD was multiplatform.
The first NetBSD port that wasn't in Net/2 or 386BSD was Markus Wild's amiga port (although it was largely based on the hp300). This port was done in one month and merged into NetBSD shortly after.
NetBSD 0.9 also provided loadable kernel modules support and binary compatibility with BSDI's QMAGIC exec format.
BSD lawsuit. A few NetBSD developers or distributors received a cease-and-desist letter. This slowed down the marketing and distribution of the BSDs. (I have a long chapter about this in my book.)
The NetBSD 1.0 release in late 1994 introduced a working sparc port, support for PC532 and some m68k-based Macintoshes. It also added shared library support, the newer enhanced FFS (with 64 bit support), and more binary compatibility, including Ultrix, SVR4, iBCS2 (for SCO applications such as Word Perfect), compat_sunos, and support for BSDI's OMAGIC and NMAGIC a.out formats.
OpenBSD fork in 1995. (I won't get into details here.) Many ideas and code have been shared both ways since then.
The introduction of a true 64-bit port, DEC Alpha, involved a lot of changes to even "machine-independent" portions of the system and helped ensure a 64-bit clean code. This was first released in NetBSD 1.1 (1995) which also added a new generic, machine independent audio subsystem with various drivers. Additional binary compatibilities were introduced for FreeBSD, Linux, Solaris, and DEC OSF/1 AXP.
The DEC Alpha port integration was completed for the 1.2 (1996) release. That release also added binary compatibility for HP-UX.
The fork of FreeBSD ports in 1997. This provided a system for installing third-party software. Following the existing naming scheme, it was called "pkgsrc". The NetBSD 1.3 release in early 1998 had pkgsrc packages built by a new bulk build framework. (It continues to grow with over 12,000 packages, most maintained for many platforms and operating systems. Its community is beyond just NetBSD and pkgsrc is the package system for MINIX3, Dragonfly, SmartOS, and others too.)
NetBSD 1.3 also added the ISA Plug and Play framework, DMA mapping, and booting compressed kernel support for a single floppy install. Also NetBSD began maintaining their fork of XFree86 X in their source.
NetBSD 1.4 (1999) introduced UVM, its new, totally rewritten virtual memory subsystem; a new, highly efficiency kernel memory pool allocator; wscons, the new architecture independent console driver; full USB support; and a name-service switch implementation.
NetBSD 1.5 (2000) added new generic kernel locking code, wsmux for keyboards and mice multiplexing (and hot-swapping), support for detaching of PCMCIA and CardBus, the new rc.d startup scripts system, user and group management tools, and the IPv6 implementation from KAME.
NetBSD had compiler moves from GCC to EGCS to GCC and introduced build.sh for full cross-compilation. The build.sh system, shipped in NetBSD 1.6 (2002), provided a mechanism, not offered at that time by other open source operating systems, for cross-building binary releases for 39 (and a lot more now) platforms on a near daily basis.
NetBSD 1.6 also added the Unified Buffer Cache, an efficient unified I/O and memory caching subsystem; the beginnings of ACPI support; and support for USB 2.0.
The new two-level thread scheduling system, Scheduler Activations, implemented in 2001 and merged to current in 2003 was released in NetBSD 2 in late 2004. It provided excellent performance on single CPU systems. NetBSD 2 also added SMP support for the i386, sparc, powerpc, and the new amd64 port. The xen port was also introduced.
NetBSD 2 also introduced cgd, the CryptoGraphic Disk Driver; the file system snapshot driver; Verified exec, the in-kernel file integrity subsystem; the /rescue recovery tools layout; and a fully dynamically linked system.
NetBSD 3.0 in late 2005 extended the kernel hardware autoconf framework for bus-independent rescans and to make it easy to attach/detach loadable drivers.
NetBSD 4.0 in late 2007 introduced the bluetooth stack with PCMCIA and USB drivers and support for cell phone networking, keyboards, mice, and headsets. It also introduced the iSCSI target (server) code; the new Kernel Authorization framework for improving management of credentials and privileged operations; the UDF file system implementation (for reading DVD-RAM and other devices); and tmpfs, an efficient memory filesystem.
The scheduler activations was replaced in NetBSD 5 (2009) by a new scalable 1:1 threading model that took better advantage of all CPUs and offered better support for real-time applications. Multiprocessor and multi-core systems was a focus with real-time scheduling extensions, kernel preemption, kernel synchronization primitives, processor sets, and dynamic CPU sets for thread affinity.
NetBSD 5 also introduced WAPBL, metadata journaling for FFS; Power Management Framework (with messaging support for drivers); and RUMP, for running unmodified kernel code in an emulated userspace environment. The ATF, Automated Testing Framework, was also added for improving testing of NetBSD. NetBSD also moved to X.org (from XFree86) for most architectures.
NetBSD 6.0 introduced the cryptographic pseudo-random number generators; the new kernel module subsystem (the kernel on many architectures was mostly modularized); the BSD-licensed device-mapper disk driver (for use with logical volumes); the netpgp utility for digital signatures; and time_t and dev_t were changed to 64 bits. ("This means that the NetBSD world no longer ends in 2037.") The NetBSD Packet Filter was also introduced; designed with SMP scalability and extensibility in mind.
The NetBSD 6 release supported 60 ports. (This is significant since this is a single operating system vendor supplying and supporting the kernel, system libraries, and complete userland for many architectures.) A few hardware platforms have been removed over the years, plus a few new ports have been started or added recently.
What do you think are the most significant NetBSD events or contributions from NetBSD (or first appearing in NetBSD)? I probably missed some important highlights. If you have any suggestions for my NetBSD book chapters in my Berkeley Unix history book, please let me know. It would also be great if someone can write an article about the great contributions or work related to networking introduced first in NetBSD.
DiscussionDiscuss this article below.
BSD Links· Advocacy
· User Groups