The SwiftNIO team has made it a major pillar of our workflow to attempt to support Swift releases for a reasonably long time. Most users don't take advantage of this, preferring to stay on the most recent release of Swift, but we think it's important that you have confidence that newly written applications will get some meaningful amount of support going forward.
However, prior to this point we have never provided any consistent, clear guidance as to how long we will support a given Swift release for. This is unfortunate, because it encourages users to guess at our intentions, rather than communicating them clearly, and makes it hard for users to plan around our work. To that end, this post is a formal announcement of and commitment to a Swift version support policy.
From the time of the next non-patch Swift release, the top-level policy of all SwiftNIO projects will be to support the latest non-patch Swift release and the 2 immediately prior non-patch versions. That is, if the next Swift release was Swift 5.6, then we would support Swift 5.6 (the latest), and Swift 5.5 and 5.4 (the two prior versions). The definition of "support" in this context is "fully support", meaning that new features will be implemented across all the supported Swift versions where the language allows, and bugfixes will be applied on all supported versions.
However, in some cases it may not be possible for us to support both a new Swift version and an old one from the same codebase. If this happens, we will drop new feature development in the older version, but will continue supporting with bugfixes for the same duration as normal. As a hypothetical, if Swift 6 was the next Swift version, and we couldn't support it from the same codebase as one that supports Swift 5.5, we would produce a Swift-6-only codebase, but continue to apply bugfixes to the 5.5 and 5.4 code. When 6.1 came out, we would stop making bugfixes to 5.4, but continue supporting 5.5.
In this way, assuming Swift remains on a roughly six month release cadence, all Swift versions get at least a full 18 months of bugfixes.
For security patches, all supported Swift versions will receive security fixes. Additionally, we will backport security fixes as far as is practical. If a component has been entirely rewritten, such that we cannot easily validate the security fix, we will not backport it. In general, we do not guarantee to backport security fixes to any versions other than the supported ones, so for the best security practices you should be updating your Swift versions on at least an 18-month cadence.
We will be taking this policy into effect from the next non-patch Swift release, at which point we will drop support for Swift 5.2 and 5.3, leaving our supported versions as 5.4, 5.5, and swift-next.
Please feel free to ask any questions or express any concerns in this thread, and we'll do our best to answer them.