Download DragonFly BSD 1.6.0
Anyone who thinks of a BSD-based operating system will immediately think of one of the three well-known BSD variants, FreeBSD, OpenBSD or NetBSD. But there are also several other BSD variants available, such as PC-BSD and DragonFly BSD. The latter is a fork of FreeBSD 4.8 that was released around June 2003 because DragonFly BSD project leader Matthew Dillon disagree was with the chosen development strategy and focus areas for FreeBSD 5. For an overview of his goals for DragonFly BSD, see this page completely pierce. DragonFly BSD 1.6.0 has been available for a few days and contains a lot of improvements. The announcement of this version looks like this:
Version 1.6.0:
1.6 is our fourth major DragonFly release. DragonFly’s policy is to only commit bug fixes to release branches.
The biggest user-visible changes in this release are a new random number generator, a massive reorganization of the 802.11 (wireless) framework, and extensive bug fixes in the kernel. We also made significant progress in pushing the big giant lock inward and made extensive modifications to the kernel infrastructure with an eye towards DragonFly’s main clustering and userland VFS goals. We consider 1.6 to be more stable then 1.4.
- Continued work on LWP/PROC separation.
- Continued pkgsrc integration.
- Fix refcount bugs in the kernel module loader and unloader.
- Lots of netif and serializer cleanups and fixes.
- Lots of softupdates, filesystem, and buffer cache related fixes.
- Remove more of the old ports-related infrastructure.
- Major documentation cleanups.
- Major code cleanups, ansification.
- Change the system #include topology so that each include file is responsible for #include’ing any dependant include files.
- Fix a bug in the PF fragment cache.
- Random number generator: Instead of generating entropy from selected interrupts (and none by default), we now generate entropy from all interrupts by default and rate limit it to not interfere with high performance interrupts.
- Random number generator: Completely replace the algorithms, remove limitations on returned bytes from /dev/random (which only served to cause programs to not use /dev/random due to its lack of dependability). Add the ability to seed the RNG. Do some automatic initial seeding at boot.
- Adjust ssh to find the pkgsrc X11BASE instead of the old ports X11BASE.
- Fix some compatibility issues in /bin/sh.
- Fix a small number of critical section enter/exit mismatches.
- Bring in a bunch of new malloc() features from OpenBSD (guard pages, free page protection, pointer guard, etc).
- Clean up the DragonFly build system’s automatic .patch handling.
- Bring in openssh 4.3p2.
- Retire libmsun. It was replaced by NetBSD’s libm.
- Fix a bug in the NFS timer/retry code.
- Fix issues related to wide-char support.
- Fix a number of private TSS bugs related to threaded programs.
- Completely rewrite the user process scheduler and usched APIs.
- Add system calls that allow a blocking/non-blocking flag to be passed independent of the O_NONBLOCK state of the descriptor.
- Remove all fcntl(… O_NONBLOCK) calls from libc_r, use the new system calls instead. This solves numerous problems with file descriptors shared between threaded and non-threaded programs getting their non-blocking flag set, and then blowing up the non-threaded program.
- Add additional red-black (RB) tree function support for ranged searches.
- Get rid of gdb -k, replace with a separately built kgdb, and build a separate libgdb as well.
- Implement a VM load heuristic. Remove the full-process SWAP code which never worked well and replace with page-fault rate-limiting code based on the VM load.
- Fix a serious bug in adjtime()’s microseconds calculation.
- Fix a serious bug in libc’s strnstr() function. The function was testing one byte beyond the specified length limit. This can cause a seg-fault when, eg using strnstr() on a memory mapped file whos last byte abuts the end of the VM page.
- Bring in sendmail 8.13.7.
- Bring in SHA256 support from FreeBSD.
- Implement a hardlink-mirroring option (-H) in cpdup.
- Add missing code needed to detect IPSEC packet replays.
- Enable TCP wrappers in sshd.
- Restrict recursive DNS queries to localhost by default.
- Massive reorganization and rewrite of the 802_11 subsystem, with many pieces taken from FreeBSD.
- Fix a number of issues with user-supplied directory offsets blowing up readdir/getdirentries for NFS and UFS.
- Normalize internal kernel I/O byte lengths to ‘int’ and remove a ton of crazy casts to and from unsigned int or size_t.
- Remove NQNFS support. The mechanisms are too crude to co-exist with upcoming cache coherency management work and the original implementation hacked up the NFS code pretty severely.
- Remove VOP_GETVOBJECT, VOP_DESTROYVOBJECT, and VOP_CREATEVOBJECT. They never lived up to their billing and DragonFly doesn’t need them since DragonFly is capable of aliasing vnodes via the namecache. Rearrange the VFS code such that VOP_OPEN is now responsible for associating a VM object with a vnode.
- Formalize open/close counting for the vnode and assert that they are correct.
- Remove the thread_t argument from most VOP and VFS calls. Remove the thread_t argument from many other kernel procedures.
- Integrate FreeBSD’s new ifconfig(8) utility.
- Fix a race condition in the floating point fault code that could sometimes result in a kernel assertion.
- Fix a crash in the TCP code when the MTU is too small to support required TCP/IP/IPSEC options and headers.
- Separate EXT2 conditionals from the UFS code, copying the files in question to the EXT2 directory instead of trying to conditionalize them. Also remove function hooks and other code mess that had been implemented to allow the UFS code to be used by EXT2.
- Greatly simplify the lockmgr() API. Remove LK_DRAIN, LK_INTERLOCK, and many other flags. Remove the interlock argument.
- Fix a bug in the POSIX locking code (lockf). Actually, completely rewrite the POSIX locking code. The previous code was too complex and mostly unreadable.
- Do a major clean up of all *read*() and *write*() system calls, and iovec handling.
- Replace many instances where LWKT tokens are used with spinlocks.
- Make spinlocks panic-friendly. Properly handle the detection of indefinite waits and other deadlock issues.
- Improve network performance by embedding the netmsg directly in the mbuf instead of allocating a separate netmsg structure for each packet.
- Implement both shared and exclusive spinlocks. Implement a much faster shared spinlock. Cache the shared state such that no locked bus cycle operation is required in the common case.
- Implement msleep(). Use a novel approach to handling the interlock that greatly improves performance over other implementations.
- Add cpu binding support to the scheduler and add a system call to access it. A user process can be bound to a subset of cpus.
- Prefix all syscall functions in the kernel with ‘sys_’ to reduce function prototype pollution and incompatibilities, and to eventually support virtualized kernels running in userland.
- Port the enhanced SpeedStep driver (EST) for cpu frequency control.
- Remove the asynchronous syscall interface. It was an idea before its time. However, keep the formalization of the syscall arguments structures.
- Add a facility which statistically records and dumps program counter tracking data for the kernel.
- Improve kernel SSE2-based bcopies by calling fnclex instead of fninit.
- Major BUF/BIO work – make the entire BUF/BIO subsystem BIO centric.
- Major BUF/BIO work – get rid of block numbers, use 64 bit byte offsets only.
- Major BUF/BIO work – Clean up structures and compartmentalize driver-specific private fields. Rewrite and simplify device and vnode strategy APIs.
- Major BUF/BIO work – Remove B_PHYS. There is no longer any differentiation between physical and non-physical I/O at the strategy layer.
- Major BUF/BIO work – Replace the global buffer cache hash table with a per-vnode RB tree. Add sanity checks. Require that all vnode-based buffers be VMIO backed.
- MPSAFE work – Implement the parallel route table algorithm.
- MPSAFE work – Make the user process scheduler MPSAFE.
- MPSAFE work – File descriptor access is now MPASFE. Many fd related functions, like dup(), close(), etc, are either MPSAFE or mostly MPSAFE.
- MPSAFE work – Push the BGL deeper into the kernel call stack for many system calls.
- MPSAFE work – Make the process list MPSAFE.
- MPSAFE work – Make all cred functions MPASFE.
- NRELEASE – compilable kernel sources are now included on the ISO.
[break]
Version number | 1.6.0 |
Website | Dragonfly BSD Project |
Download | |
License type | Prerequisites (GNU/BSD/etc.) |