David A. Wheeler's Random Opinions

This page is a collection of short random opinions and links. I once had an essay about spam here; please see my separate page on stopping spam. Enjoy!

GNU/Linux vs. *BSDs Why does GNU/Linux get more wide use and press than the OSS/FS *BSDs (OpenBSD, NetBSD, FreeBSD)? After all, the *BSDs came first, are quite capable (I use OpenBSD sometimes), and assert that they are "more commercial friendly" because their licenses permit almost any use (while Linux's GPL license forbids certain activities). I think there are two reasons: the GPL license, and the bazaar model followed by Torvalds. The GPL license basically eliminates any economic reasons to "fork" the kernel. A GNU/Linux distributor can take an extension of the kernel from a competitor and use it him or herself, so there's no advantage to "hoarding" improvements. Obviously, there are multiple GNU/Linux distributors, but their underpinnings (the kernel, C library, etc.) are actually far more similar than different. Distributions do differ in things like file locations, but it's easier to account for this difference than fundamental differences in APIs. Also, the *BSDs have historically followed the "Cathedral" approach; they produce fine products, but without supporting hardware many people want. Basically, both the GPL (which forces people to work together) and the bazaar (which allows large numbers of people to work together) have enable GNU/Linux to have a larger development velocity than its competitors. I doubt that the *BSDs will disappear; if nothing else, most of the work in a GNU/Linux system works just as well on a BSD system, so they need not fall far behind. Apple's MacOS is now based on a *BSD, though it should be noted that an entire Apple system is proprietary too and thus doesn't have the end-user advantages of a fully OSS/FS system.


Rsync. Rsync is a tremendous program and is great for managing websites. Rsync can copy a tree of files from one place to another, cleverly reducing the amount of data it actually sends over the network while accurately handling symbolic links, timestamps, and so on. Combine it with openssh, and you can update a tree of files securely. I manage a website by modifying a local setup until I like the result, and then use rsync to update the real website. I also watch so I can see if anyone has mucked with my real website's contents - it hasn't happened yet. But even if someone modified the data contents of the website, I can restore the website quickly once I regain control over it. Here's the command line for a typical update:

  rsync -Cazv --rsh="ssh" source/ name@destination:/destination_path