Contribution

How to make your Bio++ code available to others?
Several possibilities exist for that purpose, and several factors are to be considered to answer this question. The best solution depends on the answer to all these questions.

Does your code address a general problem or is it specific to a certain task?
If your code is generic enough, it might be worth integrating it in the libraries so that many other can re-use it. If it is specific, it is usually better to keep it separate so that the main libraries do not become overloaded with classes and functions that will not be used by most of the users.

Can your parts of your code be re-used in other analyses ?
If yes, then the code should be designed as a library, otherwise, as a standalone program. Library components can be integrated in existing library, or in a new library in the project. The number of available libraries in Bio++ has increased over time, with the apparition of more specific libraries dedicated to genomics (e.g. bpp-seq-omics), database access (bpp-raa) or graphical interfaces (bpp-qt).

Will your code be maintained ?
The code integrated in the Bio++ libraries need to be maintained, either by you or someone else. This is another reason why highly specific code, only used by one developer, is usually not integrated in the main libraries.

Is your code based on a published algorithm?
Unless it addresses a trivial task, we tend to include only published algorithm in Bio++, with appropriate references, so that the user always know what he is using. This is particularly important for new models.

Does your code depends on external library ?
The Bio++ main libraries (bpp-core, seq, phyl, popgen) depend only on the C++ STL library. If your code contains other dependency, it has to be in a separate library/program. Within the Bio++ project, the bpp-raa library for instance depends on zlib, and bpp-qt on the Qt library. As all classes and function are in the bpp namespace, the Bio++ libraries cansafely be used together with other libraries such as libSequence, SeqAn or boost.