← All tasks
javanetty/netty #16006Not a task: not reproduced

OSGI: mismatch between a Fragment-Host and a Bundle-SymbolicName that it should attach to

envgap__netty__netty-16006

01 / FAILURE SIGNATURE

As reported upstream

java.lang.UnsatisfiedLinkError: failed to load the required native library
Not a benchmark task.
  • In a clean container the reported failure did not reproduce, or the known fix did not make the project run.

02 / ENVIRONMENT RECIPE

Base commit
caa07bb7fa8438c0fa887e0541e7efcbf51c7979
Manifest
codec-native-quic/pom.xml
Reproduce
Awaiting issue-specific recipe
Run under trace
Awaiting a meaningful runtime command

03 / ORIGINAL ISSUE TEXT

netty/netty #16006 · read the original issue
Hello,

I'm working in an OSGI enviroment (Apache Felix 7.0.5) and I encounter the following issue:

```
2025-12-10T10:13:15.204 [WARN] reactor.core.Exceptions {ForkJoinPool-1-worker-6} - throwIfFatal detected a jvm fatal exception, which is thrown and logged below:
java.lang.UnsatisfiedLinkError: failed to load the required native library
        at io.netty.handler.codec.quic.Quic.ensureAvailability(Quic.java:87)
        at io.netty.handler.codec.quic.QuicheQuicSslContext.<init>(QuicheQuicSslContext.java:160)
        at io.netty.handler.codec.quic.QuicSslContextBuilder.build(QuicSslContextBuilder.java:404)
        at reactor.netty.http.Http3SslContextSpec.sslContext(Http3SslContextSpec.java:105)
        at reactor.netty.tcp.SslProvider.<init>(SslProvider.java:343)
        at reactor.netty.tcp.SslProvider$Build.build(SslProvider.java:650)
        at reactor.netty.http.client.HttpClientSecure.<clinit>(HttpClientSecure.java:82)
        at reactor.netty.http.client.HttpClient.protocol(HttpClient.java:1395)
        at com.livingobjects.longback.core.internal.reactive.client.HttpClientMethodImpl.setUpNettyClient(HttpClientMethodImpl.java:452)
        at com.livingobjects.longback.core.internal.reactive.client.HttpClientMethodImpl.lambda$execInternal$26(HttpClientMethodImpl.java:352)
        at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:47)
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:75)
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:54)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4569)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:432)
        at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:335)
        at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:294)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:375)
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:200)
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:82)
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:75)
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:54)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4569)
        at reactor.core.publisher.MonoSubscribeOn$SubscribeOnSubscriber.run(MonoSubscribeOn.java:129)
        at reactor.core.scheduler.ExecutorScheduler$ExecutorTrackedRunnable.run(ExecutorScheduler.java:192)
        at com.livingobjects.longback.core.internal.execution.Dispatchers.lambda$execute$0(Dispatchers.java:26)
        at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1423)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
Caused by: java.lang.UnsatisfiedLinkError: could not load a native library: netty_quiche42_linux_x86_64
        at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:244)
        at io.netty.handler.codec.quic.Quiche.loadNativeLibrary(Quiche.java:80)
        at io.netty.handler.codec.quic.Quiche.<clinit>(Quiche.java:59)
        at io.netty.handler.codec.quic.Quic.<clinit>(Quic.java:46)
        at io.netty.handler.codec.quic.QuicheQuicSslContext.<clinit>(QuicheQuicSslContext.java:81)
        at io.netty.handler.codec.quic.QuicSslContextBuilder.build(QuicSslContextBuilder.java:402)
        ... 29 common frames omitted
Caused by: java.io.FileNotFoundException: META-INF/native/libnetty_quiche42_linux_x86_64.so
        at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:189)
        ... 34 common frames omitted
        Suppressed: java.lang.UnsatisfiedLinkError: no netty_quiche42_linux_x86_64 in java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
                at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2458)
                at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:916)

```

I made sure to have the following jars:
netty-codec-native-quic-4.2.7.Final-linux-x86_64.jar
netty-codec-classes-quic-4.2.7.Final.jar

Both of my bundles are recognized, but i only reached the `INSTALLED` state for the fragment bundle (the one providing the native libraries). I want to have a `RESOLVED` state for the fragment bundle, but there is a mismatch between Fragment-Host value in the native bundle and Bundle-SymbolicName in the class bundle

```
g! headers 33  
Netty/Codec/Native/Quic (33)
----------------------------
Bnd-LastModified = 1760446519127
BoringSSL-Branch = main
BoringSSL-Revision = 0226f30467f540a3f62ef48d453f93927da199b6
Build-Jdk = 11.0.28
Build-Jdk-Spec = 11
Built-By = root
Bundle-Description = Netty is an asynchronous event-driven network application framework for    rapid development of maintainable high performance protocol servers and    clients.
Bundle-DocURL = https://netty.io/
Bundle-License = https://www.apache.org/licenses/LICENSE-2.0
Bundle-ManifestVersion = 2
Bundle-Name = Netty/Codec/Native/Quic
Bundle-NativeCode = META-INF/native/libnetty_quiche42_linux_x86_64.so;osname=linux;processor=x86_64
Bundle-SymbolicName = io.netty.codec-native-quic
Bundle-Vendor = The Netty Project
Bundle-Version = 4.2.7.Final
Created-By = Apache Maven Bundle Plugin 5.1.8
**Fragment-Host = io.netty.netty-codec-classes-quic**
Implementation-Title = Netty/Codec/Native/Quic 
Implementation-URL = https://netty.io/netty-codec-native-quic/
Implementation-Vendor = The Netty Project
Implementation-Vendor-Id = io.netty
Implementation-Version = 4.2.7.Final
Import-Package = sun.nio.ch;resolution:=optional,org.bouncycastle.jcajce.provider;version="[1.0,2)";resolution:=optional
Manifest-Version = 1.0
Multi-Release = true
Quiche-Branch = master
Quiche-Revision = 5ea8d8e3569c1ed34b895e2211e62791e77c29ab
Specification-Title = Netty/Codec/Native/Quic
Specification-Vendor = The Netty Project
Specification-Version = 4.2
Tool = Bnd-6.3.1.202206071316
```

```
g! headers 27
Netty/Codec/Classes/Quic (27)
-----------------------------
Bnd-LastModified = 1760446385178
Build-Jdk = 11.0.28
Build-Jdk-Spec = 11
Built-By = root
Bundle-Description = Netty is an asynchronous event-driven network application framework for    rapid development of maintainable high performance protocol servers and    clients.
Bundle-DocURL = https://netty.io/
Bundle-License = https://www.apache.org/licenses/LICENSE-2.0
Bundle-ManifestVersion = 2
Bundle-Name = Netty/Codec/Classes/Quic
**Bundle-SymbolicName = io.netty.codec-classes-quic**
Bundle-Vendor = The Netty Project
Bundle-Version = 4.2.7.Final
Created-By = Apache Maven Bundle Plugin 5.1.8
Export-Package = io.netty.handler.codec.quic;uses:="io.netty.buffer,io.netty.channel,io.netty.channel.socket,io.netty.handler.ssl,io.netty.util,io.netty.util.concurrent,javax.net.ssl";version="4.2.7"
Implementation-Title = Netty/Codec/Classes/Quic
Implementation-URL = https://netty.io/netty-codec-classes-quic/
Implementation-Vendor = The Netty Project
Implementation-Vendor-Id = io.netty
Implementation-Version = 4.2.7.Final
Import-Package = io.netty.buffer;version="[4.2,5)",io.netty.channel;version="[4.2,5)",io.netty.channel.epoll;version="[4.2,5)";resolution:=optional,io.netty.channel.socket;version="[4.2,5)",io.netty.channel.unix;version="[4.2,5)",io.netty.handler.ssl;version="[4.2,5)",io.netty.handler.ssl.util;version="[4.2,5)",io.netty.util;version="[4.2,5)",io.netty.util.collection;version="[4.2,5)",io.netty.util.concurrent;version="[4.2,5)",io.netty.util.internal;version="[4.2,5)",io.netty.util.internal.logging;version="[4.2,5)",javax.crypto,javax.crypto.spec,javax.net.ssl,javax.security.auth.x500,javax.security.cert,sun.nio.ch;resolution:=optional,org.bouncycastle.jcajce.provider;version="[1.0,2)";resolution:=optional
Manifest-Version = 1.0
Multi-Release = true
Require-Capability = osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Specification-Title = Netty/Codec/Classes/Quic 
Specification-Vendor = The Netty Project
Specification-Version = 4.2
Tool = Bnd-6.3.1.202206071316
```
I think the issue lies in this file:
https://github.com/netty/netty/blob/640b6b72c73f5c515c5203ecc3c30ef34051cffc/codec-native-quic/pom.xml#L35
Continue on GitHub ↗

04 / LABELS

Labels from the report text only; not yet run

No supported category has been assigned.

Label rules and the text that matched
[]