Subject: [boost] Boost.Process: Formal review request
From: Boris Schaeling (boris_at_[hidden])
Date: 2012-12-08 20:42:41
I'd like to ask for a formal review of the library which is known as
- Docs: http://www.highscore.de/boost/process0.5/
- Code: http://www.highscore.de/boost/process0.5/process.zip
Since 2006 a lot of people spent a tremendous amount of work on a process
management library for Boost. Since then Boost.Process went through two
GSoC projects, had a formal review in 2011 where it got rejected, was
discussed at BoostCon, went through a complete overhaul afterwards, spun
off boost::asio::windows::object_handle and got a sponsorship. In fact the
library is around for so long and has attracted so much interest that it
could be called a de facto Boost library. People call it Boost.Process,
and there are some who use the library in their projects.
The main reason why Boost.Process is under construction for six years:
Differences between the supported platforms Windows and POSIX. There are
other libraries like Boost.Asio or Boost.Interprocess which have to deal
with platform differences, too. But in their case no core functionality is
affected. Classes like boost::asio::posix::stream_descriptor or
boost::interprocess::windows_shared_memory are nice to have, and no one is
worried that they only work on one platform.
Boost.Process has to deal with platform differences in core functions. For
example, resource leaking is unacceptable (zombie processes on POSIX and
open HANDLEs on Windows when child processes exit). Given that platforms
are very different two extreme solutions are possible: Abstract away
differences at all costs. Or tell the library user to call
platform-specific system functions. As none is satisfactory, a balance
between these extremes has to be found. But where this balance should be
exactly can be discussed with no end. Someone has to make a decision at
some point, and that will be another important role for the review
Looking back at what has been accomplished since the first review, I think
Boost.Process 0.5 is a huge step forward:
* The library is now fully customizable. While previous versions had a
function called launch() which was immutable, the current version is based
on things called executors and initializers. An executor is basically a
struct with member variables which will be passed as arguments to a system
function to spawn a child. Initializers set those member variables.
Library users pick initializers provided by Boost.Process or define their
own to setup executors.
* Boost.Process 0.5 is cleaner and more focused as it makes better use of
other Boost libraries. For example, previous versions had their own stream
classes. They were removed in the current version - Boost.Iostreams is
used instead. Now Boost.Process doesn't reinvent concepts or reimplement
functions anymore which belong in other libraries.
All of that makes me believe it's time for a new review.