The historical background of the *BSD 'base system' versus Linux

August 15, 2012

One of the periodically cited differences between Linux and the *BSDs is the *BSD idea of the 'base system'. In the *BSD world, this is the source tree for the kernel, the core runtime libraries, and whatever user level programs the *BSD considers sufficiently important and central; it is maintained (and distributed), essentially as a unit, by the *BSD's developers. Linux has no similar concept; the kernel is maintained and distributed by one group, the usual runtime library by another, and so on. Linux distributions have the job of assembling all of the bits necessary to make a coherent system.

I feel that one important thing to understand about this difference (especially before you start putting a lot of philosophical weight on it) is that it is in large part a product of history, specifically the history of each project.

All of the *BSDs are the literal descendents of BSD Unix, which itself is a direct derivative of the original Research Unix (specifically V7 Unix). From the beginning, Research Unix was developed as a single unit (partly because the people behind it had no choice) and then distributed that way, as just one big pile of binaries and source code. When UC Berkeley started distributing BSD, they of course continued things this way (for all sorts of reasons). Right from the start of their life, all of the *BSDs inherited this via 386BSD; in fact, they literally inherited a large source tree that contained the kernel, libc, commands, and so on. In this environment it would have taken extra work to not have a 'base system', work to split everything apart (and probably to create a dependency management system).

Linux came about completely differently. Linus Torvalds was interested in writing a kernel, but I don't think he had much interest in writing all of the user-level programs and libraries to go with it. Linux also was created at a time when there was an ever-increasing amount of open source versions of standard Unix commands being written by various other people and groups (most prominently the FSF). Most of these programs weren't being written for Linux (at least not initially); instead they were being developed independently for general use on all of the current Unixes. Naturally this created an environment without any attempt at a single source tree that claimed ownership of all of the pieces of a running Linux system (because such a claim would be absurd).

Or, to put it another way, from the start the *BSDs were developers (of the source trees they inherited from BSD Unix) and Linux distributions were aggregators (of general work being done independently by lots of separate developers). The nature of each was essentially forced on them by their surrounding circumstances; in each case it was the easier approach, sometimes by far.

It should be emphasized that the BSD source tree inheritance was the result of work by the original UCB developers of BSD Unix, who systematically worked to remove AT&T copyright code not just from the BSD kernel but from the entire BSD codebase (cf). Had UCB worked only on freeing the BSD kernel, most *BSDs might well look much like Linux today (and for the same reasons).

(This entry was sparked by reading this (via). Note that I do not endorse that article (for various reasons) and it's clearly outdated. Still, an interesting read.)

Written on 15 August 2012.
« When and where I fell out of love with Firefox
Why I hate vendors, printers edition »

Page tools: View Source, Add Comment.
Login: Password:
Atom Syndication: Recent Comments.

Last modified: Wed Aug 15 00:59:07 2012
This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.