Date: 2022-09-13
Accepted (lazy consensus).
Implemented.
James 3.7.0 uses Netty 3 for its TCP stacks (IMAP, SMTP, LMTP, MANAGESIEVE, POP3).
Latests Netty 3 minor releases dates from 20XX. This brings concerns regarding security (unmaintained dependency).
Netty 4 delivers many enhancements compared to Netty 3.
Upgrade James to Netty 4.
Significant rewrite of the protocol stack. Though the count of lines of code involved is low, the code is tricky and would need several iteration to be stabilized. For this reason, James 3.7.0 was released prior the Netty 4 adoption.
Associated risk:
Benefits: Netty 4 natively supports graceful shutdown, which enables easily implementing such a feature in James.
Netty 4 upgrades was also the opportunity to significantly improve test coverage for IMAP protocol stacks and IMAP 4 extensions, which allowed fixing numerous bugs. To be mentioned:
To be noted that Netty version used by James needs to be aligned with those of our dependencies:
Netty upgrades thus needs to be carefully done. So far we successfully aligned versions, so the overall compatibility looks good.
We did not yet succeed to enable native epoll, native SSL.