> We already have a similar problem with the current NimBLE integration. The
> NimBLE port in nuttx-apps directly depends on many NuttX kernel/internal
> APIs. As a result, it is difficult to support protected/kernel builds
> cleanly, and it is also hard to keep the port synchronized with upstream
> NimBLE over time.

Is this an AI analysis or something? Because it’s definitely not true:
Nimble
port uses the POSIX API. The only issue with kernel mode is that
SIGEV_SIGNAL is not supported in kernel mode, but this is a nuttx
limitation,
not a port architecture issue.
I agree that synchronizing with an external repository is a challenge.
However,
a plus side is that we aren't the ones maintaining the code that must
comply
with the BLE standard.

I also consider placing the entire BLE stack within the kernel to be a bad
idea.
Even if performance isn't ideal, it’s the price one pays for a sound
architecture.
NuttX has always focused on addressing architectural challenges (POSIX
compliance)
rather than striving to be the best in terms of performance.


pt., 16 paź 2026 o 06:52 chao an <[email protected]> napisał(a):

> No, I do not agree that the current port is only a Zephyr API replacement
> and
> NuttX coding-style reformatting.
>
>
>
> This code base has already fixed part of the issues that still exist in the
>
> Zephyr community implementation. In addition, we still have pending
> features and
> fixes that have not been submitted yet. Since some of those changes were
> made by
> other developers, I cannot submit their work by myself without proper
> permission
> and attribution.
>
>
> https://github.com/zephyrproject-rtos/zephyr/pull/122348
>
>
> I have already stated in the email why I do not recommend putting the
> initial
> Bluetooth host stack into nuttx-apps. Architecturally, placing it in apps
> would
> cause significant performance degradation compared with the Zephyr design.
> The
> Bluetooth host stack is tightly coupled with kernel primitives, buffer
>
> management, work queues, timing, and HCI/driver paths. Moving it entirely
> to
> apps would change that integration model and make the architecture worse
> from
> the beginning.
>
>
>
> Therefore, please read my previous email more carefully. The concern here
> is not
> only the initial review size, but also the long-term architecture and
> runtime
> performance of the Bluetooth stack in NuttX.
>
> BRs,
>
> Xiang Xiao <[email protected]> 于2026年10月16日周五 12:44写道:
>
> > On Fri, Oct 16, 2026 at 11:25 AM chao an <[email protected]> wrote:
> >
> > > Hi all,
> > >
> > > I would like to summarize the background, technical motivation, and
> > > proposed evolution plan for PR #20686, which introduces a Zephyr-based
> > > Bluetooth host stack under net/bt.
> > >
> > > https://github.com/apache/nuttx/pull/20686
> > >
> > > First of all, I fully understand the concerns raised in the discussion.
> > > Adding a new Bluetooth stack is a significant architectural change, and
> > it
> > > is reasonable for the community to ask whether we should instead
> continue
> > > improving the existing NuttX Bluetooth implementation. I would like to
> > > explain why we believe introducing the new stack incrementally is the
> > more
> > > practical path, while still keeping the long-term NuttX architecture
> > clean
> > > and maintainable.
> > > ------------------------------
> > > 1. Why not only enhance the existing NuttX Bluetooth stack?
> > >
> > > The existing NuttX Bluetooth implementation is mainly focused on BLE
> > > functionality. However, modern Bluetooth support is no longer limited
> to
> > > basic BLE. A complete Bluetooth host stack now commonly includes:
> > >
> > >    - BLE GAP/GATT/ATT/SMP
> > >    - Classic Bluetooth profiles
> > >    - A2DP
> > >    - AVRCP
> > >    - HFP/HSP
> > >    - HID
> > >    - LE Mesh
> > >    - LE Audio
> > >    - Additional profile-level interoperability logic
> > >
> > >
> > But most of these profiles should belong to the userspace, please split
> the
> > related code to nuttx-apps.git, instead nuttx/.
> > especially, the code related shell spread in the whole code base:
> >
> >
> https://github.com/anchao/nuttx/tree/6d6ddbb271cfdeb3e0993b5ebe992b4eab858c6c/net/bt/audio/shell
> >
> >
> https://github.com/anchao/nuttx/tree/6d6ddbb271cfdeb3e0993b5ebe992b4eab858c6c/net/bt/host/classic/shell
> >
> >
> https://github.com/anchao/nuttx/tree/6d6ddbb271cfdeb3e0993b5ebe992b4eab858c6c/net/bt/host/shell
> >
> >
> https://github.com/anchao/nuttx/blob/6d6ddbb271cfdeb3e0993b5ebe992b4eab858c6c/net/bt/mesh/shell/
> >
> >
> https://github.com/anchao/nuttx/blob/6d6ddbb271cfdeb3e0993b5ebe992b4eab858c6c/net/bt/services/ias/shell
> > it's definitely wrong to put the shell code inside kernel space.
> >
> >
> > > The Zephyr Bluetooth stack already provides a broad and actively
> > maintained
> > > implementation across many of these areas. Rebuilding equivalent
> > > functionality directly on top of the current NuttX Bluetooth stack
> would
> > > require a very large multi-year effort, including not only protocol
> > > implementation but also interoperability testing with real phones,
> > > headsets, speakers, cars, and other commercial devices.
> > >
> > > Therefore, our goal is not to discard NuttX's existing work lightly,
> but
> > to
> > > provide a practical path to make NuttX capable of supporting a much
> wider
> > > Bluetooth feature set in a reasonable time frame.
> > > ------------------------------
> > > 2. Why place the stack in nuttx instead of nuttx-apps?
> > >
> > > Another important discussion point is whether the new Bluetooth stack
> > > should live in nuttx-apps, similar to how NimBLE is currently
> integrated.
> > >
> > > Our concern is that a host stack is not just an application-level
> > > component. It interacts closely with:
> > >
> > >    - HCI transport
> > >    - L2CAP channels
> > >    - Socket or device interfaces
> > >    - Memory pools
> > >    - Timers and work queues
> > >    - Security and pairing state
> > >    - Profile registration
> > >    - Controller event dispatch
> > >    - Future kernel/user boundary mechanisms
> > >
> > > Putting the core host stack in nuttx-apps would either require exposing
> > > many internal kernel interfaces or would force the application-side
> stack
> > > to depend on non-public NuttX internals.
> > >
> > > We already have a similar problem with the current NimBLE integration.
> > The
> > > NimBLE port in nuttx-apps directly depends on many NuttX
> kernel/internal
> > > APIs. As a result, it is difficult to support protected/kernel builds
> > > cleanly, and it is also hard to keep the port synchronized with
> upstream
> > > NimBLE over time.
> > >
> > >
> > These are kernel public API, the only problem is that they are called by
> > userspace.
> >
> >
> > > For this reason, we believe the Bluetooth host core belongs in the
> NuttX
> > > tree. User-facing profiles, tools, shell commands, or demo applications
> > can
> > > still live outside the core as appropriate, but the transport-facing
> host
> > > stack should have a well-defined place inside NuttX.
> > >
> > > There is also a performance consideration. In flat build mode, the
> > > Bluetooth host stack can run directly on the kernel side without
> > additional
> > > syscall or user/kernel boundary overhead. This is especially important
> > for
> > > IoT chips with relatively low CPU frequency, where Bluetooth data path
> > and
> > > profile handling overhead can have a visible impact on throughput,
> > latency,
> > > and power consumption.
> > >
> > > At the same time, this does not mean that the final architecture must
> > > remain flat-build-only. A compatible evolution path is to keep the
> > > performance-sensitive transport and host core on the kernel side, while
> > > gradually moving suitable Bluetooth profile implementations or
> > > profile-facing helper layers into libc-visible build paths. This allows
> > > protected and kernel builds to use proper public interfaces, while
> still
> > > preserving good performance for flat build and low-end IoT platforms.
> > >
> > > In other words, placing the stack in nuttx gives us a cleaner long-term
> > > architecture:
> > >
> > >    - Flat build can get the best performance with minimum overhead.
> > >    - Protected/kernel build can be supported later through proper
> public
> > >    interfaces.
> > >    - Profile code can be migrated into libc-compatible paths where
> > >    appropriate.
> > >    - Userspace does not need to directly depend on private kernel
> > symbols.
> > >    - The design avoids repeating the long-term maintainability issue
> seen
> > >    in some existing userspace Bluetooth integrations.
> > >
> > >
> >
> > But Zephyr bluetooth stack is implemented as a monolithic block like
> > NimBLE.
> > Your current porting just include:
> >
> >    1. Switch Zephyr API to NuttX kernel API
> >    2. Format the code base to follow The NuttX coding style
> >
> > No any change related to the kernel/user space separation, so it's better
> > to contain in nuttx-apps.git in the current stage.
> > I would suggest you put the initial code inside nuttx-apps and move the
> > part which belongs to the kernel step by step,
> > so the community can review the change more carefully.
> >
>

Reply via email to