
On 9/22/05, Eric Niebler <eric@boost-consulting.com> wrote: Here's a wacky thought: can we turn boost-sandbox into CBAN
(the Comprehensive Boost Archive Network), and cherry-pick the best libraries from CBAN for inclusion in boost? If anybody could make something like this fly, it's boost. We'd need to look closely at the CPAN model to find out why it's successful.
Not so wacky at all. I'm a huge fan of both Perl and Boost, so here's my take on what makes CPAN work in the hopes that this might take us somewhere: - CPAN isn't *entirely* a free-for-all. You need to register yourself with PAUSE (http://pause.cpan.org/) in order to maintain and upload packages to CPAN. - Perl includes a built-in CPAN module that can be used to find and fetch code from CPAN from the command line (try "perl -MCPAN -e shell" if you're curious. No space between M and CPAN). If you know what you're looking for, installing a CPAN module can be a single command (perl -MCPAN -e "install Foo::Bar"). - The CPAN module walks the user through an interactive set-up process the first time they use it. - When you use the CPAN module to download and install modules, it can fetch and install any dependencies automatically. - There is a simple, well organized, searchable web site where all the modules can be found and there are README files for each of them. The web site is mirrored in many locations. - Packaging conventions. Every module contains a README file, MANIFEST of contents and stub Makefile for compiling. The standard Perl "Extutils::MakeMaker" module writes a Makefile with a number of useful targets, including one for creating a redistributable package of the code suitable for uploading to CPAN. - Even if you download them "by hand" from the CPAN web site, Perl modules are (usually) easy to build, test and install: "perl Makefile.PL && make test && make install" is usually enough. - Documentation is included with the code using the POD documentation format. Perl includes the command line "perldoc" tool can be used to view the documentation for any installed module. A Boost "module" system and attendant tools should be possible, and a number of the positive aspects of CPAN are already available as core pieces or best practices of Boost: - Dependencies can be documented in Jamfiles. Downloading them if you don't have them would need to be handled by some other tool. - Build, test and install process is usually simple, though it may involve some level of "getting to know" bjam. Perhaps some sort of interactive setup ala the CPAN one could be written to set defaults that would be used for future bjam invocations (e.g. choose default compiler, threading model, etc). Unlike Dave, most folks don't care to build code on more than one platform or compiler at a time. - Documentation is generally of high quality and included with all modules. There is a meta-format (Boost Book) used to document most libraries that can be renedered as HTML, PDF, etc. To make this a reality, a few more things would be required: - A CBAN web site. The Vault is passable, but it would need a lot of work before it was in the same league as the CPAN site. - A CBAN tool. A command line interface to browsing the CBAN repository and downloading and installing modules - Bjam "setup". Not sure if bjam supports any sort of "rc" file, but allowing a user to configure default settings and have them persisted for future bjam invocations would improve the overall experience for casual users. - Packaging standards (directory structure, required files, etc) and related tools (Jamfiles perhaps) analogous to ExtUtils::MakeMaker. This will make it easy for people to create and redistribute their modules. Hope this helps, -- Caleb Epstein caleb dot epstein at gmail dot com