Botan4 Tracking Issue
It took almost 2.5 years from when development stopped on Botan2 until Botan 3.0 was released. That was suboptimal.
Goal this time around is that the entire Botan3->Botan4 development phase happens in a single release cycle. In one quarter there is a Botan 3.y.0 feature release, same as every quarter. The next quarter sees the release of Botan 4.0.0, plus a Botan3 patch release as required.
This requires effectively pre-loading almost all of the development work in advance, such that once master moves to 4.0-pre the process is mostly just hitting merge-merge-merge on a pile of already existing PRs. Thus the very long lead time (and the desire for a memorable ticket number, since this meta issue will be open for years - still sad I missed out on #4444).
Note
For issues or questions related to specific subtasks, please open up a new issue for discussion, and reference this ticket. Otherwise, this issue is likely to become clogged with many unrelated conversations.
General Outline
Botan4 is still C++20. The gains we'd get from C++23/C++26 seem minimal (not zero, but nothing amazing) and language bumps do have an effect on end users. Hopefully MISRA eventually allows C++20...
Increasing compiler versions TBD. Certainly Clang minimum version increases, so we can use std::source_location (prior work done by @KaganCanSit that could be resurrected: #5084). Increasing minimum GCC to 14 would ensure we always have __builtin_addc which would be useful for optimization purposes. At least Clang 17 for the CWG 2518 fix.
Timeline
TBD. Maybe mid 2027?
Significant Development Work
The bigger projects
For some of these it may be possible to do significant amounts of work on master beforehand to get ready, which will make life simpler. In particular for DHE/RSA/CBC in TLS it may be possible to just make them optional (ie tls does not hard depend on dh module); this improves things on master immediately for those who would prefer a smaller attack surface, and makes the final incompatible change easier. Splitting the key types and the ML-KEM/ML-DSA cleanups likewise I think a lot of prep can be done without violating SemVer.
Incompatible Changes
Misc mostly easy changes, no need to preload these can probably all be done over a weekend.
Module Removal
If you, dear reader, are relying on any of these modules/algorithms in your code, please asap open a sub-issue for discussion, so we are aware of your usage. Do not reply to this ticket about specific modules.
Currently deprecated but not removed
These are already deprecated and certainly not desirable but kept for Botan4
crc32
dsa
gost_3410
md5
siphash
streebog
x919_mac
Proposed, now cancelled, incompatible changes
Botan4 Tracking Issue
It took almost 2.5 years from when development stopped on Botan2 until Botan 3.0 was released. That was suboptimal.
Goal this time around is that the entire Botan3->Botan4 development phase happens in a single release cycle. In one quarter there is a Botan 3.y.0 feature release, same as every quarter. The next quarter sees the release of Botan 4.0.0, plus a Botan3 patch release as required.
This requires effectively pre-loading almost all of the development work in advance, such that once
mastermoves to 4.0-pre the process is mostly just hitting merge-merge-merge on a pile of already existing PRs. Thus the very long lead time (and the desire for a memorable ticket number, since this meta issue will be open for years - still sad I missed out on#4444).Note
For issues or questions related to specific subtasks, please open up a new issue for discussion, and reference this ticket. Otherwise, this issue is likely to become clogged with many unrelated conversations.
General Outline
Botan4 is still C++20. The gains we'd get from C++23/C++26 seem minimal (not zero, but nothing amazing) and language bumps do have an effect on end users. Hopefully MISRA eventually allows C++20...
Increasing compiler versions TBD. Certainly Clang minimum version increases, so we can use
std::source_location(prior work done by @KaganCanSit that could be resurrected: #5084). Increasing minimum GCC to 14 would ensure we always have__builtin_addcwhich would be useful for optimization purposes. At least Clang 17 for the CWG 2518 fix.Timeline
TBD. Maybe mid 2027?
Significant Development Work
The bigger projects
For some of these it may be possible to do significant amounts of work on
masterbeforehand to get ready, which will make life simpler. In particular for DHE/RSA/CBC in TLS it may be possible to just make them optional (ietlsdoes not hard depend ondhmodule); this improves things onmasterimmediately for those who would prefer a smaller attack surface, and makes the final incompatible change easier. Splitting the key types and the ML-KEM/ML-DSA cleanups likewise I think a lot of prep can be done without violating SemVer.Incompatible Changes
Misc mostly easy changes, no need to preload these can probably all be done over a weekend.
create_encryption_op) [also consider using some nasty_botan_internal_prefix instead of just_]Module Removal
If you, dear reader, are relying on any of these modules/algorithms in your code, please asap open a sub-issue for discussion, so we are aware of your usage. Do not reply to this ticket about specific modules.
cryptoboxshould be removed in Botan4dilithium_aesshould be removed in Botan4dliesshould be removed in Botan4gost_28147should be removed in Botan4gost_3411should be removed in Botan4keccaksupport be removed in Botan4 #4721kyber_90sshould be removed in Botan4legacy_ec_pointshould be removed in Botan4lionshould be removed in Botan4mceshould be removed in Botan4md4should be removed in Botan4noekeonshould be removed in Botan4shake_ciphershould be removed in Botan4tpm(and alsouuid) should be removed in Botan4tpmis the TPMv1 only module,tpm2supporting TPMv2 is stayingCurrently deprecated but not removed
These are already deprecated and certainly not desirable but kept for Botan4
crc32dsagost_3410md5siphashstreebogx919_macProposed, now cancelled, incompatible changes