1. 9
  1. 2

    Mind you: one of the reasons I liked the BSDs from the very beginning was that they offer an integrated user and development experience (as opposed to Linux), much like Windows did. What I did not like was that I had to recompile everything I wanted to use from scratch, which was and still is fairly problematic on low-powered machines. As an example, I spent a lot of time getting NetBSD to run on an old PowerBook G4 and the only way to do this was by fiddling with compile-time settings for the kernel. It’d have been much easier for me (not the developers!) if these settings had been available as runtime boot loader options.

    It’s probably a mistake to view the BSDs as monolithic here because that doesn’t reflect my experience with FreeBSD at all, in a few ways:

    • The kernel has a gdbserver that you can attach GDB (or, now, LLDB) to and inspect a system over a serial link.
    • The kernel has an interactive debugger lets you drop into a debugging session on the console, inspect and modify memory, and continue.
    • DTrace exposes kernel tracing to userspace.
    • KPIs are stable across a major release series. Before a major release is cut, there’s a call for people to add padding fields to structures that they will want to extend later. You can build a kernel module for FreeBSD X.Y and run it on X.(Y+N).

    There are a few things that you need to recompile to be able to use. For example, INVARIANTs (enable a load of assertions in the kernel) and WITNESS (lock-order checking in the kernel) are both kernel build-time configuration options.

    That said, the kernel documentation for Windows is far better than for FreeBSD, for precisely the reason that the author describes: you can’t go and look at what a kernel function does to try to figure out how to use it, you must rely on the docs. OpenBSD is meant to be better in this regard - they have a policy of not allowing merges of code unless they include documentation updates, though looking for things in section 9 of the manual I didn’t see much evidence of this (maybe it applies only to userspace interfaces?).