Boost logo

Boost :

From: Michael D. Crawford (crawford_at_[hidden])
Date: 2001-04-02 21:30:01

May I have the temerity to suggest you have a look at:


It is available under the MIT License. It was written by my friend Andy Green
of The Electric Magic Company and his clients Learning in Motion.

ZooLib allows one to write native multithreaded C++ applications for a variety
of platforms from a single source base with little or no need to write
platform-specific client code. Unline some cross-platform environments, it is
_easy_ to escape to platform-specific code when you need or want to, and
platform specific versions of things like file selection dialogs exist so you
can filter by three letter extension on windows but 32-bit type code on the
Mac OS. It also has pluggable widget renderers so your applications have a
native look and feel.

While not complete, it is a mature product and has been in use in some
substantial commercial products for years. Andy spent about nine years
working on it for his private use and the use of his clients before putting it
into open source last fall.

I feel that ZooLib answers the objection that a Boost GUI library could not
meet the abilities of a commercial GUI library; I believe it exceeds what is
available in many of them and whenever a client comes to me wanting a product
developed in any of the other more widely known GUI libraries for one of the
supported platforms I can always make a strong case for using ZooLib instead,
even if they only want delivery of a single platform.

I spent nearly a year working with Andy developing a substantial product in it
on Mac OS and Windows for my client and leading a developer beta test of it
before the open source release; contrast this with many codebases you can
locate through that are released the minute the developers get something
to link, let alone execute without crashing all the time.

What ZooLib still needs:

Some apps that use ZooLib:

Presently it works on Mac OS PowrePC and 68k, BeOS Intel, Linux x86 and
Windows x86. BeOS PowerPC is coming soon, and BSD will come as soon as I can
spare the cash for a hard drive to install Yet Another Operating System.
Other Linux processors need some work as would Windows NT for Alpha.

My new hard drive will also get Solaris x86, and I have long term plans to buy
Solaris Sparc and Alpha Linux machines and eventually have a rackmount with a
couple dozen machines running all the major Linux distros, all the versions of
Windows and a variety of other operating systems on lots of different processors.

The currently available code won't compile in Visual C++ but that has already
been worked around and Visual C++ support will be available in the next source
drop. It will build using the CodeWarrior Pro for Windows compiler or the
CodeWarrior for Mac OS cross-compiler.

I believe ZooLib reasonably conforms to the objectives of Boost. The MIT
License should be fine with you (same license as XFree86 and I think the PGP
Freeware) and it uses such things as templates and exceptions. It uses STL
just a little but not extensively so because reasonably conformant STL
implementations were not available on all the supported platforms until pretty
recently. It uses STL strings pretty widely though.

It uses a small amount of assembler to enable atomic operations in some of the
platform-specific code. This is needed because ZooLib is multithreaded and
has such things as a thread-safe reference counted smart pointer template, and
we need platform-independent atomic increment, decrement to adjust the
reference counts.

There is just a little assembler and it is very localized - there are very few
platform specific files at all for each platform - bringing ZooLib up on a
completely new platform should be just a few weeks work for someone of the
caliber of a Boost programmer.

Problems with inline assembler presently keep it from building on BeOS
PowerPC; I'm going to write a non-inline assembler (.asm sources or whatever)
atomic operations library for that platform so I can support it, and other
platforms that don't have inline assembly can use it as a model for their port.

There is no documentation yet but there is some sample code and there is a
developer's mailing list where many of us are happy to answer questions.

The next source code drop will likely include full doxygen output, and doxygen
for the sample code and more sample code.

I'm tinkering around with DocBook on my Linux laptop - we have settled on
DocBook as the documentation format for ZooLib because of its many advantages.
 The Linux Documentation Project ( also uses DocBook.

I could not have a dedicated Linux machine until recently because my laptop
was busted and it took a while to get it repaired, but it's working great
again and I leave it running with Samba and Netatalk so I can build from
Windows, Mac OS and Linux simultaneously all from one source heirarchy - I
need one more machine before I can do BeOS without having to reboot or copy my

That's pretty much how Andy works too, I think he's got four machines, one of
which is a Linux fileserver.

Michael D. Crawford
GoingWare Inc. - Expert Software Development and Consulting
   Tilting at Windmills for a Better Tomorrow.

Boost list run by bdawes at, gregod at, cpdaniel at, john at