posted by Jon Nelson on Mon 25th Nov 2002 02:49 UTC
IconBoa is a single-tasking HTTP server. Boa does not fork a copy of itself or spawn a thread to handle each incoming connection, but rather internally multiplexes the connections. Boa only forks for CGI programs, automatic directory generation, and automatic file gunzipping, each of which must be a separate process. The primary design goals of Boa are speed and security, in the sense of "can't be subverted by a malicious user", not "fine grained access control and encrypted communications". Boa is not intended as a feature-packed server; if you want one of those, Boa is probably not the right choice.

Introduction: What is Boa?

Boa is written in C and uses the GNU autoconf system to provide a portable code base. It has been reported to run out-of-the-box on many different flavors of UN*X, and with minor tweaking on many more. Currently Boa is developed on a Linux platform, on a variety of distributions, most notably RedHat Linux, Debian GNU/Linux, andGentoo Linux. Additionally, Boa is available under FreeBSD 4.6 as a port. Boa has also been reported to run on OpenBSD, HP/UX, Solaris 7 and 8, AIX, and even the Cygwin environment for Windows. An earlier release of Boa was even ported to run under DOS!

Boa excels at certain types of web serving, notably static documents, which means documents served directly off of disk, without involving additional processes. Though desgined before 100Mbit ethernet, Boa can easily saturate 100Mbit Ethernet links on even modest hardware. Boa was designed before such hardware was readily available, and was specifically designed to use resources efficiently. In fact, Boa is actually one of the oldest actively developed web servers!


Boa was written sometime in the early 1990's by Paul Philips. More accurately, the first announcement I could find regarding Boa dates back to September 20, 1995, in which Paul announces v0.90 of "The Boa webserver''. Unfortunately, I cannot locate any release announcement prior to this, although Boa was undoubtably under development earlier than this. Shortly thereafter version 0.91 was released.

In 1996, I encountered Boa in my quest for a lightweight http server that fit the following rigorous criteria: it must be able to run well on the modest hardware I had available and I should be able to look at the code and at least pretend that I knew what was going on. The hardware I had available was a Zeos Intel i386 with 2MB of RAM and 120MB of very slow drive storage. After some initial research, I downloaded and tried to compile several servers, including Apache, NCSA, thttpd and Boa (version 0.91). I wasn't able to get Apache to run in a satisfactory manner; I felt it was much too heavy for the hardware. NCSA ran slowly, and with thttpd and Boa I encountered various bugs. I resolved initially tried fixing some of the bugs, but I wasn't able to understand thttpd's code enough to be able to effectively contribute. When I turned to Boa, I immediately felt that the code was much cleaner. After some time, I felt I was successful in my attempted bug fix, so I wrote Paul Philips. He replied that two others had taken 0.91, continued development and released 0.92, which he hadn't even seen yet. I took the information he provided me, and contacted Larry Doolittle. I contributed a patch or two, and gradually became more involved.

Version 0.92 was the next major release, and was the first by someone other than Paul. Larry Doolittle handled this release. Version 0.92 went through several iterations, and the ``official'' release, 0.92o was on December 23, 1996. There were a number of point releases after that, finally ending at 0.92q. Today, you can find still many variants of the 0.92 release series in various hardware and software devices.

Version 0.93 was released shortly thereafter, and was treated as the "development'' version for a long time - more than four years, in fact. Finally, on January 17, 2000 version 0.94 was released. As was the usual case, 0.94 went through a few minor point releases, but solidified very nicely.

Version 0.94 represented an enormous amount of work, and many hundreds of CVS commits, but the result was a significantly faster, cleaner, and more robust webserver.

Table of contents
  1. "Introduction, History"
  2. "Performance"
  3. "More Performance, Conclusion"
e p (0)    16 Comment(s)

Technology White Papers

See More