
The following changes were performed on the original source code:

- removed slf4j, log4j, log4j2 logging
- removed internal classes for GraalVM (SCM)
- removed internal classes for Blockhound
- removed jetbrains annotations
- private copy of jctools in io.netty.jctools
- removed SecurityManager code
- add module info
- removed lzma dependency (too old for module)
- use JdkZLibDecoder/JdkZlibEncoder in websocketx
- removed JettyAlpnSslEngine
- removed JettyNpnSslEngine
- removed NPN
- use of javax.security.cert.X509Certificate replaced by java.security.cert.Certificate (where possible)
- unmaintained(?) com.jcraft.zlib copied to io.netty.zlib
- precompiled io.netty.util.collection classes added after maven compile to this project
- refactored SSL handler to a separate subproject netty-handler-ssl
- refactored compression codecs to separate subproject netty-handler-codec-compression
- moved netty-tcnative/openssl-classes to netty-internal-tcnative
- removed logging handler test
- removed all native image stuff and native image handler test (therefore, no graalvm support)
- removed all windows related code
- removed all macos related code (including kqueue)
- removed all aarch64 related code
- removed the direct brotli4j dependency by rewriting Brotli4jOptions to not use Encoder.Parameters
- removed deprecated channel-udt (transport-udt)

Challenges for Netty build on JDK 21

- unmaintained com.jcraft.jzlib, subproject netty-zlib maintains a copy of com.jcraft.zlib
- JCTools uses sun.misc.Unsafe, not VarHandles, subproject netty-jctools maintains a copy of jctools
- PlatformDependent uses sun.misc.Unsafe. Tests run successful by -add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED and
  --add-opens=jdk.unsupported/sun.misc=ALL-UNNAMED
- finalize() calls in PoolThreadCache, PoolArena are deprecated
- when using boringssl static, setting of SSLContent.useTasks to false makes tests hang. Tests using false setting were removed.
- native code jars with module info

Subproject organization

Original netty subproject names are not related to package names. I reorganized the names to allow better assignment
between subproject name, package name, artifact names, and java module. The following reorgnizations were performed:

netty/all -> [todo]
netty/bom -> [todo]
netty/buffer -> netty-buffer
netty/codec -> netty-handler-codec, netty-handler-codec-compression, netty-handler-codec-protobuf
netty/codec-dns -> [todo]
netty/codec-haproxy -> [todo]
netty/codec-http -> netty-handler-codec-http, netty-handler-codec-rtsp, netty-handler-codec-spdy
netty/codec-http2 ->
netty/codec-memcache ->
netty/codec-mqtt ->
netty/codec-redis ->
netty/codec-smtp ->
netty/codec-socks ->
netty/codec->stomp ->
netty/codec-xml ->
netty/common -> netty-util
netty/handler -> netty-handler
netty/handler-proxy
netty/handler-ssl-ocsp
netty/resolver -> netty-resolver
netty/resolver-dns ->
netty/resolver-dns-classes-macos -> [dropped]
netty/resolver-dns-native-macos -> [dropped]
netty/transport -> netty-channel
netty/transport-classes-epoll -> netty-channel-epoll
netty/transport-native-kqueue -> [dropped]
netty/transport-native-unix-common -> netty-channel-unix
netty/transport-native-unix-common-tests -> netty-channel-unix
