Boost logo

Boost :

Subject: [boost] [gsoc] Boost.Process done
From: Boris Schaeling (boris_at_[hidden])
Date: 2010-08-15 08:03:04

Here are the results of the Boost.Process project within this year's
Google Summer of Code program: We have a complete library to manage system
processes now!

If you like to play around with the library download the ZIP file from
<>. As it's a
header-only library simply copy the files to your Boost folder. If you
like to quickly check the documentation click on

The library is now complete and basically ready for a review. As there
have been so many Boost.Process drafts before (after all the first version
was created 2006) this library's version number is 0.4. This will somehow
make it possible to refer to the various drafts if it's necessary.

For now I would appreciate if the library's test cases are run on as many
platforms as possible. After copying the files from the ZIP file to the
Boost folder change to libs/process/test/ and run bjam - that's all!

What has been changed?

* All previous Boost.Process drafts including Ilya's 2008 version from the
vault have been thoroughly studied to create a better version. From the
multiple Boost.Process drafts which have been floating around since 2006
we took the best ideas and created a new unified version.

* The design and implementation of the library have been simplified. The
library's API is smaller, and the implementation is easier to understand.
It should be possible to benefit from this library as quickly as possible.
Even developers who have no experience in managing system processes should
be able to do so easily.

* There are no POSIX and Windows specific classes anymore (posix_context,
posix_child, win32_context, win32_child etc. have been dropped). Instead
of trying to support each and every feature platforms provide extension
points have been defined. They enable library users to "link in" those
platform specific features they are interested in.

* For the first time there is full support for synchronous and
asynchronous operations. While asynchronous operations are built on top of
Boost.Asio synchronous operations can be utilized without that library.
Developers don't need to include any Boost.Asio headers and don't need to
learn about Boost.Asio if they don't need asynchronous operations.

* Stream behaviors define if and how standard streams can be used by a
child process. While the various stream behaviors were defined as an
enumeration or a boost::variant in previous Boost.Process drafts they are
now implemented as classes. This makes it possible for developers to
create new stream behaviors.

* The code to start child processes on POSIX platforms has been carefully
adapted to support multi-threaded applications (it turned out that this
code was wrong in all Boost.Process drafts so far). The documentation
explains what you need to take care of if you want to create child
processes in a multi-threaded application on POSIX platforms.

* The documentation is new and has been shortened and simplified. There is
a user guide which can be read in 10 minutes and introduces all the major
features of the library. The documentation is now also based on Quickbook.

* The test cases have been restructured to simplify them. They can now be
run without patching Boost.Test and without setting a path to a helper
executable in the source files - it's now all automatic. They are all
passed successfully with MSVC 9 (2008) and g++ 4.2.1.

What is currently missing?

* Pipelines are not (yet) supported. If you have been using
boost::process::launch_pipeline() there is nothing in this Boost.Process
draft you can use instead. Depending on feedback this feature will be
added again (there was simply no time yet to do this).

We hope that after four years, two Google Summer of Code programs and
countless drafts this new version will finally become the official
Boost.Process library so many have been waiting for.

Boris and Felipe

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