For at least two weeks, I've been rewriting VCS Made Easy from scratch (and it's already working fairly well), a project I announced a long time ago. It's being written in C++ and the code is organized in three (independent) layers:

  • The helper library: This provides classes to access operating system specific details. Among others, it has classes to manage processes, users, files, directories, etc. Everything is very simple and, depending on how you look at it, incomplete. I will probably need to add much more functionality to the existing classes (specially, the ones to manage the file system are very poor) and some new ones.
  • The vcsme library: This includes all the logic of the program in a frontend-independent way and uses the helper library.
  • The console frontend: Uses the vcsme library to service user requests. It does almost nothing on its own, aside parsing the command line.

So far, so good. But now I realize that many things I'm doing in the lowest layer, the helper library, are already implemented in Boost. More specially, what I'm interested in is the Boost Filesystem library. However, if I decide to use this one, I may end up using other functionality, such as the Boost Test library (due to its execution monitor and the unit tests framework) and the Boost Format library (to remove several ugly usages of std::ostringstream). These classes are more tested, more portable and more complete.

Unfortunately, there are some disadvantages. First of all, the Boost source package is huge (around 10Mb). And the binary ones are too, depending on which packaging system you use. This is solvable, though, if package maintainers split the Boost package into multiple small parts (like Debian does. (And I'll probably do it in pkgsrc.)

But the biggest inconvenient I find is that Boost does not cover all my needs, so I might be using it for a few stuff, but still need a lot of custom classes. AFAICT, there is no library to manage processes nor users, a thing I need for this specific project. However, I also think that if I keep the code clearly organized, these custom classes may, some day, end up being part of Boost (and this could be really, really nice).

So now I'm faced the choice of whether to use Boost or not... any comments?