
Botan Development Roadmap
========================================

Branch Stucture
----------------------------------------

Stability of branches is indicated by even or odd minor version numbers. The
minor number of the primary trunk is always odd and devel releases and
snapshots are made directly from it. Every once in a while a new even-numbered
branch is forked. All development continues on the main trunk, with fixes and
occasionally small features backported to the stable branch. Stability of API
and ABI is very important in the stable branches, whereas in trunk ABI changes
happen with no warning, and API changes are made whenever it would serve the
ends of justice.

Current Status
----------------------------------------

Currently (as of 2015-07-03) trunk is numbered 1.11 and is written in C++11,
unlike earlier versions which used C++98. In due time a new stable 2.0 branch
will be made off of trunk and afterwards trunk will be renumbered as 2.1. The
2.0 releases will be maintained with security and bug fixes at least until a
new 2.2 stable branch is created and likely for some time afterwards. In the
last decade the length of time between new stable trees being created has been
between 23 and 41 months, suggesting a support lifetime of 2-4 years for 2.0.x.

The 1.10 stable tree is, well, stable. There isn't enough project time to
backport all of the nice features from 1.11 (eg TLS v1.2, GCM, OCB, or
McEliece) to 1.10, even where it could be done while maintaining API/ABI
compat. The C++11 transition makes it especially hard for the 1.10/1.11
split. So if 1.10 does what you want now it probably will next week, but it
won't ever do much beyond that. If you want any feature or optimization or side
channel resistance added in the last 4 years you have to use 1.11. 1.10 will
continue to be maintained at the current level for at least a year after 2.0 is
released.

1.8 and all older versions are no longer maintained.

Supported Targets
----------------------------------------

The primary supported targets, which are tested with every commit by
continous integration, are GCC and Clang on Linux, Clang on OS X, and
MSVC 2013 on Windows, all on some form of x86.

Other processors, like ARM, MIPS, and POWER processors, and OSes, such
as OpenBSD, MinGW, or iOS are occasionally tested on an ad-hoc basis,
but breakage is somewhat more likely.

Ongoing Issues
----------------------------------------

Some infrastructure, scripts and such still exists only on the machines of the
primary developer.

Documentation could always use help. Many things are completely undocumented,
few things are documented well.
