Great, thank you very much Anchao! On Thu, Oct 22, 2026 at 10:36 AM chao an <[email protected]> wrote:
> Hi Alan, > > > > Thanks for the suggestion and for offering to help with testing! > > > > I agree with your point. It is better to avoid introducing net/bt as an > > intermediate layout if we already know it will be moved later, since that > > would create unnecessary churn and could become a breaking change after > > merge. > > > > I have updated the patch accordingly: > > > > - Moved the Bluetooth host stack build integration out of net/ > > - Kept the implementation under libs/zblue > > - Added libs/zblue as a standalone NuttX library, similar to other libs/* > > components > > - Moved the Kconfig entry under the top-level Wireless Support menu > > - Registered libzblue through the standard Make library target flow > > - Reworked the Make.defs paths to use TOPDIR-based paths instead of > relative > ../libs/zblue paths > > > > I also re-tested the integration with the sim:bt configuration, and the > native > Make build passes. I re-ran nxstyle and codespell as well, and both are > clean. > > > For the Kconfig selection, I agree that more explicit options will make it > > easier for users to enable only the parts they need. I will continue > refining > that so the stack is not exposed as one overly broad switch. > > > > Thanks again for the review and for working on the BT side too. Any > additional > testing from your side would be very welcome. > > > > BR, > > > Alan C. Assis <[email protected]> 于2026年10月22日周四 20:28写道: > > > Hi Anchao, > > > > Sounds good! > > > > Yes, I suggest going with more explicitly selection in the Kconfig so > users > > can select what they want more easily. > > > > Regarding "net/bt," there is not a more permanent solution than a > temporary > > one. This is a reason to avoid it. > > > > I understand that you tested the integration this way and agreed to > change > > it to libs/zblue later, but I strongly recommend making that change > before > > merging. > > > > Adding something that will probably change will result in a "breaking > > change" later, which we are trying to avoid on NuttX. > > > > So the best moment to change it is before it gets merged. If you need > help > > testing, I can assist here. I'm already working on BT (first fixing small > > issues). > > > > BR, > > > > Alan > > > > On Thu, Oct 22, 2026 at 8:55 AM chao an <[email protected]> wrote: > > > > > Hi Alan, > > > > > > Yes, I agree that we need to find a middle ground and make sure the > > > integration does not block the existing Bluetooth solutions in NuttX. > > > > > > From the current implementation, I don't think this zblue-based stack > > > conflicts with NimBLE or with the existing in-tree BLE stack. They can > be > > > selected independently through Kconfig. For example: > > > > > > - CONFIG_BT Enables the new zblue-based host stack currently added > by > > > this PR. > > > - CONFIG_WIRELESS_BLUETOOTH > > > - CONFIG_WIRELESS_BLUETOOTH_HOST Enable the existing NuttX BLE stack > > > under wireless/bluetooth. > > > - CONFIG_NIMBLE Enables the userspace NimBLE stack when that stack > is > > > used from apps. > > > > > > The lower-level Bluetooth controller / transport drivers are also > > separate, > > > for example: > > > > > > - CONFIG_BLUETOOTH_UART > > > - CONFIG_BLUETOOTH_RPMSG > > > - CONFIG_BLUETOOTH_NULL > > > > > > So I think it is possible to make the three options coexist on NuttX, > as > > > long as we keep the host-stack selection separated and avoid enabling > two > > > host stacks for the same controller path at the same time. If needed, > we > > > can also make this more explicit by adding a Kconfig choice or mutual > > > exclusion between the host stacks. > > > > > > Regarding the location, I understand your point about libs/zblue. > > However, > > > for the initial version, I still think keeping the full stack under > > net/bt > > > is the safer integration path. > > > > > > The reason is that splitting it into libs/zblue is not only a directory > > > rename. To do that correctly, we need to isolate each profile and data > > path > > > according to its own characteristics. Some profiles are not just pure > > > userspace library logic. For example, SCO and LE Audio / ISO have > > > lower-level data paths. On Linux, part of this kind of traffic is > handled > > > or forwarded by the kernel side. So if we move everything to libs/zblue > > too > > > early, we may create an artificial boundary that is not correct for > those > > > lower-level profiles. > > > > > > My suggestion is: > > > > > > 1. Keep the initial version integrated under net/bt, so the > > controller, > > > HCI, L2CAP, ISO/SCO and profile paths can work correctly first. > > > 2. Make the stack name clear as zblue if the community prefers that, > > so > > > it is not presented as replacing the existing NuttX BLE stack. > > > 3. Keep the Kconfig separation so users can choose between: > > > - zblue-based stack, > > > - existing NuttX BLE stack, > > > - NimBLE userspace stack. > > > 4. After the initial integration is stable, we can evaluate moving > or > > > splitting parts into libs/zblue profile by profile, where the > boundary > > > is > > > technically clear. > > > > > > So yes, I think it is possible to modify the PR to let both stacks plus > > > NimBLE work on NuttX without interfering with each other. I just think > > > doing a full libs/zblue separation as the first step may be risky, > > > especially for the lower-level profiles and audio-related paths. > > > > > > Does this direction sound acceptable to you? > > > > > > BR, > > > > > > Alan C. Assis <[email protected]> 于2026年10月22日周四 19:32写道: > > > > > > > Hi Anchao, > > > > > > > > Yes, I think having a complete BLE stack like zblue is a good idea. > > > > > > > > But we need to find a middle ground for correct integration. > > > > > > > > Let's do this: add zblue to libs/zglue and maintain a proper > separation > > > to > > > > allow room for the existing BLE stack on NuttX to evolve. > > > > > > > > Just assuming that not updating/synchroning zblue with Zephyr's zblue > > > will > > > > be enough for them to become different entities seems incorrect. > > > > > > > > The amount of code is very large, so even after decades they will > share > > > > enough of their "DNA" that a virus will be able to infect both. > > > > > > > > Do you think it is possible to modify your PR to let both stacks (+ > > > NimBLE > > > > userspace stack) work on NuttX without one interfering on the other? > > > > > > > > BR, > > > > > > > > Alan > > > > > > > > On Thu, Oct 22, 2026 at 12:20 AM chao an <[email protected]> > wrote: > > > > > > > > > Hi Alan, > > > > > > > > > > > > > > > > > > > > Thank you for the detailed analysis. > > > > > > > > > > > > > > > > > > > > I understand your concern. The current code structure is indeed > still > > > > very > > > > > > > > > > close to Zephyr's Bluetooth stack, and the compatibility layer is > > > > currently > > > > > > > > > > quite thin. However, from the long-term technical direction, our > > > > intention > > > > > is > > > > > not to keep doing long-term synchronization with Zephyr. Instead, > we > > > plan > > > > > to > > > > > quickly feed back the related issues and improvements to the NuttX > > > > > community > > > > > during the integration and evolution process. > > > > > > > > > > > > > > > > > > > > Regarding the naming concern, I think it is reasonable to call it > > zblue > > > > > > > > > > temporarily, since the current implementation is still largely > based > > on > > > > > > > > > > Zephyr's Bluetooth stack. If the stack evolves later with a new > code > > > > > structure > > > > > and clearer NuttX-specific architecture, we can further evaluate > > > whether > > > > a > > > > > > > > > > different name would be more appropriate at that time. > > > > > > > > > > > > > > > > > > > > Does that sound reasonable to you? > > > > > > > > > > > > > > > > > > > > BR, > > > > > > > > > > > > > > > Alan C. Assis <[email protected]> 于2026年10月22日周四 03:41写道: > > > > > > > > > > > Hi Anchao, > > > > > > > > > > > > I used Claude to help compare the code and here are the reasons > to > > > call > > > > > it > > > > > > zblue instead of libs/bt: > > > > > > > > > > > > Almost all of this PR is Zephyr's Bluetooth stack > > > > > > ("zblue"), reformatted to NuttX style. The part that doesn't come > > > from > > > > > > Zephyr is > > > > > > a thin compatibility layer that makes the Zephyr kernel calls > work > > on > > > > > > NuttX. > > > > > > > > > > > > I pulled all 539 new files (400,450 lines) and compared them > > against > > > > > > several > > > > > > Zephyr versions. The closest match is Zephyr v4.5.0-rc2, and it > > > matches > > > > > > better > > > > > > than Zephyr's current main branch. So the PR looks like a > snapshot > > of > > > > > zblue > > > > > > from the last few weeks. > > > > > > > > > > > > Results > > > > > > > > > > > > Function by function (7,716 functions): > > > > > > > > > > > > Class: Identical > > > > > > Functions: 5,411 (70%) > > > > > > Lines: 140,189 > > > > > > Meaning: Exactly the same code as Zephyr. Only indentation and > > > braces > > > > > > differ. > > > > > > ──────────────────────────────────────── > > > > > > Class: Renames only > > > > > > Functions: 1,515 (20%) > > > > > > Lines: 60,863 > > > > > > Meaning: The only changes are API renames that recur across the > > > whole > > > > > PR: > > > > > > __ASSERT→DEBUGASSERT (803×), K_FOREVER→((clock_t)-1), > > > > > sys_slist_*→list_*, > > > > > > k_mutex_*→nxrmutex_*, k_sem_give→nxsem_post, > > atomic_get→atomic_read > > > > > > ──────────────────────────────────────── > > > > > > Class: Modified > > > > > > Functions: 584 (8%) > > > > > > Lines: 33,693 > > > > > > Meaning: Clearly the Zephyr function, plus some edits specific > to > > > > that > > > > > > function > > > > > > ──────────────────────────────────────── > > > > > > Class: Not from Zephyr > > > > > > Functions: 206 (3%) > > > > > > Lines: 2,734 > > > > > > Meaning: NuttX glue code > > > > > > > > > > > > Whole files, including headers: > > > > > > - On average, 96.9% of each file's code also appears in its > > Zephyr > > > > > > counterpart. > > > > > > - 434 of the 539 files are ≥90% the same as Zephyr; together > they > > > > hold > > > > > > 375k of > > > > > > the 400k lines. > > > > > > - 75% of the comment text, including the Doxygen docs, is > > > > word-for-word > > > > > > Zephyr. > > > > > > > > > > > > What's actually new: > > > > > > - The net/bt/compat/ shim layer (kernel/timeout.c, queue.c, > > > > mem_slab.c, > > > > > > fs.c, > > > > > > sections/defines.c, hci_driver.c), which provides k_work, > > k_queue > > > > and > > > > > > similar > > > > > > Zephyr calls on top of NuttX. > > > > > > - Part of mm/net_buf. > > > > > > - bt_nus_auto_start_bt.c, which has been heavily extended. > > > > > > - hci_driver_nuttx.h, the Make.defs files and the sim:bt > > defconfig. > > > > > > > > > > > > > > > > > > So, only 3% of the code is new (this includes the code in sim:bt > > that > > > > > must > > > > > > be new). > > > > > > > > > > > > So, reusing the zblue from Zephyr and calling it something else > > isn't > > > > > > right; it's like the zbus that Jorge brought from Zephyr, where > > > calling > > > > > it > > > > > > NXBus doesn't seem appropriate. > > > > > > > > > > > > Besides that, as I said before using ZBlue as our official BT > Stack > > > > will > > > > > > significantly increase the shared code between NuttX and Zephyr, > > > which > > > > > > could be dangerous. > > > > > > > > > > > > As I said, I not against adding ZBlue to NuttX, but at least make > > it > > > > > clear > > > > > > that it is ZBlue and should be an alternative stack (like NimBLE) > > not > > > > the > > > > > > official NuttX BLE Stack. > > > > > > > > > > > > BR, > > > > > > > > > > > > Alan > > > > > > > > > > > > On Mon, Oct 19, 2026 at 12:34 AM chao an <[email protected]> > > > wrote: > > > > > > > > > > > > > Hi Alan, > > > > > > > > > > > > > > Thanks for the comments and suggestions. > > > > > > > > > > > > > > For the first stage, I would prefer to keep the Bluetooth host > > > stack > > > > > > > supported only in FLAT mode. Supporting Protected and Kernel > > modes > > > > > > requires > > > > > > > a much deeper rework of the stack and its interfaces, > especially > > > > around > > > > > > the > > > > > > > boundary between kernel space and user space. I do not think it > > is > > > a > > > > > good > > > > > > > idea to introduce such large architectural changes in this > first > > > > step. > > > > > > > > > > > > > > Our current plan is to complete Protected/Kernel mode support > in > > a > > > > > second > > > > > > > stage, after the basic stack integration is reviewed and > > > stabilized. > > > > > This > > > > > > > should make the initial review and integration much more > > > manageable. > > > > > > > > > > > > > > Regarding the library name, I still prefer to use libs/libbt. > > > > Although > > > > > > the > > > > > > > current code is based on Zephyr's zblue, the goal is to > maintain > > it > > > > as > > > > > an > > > > > > > independent NuttX Bluetooth host stack going forward, rather > than > > > > > keeping > > > > > > > it as a direct Zephyr fork forever. In that sense, I think > libbt > > > is a > > > > > > > better long-term name. > > > > > > > > > > > > > > Also, the current NuttX Bluetooth profiles are not implemented > in > > > the > > > > > > > kernel, and we do not plan to move the native NuttX Bluetooth > > stack > > > > > > > profiles into the kernel either. Once Protected/Kernel mode > > support > > > > is > > > > > > > added for this stack in the future, this implementation is > > expected > > > > to > > > > > > > replace the previous approach. For this reason, I think keeping > > the > > > > > stack > > > > > > > under libbt is still more appropriate. > > > > > > > > > > > > > > About splitting the PR: this PR is already the result of > > squashing > > > > more > > > > > > > than one hundred commits. Most of those commits are > > > > compatibility-layer > > > > > > > adjustments, coding style cleanup, and mechanical changes > needed > > to > > > > > make > > > > > > > the stack build in NuttX. Asking reviewers to review each of > > those > > > > > > commits > > > > > > > separately would probably cost everyone more time. > > > > > > > > > > > > > > Splitting the full Bluetooth stack by profile is also not very > > > > > practical > > > > > > at > > > > > > > the moment, because there are no dedicated maintainers for each > > > > > > individual > > > > > > > Bluetooth profile area in NuttX yet. Therefore, I think the > > current > > > > > form > > > > > > is > > > > > > > probably the most reasonable way to review and integrate the > > stack > > > > as a > > > > > > > whole. > > > > > > > > > > > > > > One more update: I have removed all shell-related code from > > > > > > > https://github.com/apache/nuttx/pull/20686. The plan is to > move > > > > those > > > > > > > shell > > > > > > > commands to apps later. With this change, the current Bluetooth > > > stack > > > > > no > > > > > > > longer contains any user-space shell code, so I think this is > > now a > > > > > > better > > > > > > > point for review. > > > > > > > > > > > > > > Best regards, > > > > > > > > > > > > > > Alan C. Assis <[email protected]> 于2026年10月16日周五 21:40写道: > > > > > > > > > > > > > > > Hi An Chao, > > > > > > > > > > > > > > > > Isn't it possible to have a similar implementation that works > > for > > > > > FLAT, > > > > > > > > Protected and Kernel modes? > > > > > > > > > > > > > > > > This way the maintenance will be easier. Only small > > > kernel-specific > > > > > > parts > > > > > > > > will remain there (as Raiden and Xiang proposed). > > > > > > > > > > > > > > > > Suggestion: instead of naming it libs/libbt/, it would be > > better > > > to > > > > > use > > > > > > > > libs/zblue to make it clear that it is a zblue port from > > Zephyr. > > > > > > > > > > > > > > > > Let's use libs/libbt only for NuttX-specific (native) code. > > > > > > > > > > > > > > > > And as I said, it is better to easily isolate the code that > > came > > > > from > > > > > > > > Zephyr's zblue. > > > > > > > > > > > > > > > > This way the user could select the Bluetooth stack they want > > > > without > > > > > > > having > > > > > > > > code from the other stack attached to it. > > > > > > > > > > > > > > > > Also I suggest you to break your PR into smaller PRs; a > single > > PR > > > > > > > changing > > > > > > > > more than 660K LoC is very massive. > > > > > > > > > > > > > > > > BR, > > > > > > > > > > > > > > > > Alan > > > > > > > > > > > > > > > > On Fri, Oct 16, 2026 at 9:21 AM chao an <[email protected] > > > > > > wrote: > > > > > > > > > > > > > > > > > Hi Alan, > > > > > > > > > > > > > > > > > > Thank you for the thoughtful perspective and for engaging > in > > > the > > > > > > > > > discussion. > > > > > > > > > > > > > > > > > > On security: we will maintain the Bluetooth stack ourselves > > and > > > > > take > > > > > > > > > responsibility for tracking and fixing vulnerabilities. I'm > > > also > > > > > > > > confident > > > > > > > > > that Xiaomi will contribute back on security issues given > > their > > > > > > ongoing > > > > > > > > > investment in this codebase. This isn't a blind import — > it's > > > > code > > > > > > that > > > > > > > > has > > > > > > > > > active, committed maintainers behind it. > > > > > > > > > > > > > > > > > > Regarding the history with Greg: you're right that we > > discussed > > > > > this > > > > > > > > years > > > > > > > > > ago. But there's an important distinction — that earlier > > > proposal > > > > > > > placed > > > > > > > > > the stack entirely in userspace. It did nothing to > strengthen > > > > > NuttX's > > > > > > > > > kernel-level Bluetooth support. That's precisely why I'm > back > > > > now, > > > > > > > > > providing a kernel implementation this time around, which > is > > > > what I > > > > > > > > > committed to back then. Feel free to search the mailing > list > > > > > > archives — > > > > > > > > the > > > > > > > > > NuttX native Bluetooth stack will evolve from this baseline > > > going > > > > > > > > forward. > > > > > > > > > > > > > > > > > > This implementation does not affect existing Bluetooth > stacks > > > in > > > > > any > > > > > > > way. > > > > > > > > > Users can still choose NimBLE, the current NuttX BLE stack, > > or > > > > any > > > > > > > other > > > > > > > > > solution. This is an additional option, not a replacement. > > The > > > > goal > > > > > > is > > > > > > > to > > > > > > > > > give NuttX users more choices, not fewer. > > > > > > > > > > > > > > > > > > One more update: I just spoke with Xiaoxiang and we've > > reached > > > > some > > > > > > > > common > > > > > > > > > ground. He's no longer opposed to the current stack > > > > implementation > > > > > > and > > > > > > > > > agrees that the focus should be on proper structuring. > Here's > > > the > > > > > > plan > > > > > > > > > going forward: > > > > > > > > > > > > > > > > > > 1. Unused shell code will be moved out of the stack and > > into > > > > > > apps/, > > > > > > > > > running entirely in userspace. > > > > > > > > > 2. Bluetooth profiles will be migrated to libs/libbt/, > > where > > > > > we'll > > > > > > > > > provide two OS API backends: a POSIX API implementation > > (for > > > > > > > > > kernel/protected builds) and a NuttX kernel API > > > implementation > > > > > > (for > > > > > > > > flat > > > > > > > > > mode). > > > > > > > > > 3. The L2CAP layer will remain in the NuttX kernel. > > > > > > > > > > > > > > > > > > This should address the architectural concerns while > > preserving > > > > the > > > > > > > > > performance path for flat-mode deployments. > > > > > > > > > > > > > > > > > > Alan C. Assis <[email protected]> 于2026年10月16日周五 18:40写道: > > > > > > > > > > > > > > > > > > > Hi An Chao, > > > > > > > > > > > > > > > > > > > > Thank you for trying to improve the NuttX Bluetooth > > support. > > > > And > > > > > > > thank > > > > > > > > > you > > > > > > > > > > to bring this discussion here to let more people give > their > > > > > > opinion. > > > > > > > > > > > > > > > > > > > > I think most of the concerns raised by Xiang and Raiden > > > > (Mateusz) > > > > > > are > > > > > > > > > > important and need to be addressed. > > > > > > > > > > > > > > > > > > > > As I said at GitHub PR I think a main concern here is > using > > > the > > > > > > same > > > > > > > > > > Bluetooth stack used on Zephyr, not because it is a bad > > stack > > > > (of > > > > > > > > course > > > > > > > > > it > > > > > > > > > > is not, it was developed by experts on Bluetooth area), > but > > > > > because > > > > > > > we > > > > > > > > > are > > > > > > > > > > adding the same surface area of attack from Zephyr on > > NuttX. > > > > > > > > > > > > > > > > > > > > That means any security vulnerability affecting Zephyr > BLE > > > > stack > > > > > > will > > > > > > > > > > affect NuttX. It remove the protection that a companies > > could > > > > > > obtain > > > > > > > > when > > > > > > > > > > using different RTOSs. > > > > > > > > > > > > > > > > > > > > Also, if my memory still serving me, I think Xiaomi team > > (you > > > > was > > > > > > > there > > > > > > > > > at > > > > > > > > > > that time) already tried to submit their initial port of > > > Zephyr > > > > > BLE > > > > > > > > stack > > > > > > > > > > to NuttX about 4 or 5 years ago and Greg was against it. > > > > > > > > > > > > > > > > > > > > His suggestion was to improve our BLE stack, that in fact > > has > > > > the > > > > > > > same > > > > > > > > > > origin of the Zephyr BLE stack (both came from a BLE > stack > > > from > > > > > > Intel > > > > > > > > > > released as BSD license at that time). > > > > > > > > > > > > > > > > > > > > I'm not against including the Zephyr BLE stack, but it > > should > > > > be > > > > > > > > > > selectable. Ideally the user should select if he/she > wants > > to > > > > use > > > > > > > > NimBLE, > > > > > > > > > > Zephyr or NuttX native BLE stack. > > > > > > > > > > > > > > > > > > > > BR, > > > > > > > > > > > > > > > > > > > > Alan > > > > > > > > > > > > > > > > > > > > On Friday, October 16, 2026, chao an < > [email protected]> > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > Hi, Tomek, > > > > > > > > > > > > > > > > > > > > > > Thanks for the thoughtful input and the FreeBSD > > references > > > — > > > > > > those > > > > > > > > are > > > > > > > > > > very > > > > > > > > > > > relevant to where we're heading. > > > > > > > > > > > > > > > > > > > > > > Just to set the context: NuttX's current Bluetooth > stack > > > only > > > > > > > > supports > > > > > > > > > > BLE. > > > > > > > > > > > Classic Bluetooth (BR/EDR), LE Mesh, and LE Audio are > all > > > > > > missing. > > > > > > > > This > > > > > > > > > > is > > > > > > > > > > > exactly why we want to bring a more complete Bluetooth > > > stack > > > > to > > > > > > > > NuttX — > > > > > > > > > > to > > > > > > > > > > > catch up with what mainstream RTOS communities already > > > offer. > > > > > > > > > > > > > > > > > > > > > > I actually agree with the FreeBSD/Apple architecture > you > > > > > > > referenced. > > > > > > > > > Our > > > > > > > > > > > end-state plan is similar: the L2CAP and HCI layers > will > > > live > > > > > in > > > > > > > the > > > > > > > > > > > kernel, and a bluetoothd-style daemon will be > implemented > > > in > > > > > > libc, > > > > > > > > > > managing > > > > > > > > > > > profiles and higher-level protocols. This gives us a > > clean > > > > > > > > separation — > > > > > > > > > > > transport in the kernel, policy and profiles in > > userspace — > > > > > much > > > > > > > like > > > > > > > > > how > > > > > > > > > > > FreeBSD's ng_hci / hccontrol split works. The current > PR > > is > > > > > > Phase 1 > > > > > > > > of > > > > > > > > > > > getting there incrementally. > > > > > > > > > > > > > > > > > > > > > > Tomek CEDRO <[email protected]> 于2026年10月16日周五 17:07写道: > > > > > > > > > > > > > > > > > > > > > > > Thank you An Chao for this proposition, work, and > > > > discussion > > > > > > :-) > > > > > > > > > > > > > > > > > > > > > > > > For sure it would be nice to have a BT stack with > more > > > > > > features! > > > > > > > > The > > > > > > > > > > > > BT has known issue of having different > implementations > > of > > > > the > > > > > > > stack > > > > > > > > > on > > > > > > > > > > > > different RTOS / OS / platforms, which is a known > > issue, > > > > and > > > > > > > kinda > > > > > > > > > > > > mess because there is no common standard / approach / > > > > > > > > implementation, > > > > > > > > > > > > unfortunately around something that is supposed to be > > > based > > > > > on > > > > > > a > > > > > > > > > > > > common standard. > > > > > > > > > > > > > > > > > > > > > > > > Having common BT stack with other popular RTOS may > make > > > > > > > portability > > > > > > > > > > > > easier and developers move to NuttX in some cases. > > > > > > > > > > > > > > > > > > > > > > > > I understand that we are talking about this solution? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://docs.zephyrproject.org/latest/services/ > > > > > > > > > > > connectivity/bluetooth/index.html > > > > > > > > > > > > > > > > > > > > > > > > In a perfect situation we would want to have modular > > > > > > > implementation > > > > > > > > > in > > > > > > > > > > > > nuttx-apps just like nimble. This is pointed out by > > > Xiang, > > > > > > > Raiden, > > > > > > > > > and > > > > > > > > > > > > Alin already. But I understand some things may be > hard > > to > > > > > > > implement > > > > > > > > > > > > that way. I will follow the consensus here when > ready, > > I > > > > have > > > > > > no > > > > > > > > > > > > strong opinion here, except any BT stack I touched > > before > > > > > was a > > > > > > > > mess > > > > > > > > > > > > and I hope we can work out at least something decent > > :-P > > > > > > > > > > > > > > > > > > > > > > > > A bit offtopic but for kernel build we can take a > look > > at > > > > > quite > > > > > > > old > > > > > > > > > > > > Bluetooth implementation on FreeBSD, where radio is > > > > provided > > > > > by > > > > > > > > > ng_ubt > > > > > > > > > > > > (lower half in out case), then upper half uses > standard > > > > HCI. > > > > > > > Maybe > > > > > > > > > > > > something like this is possible in NuttX? > > > > > > > > > > > > > > > > > > > > > > > > 1. > https://man.freebsd.org/cgi/man.cgi?query=bluetooth > > > > > > > > > > > > 2. https://man.freebsd.org/cgi/man.cgi?query=ng_hci > > > > > > > > > > > > 3. > https://man.freebsd.org/cgi/man.cgi?query=hccontrol > > > > > > > > > > > > 4. > > > > > > https://man.freebsd.org/cgi/man.cgi?query=netgraph&sektion=3 > > > > > > > > > > > > 5. > > > > > > https://man.freebsd.org/cgi/man.cgi?query=netgraph&sektion=4 > > > > > > > > > > > > 6. https://man.freebsd.org/cgi/man.cgi?query=ngctl > > > > > > > > > > > > > > > > > > > > > > > > Here is a quick overview article on the Bluetooth > > > > > > implementation > > > > > > > in > > > > > > > > > > > > FreeBSD and Apple: > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://pkgdemon.github.io/freebsd-bluetooth-management.html > > > > > > > > > > > > > > > > > > > > > > > > Again it will be very nice to have fully featured BT > > > stack > > > > in > > > > > > > NuttX > > > > > > > > > > > > and I hope we can sort out the best possible porting > > > > > > > implementation > > > > > > > > > > > > :-) > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > CeDeROM, SQ7MHZ, http://www.tomek.cedro.info > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Oct 16, 2026 at 8:39 AM Alin Jerpelea < > > > > > > > [email protected]> > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > > > > > > > > > thanks Xiao and Raiden for your technical opinions > > > which > > > > I > > > > > > also > > > > > > > > > share > > > > > > > > > > > so > > > > > > > > > > > > I > > > > > > > > > > > > > will not iterate them again. > > > > > > > > > > > > > > > > > > > > > > > > > > I am against merging this pr in NuttX repo > > > > > > > > > > > > > it should be splitted between nuttx and apps-repos > > and > > > > use > > > > > > > POSIX > > > > > > > > > > > > > implementation as much as possible. We are focused > on > > > > > > standards > > > > > > > > and > > > > > > > > > > > > > compatibility. > > > > > > > > > > > > > > > > > > > > > > > > > > Another concern is the license which does not match > > our > > > > ASF > > > > > > one > > > > > > > > and > > > > > > > > > > > does > > > > > > > > > > > > > not include any LICENSE file additions to clarify > the > > > > > > compiance > > > > > > > > > > aspect > > > > > > > > > > > > > > > > > > > > > > > > > > Best regards > > > > > > > > > > > > > Alin J > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, 16 Oct 2026, 10:12 Xiang Xiao, < > > > > > > > > [email protected]> > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Oct 16, 2026 at 3:49 PM chao an < > > > > > > [email protected] > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > So the real reason you've been objecting to my > > > > proposal > > > > > > is > > > > > > > > that > > > > > > > > > > > your > > > > > > > > > > > > team > > > > > > > > > > > > > > > has been working on something similar, correct? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > If you can give me a clear timeline for when > your > > > > > > > > > implementation > > > > > > > > > > > > will be > > > > > > > > > > > > > > > submitted upstream, I'm happy to withdraw my PR > > and > > > > let > > > > > > > your > > > > > > > > > code > > > > > > > > > > > > serve > > > > > > > > > > > > > > as > > > > > > > > > > > > > > > the baseline. I'm not here to fight over > > ownership > > > of > > > > > the > > > > > > > > > > Bluetooth > > > > > > > > > > > > > > stack. > > > > > > > > > > > > > > > My only motivation is that NuttX's lack of a > > > capable > > > > > > > > Bluetooth > > > > > > > > > > > stack > > > > > > > > > > > > is > > > > > > > > > > > > > > > driving every developer toward Zephyr — and as > a > > > PMC > > > > > > > member, > > > > > > > > I > > > > > > > > > > > think > > > > > > > > > > > > you > > > > > > > > > > > > > > > should be asking yourselves why this gap has > > > remained > > > > > > > > unfilled > > > > > > > > > > for > > > > > > > > > > > so > > > > > > > > > > > > > > long. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > I object to landing the whole bluetooth stack > into > > > > kernel > > > > > > > space > > > > > > > > > > > > directly > > > > > > > > > > > > > > either yours and ours . > > > > > > > > > > > > > > This is the same feeling from raiden00pl too, > let's > > > see > > > > > > other > > > > > > > > > > > people's > > > > > > > > > > > > > > opinions here. > > > > > > > > > > > > > > But it's fine for me to host the whole code in > > > > > > nuttx-apps.git > > > > > > > > and > > > > > > > > > > > > refactor > > > > > > > > > > > > > > components to kernel > > > > > > > > > > > > > > space step by step. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > As for the current PR, I'll remove the shell > > > > components > > > > > > > from > > > > > > > > > the > > > > > > > > > > > > stack > > > > > > > > > > > > > > and > > > > > > > > > > > > > > > move them into apps/ where they belong. The > base > > > > > profiles > > > > > > > > > (A2DP, > > > > > > > > > > > BLE) > > > > > > > > > > > > > > will > > > > > > > > > > > > > > > stay in libc — > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > The architecture is wrong to host any bluetooth > > > > profile > > > > > in > > > > > > > > libc. > > > > > > > > > > > > > > > > > > > > > > > > > > > > in flat build mode this gives a significant > > > performance > > > > > > > > > > > > > > > boost to the overall stack, which is the > primary > > > > > > deployment > > > > > > > > > model > > > > > > > > > > > for > > > > > > > > > > > > > > most > > > > > > > > > > > > > > > NuttX devices. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Performance should remain the same whether the > base > > > > > profile > > > > > > > is > > > > > > > > > > hosted > > > > > > > > > > > > in > > > > > > > > > > > > > > libc or apps, > > > > > > > > > > > > > > could you point out any technical reason which > > > impacts > > > > > the > > > > > > > > > > > performance > > > > > > > > > > > > in > > > > > > > > > > > > > > the flat mode? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > A few additional data points regarding our > > > timeline: > > > > > our > > > > > > > > > product > > > > > > > > > > is > > > > > > > > > > > > > > > scheduled for release in December, and > Bluetooth > > > SIG > > > > > > > > > > certification > > > > > > > > > > > is > > > > > > > > > > > > > > > already in progress — we expect to receive it > > > around > > > > > > > > November. > > > > > > > > > If > > > > > > > > > > > the > > > > > > > > > > > > > > > baseline were to switch to your team's stack > with > > > its > > > > > > > > different > > > > > > > > > > > > > > > architecture, that certification cycle would > need > > > to > > > > be > > > > > > > > > repeated, > > > > > > > > > > > > which > > > > > > > > > > > > > > is > > > > > > > > > > > > > > > not trivial given the time and cost involved. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Xiang Xiao <[email protected]> > > > > 于2026年10月16日周五 > > > > > > > > 15:08写道: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Oct 16, 2026 at 2:44 PM chao an < > > > > > > > > [email protected] > > > > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi raiden00pl, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Regarding your point about the NimBLE port > > > using > > > > > the > > > > > > > > POSIX > > > > > > > > > > API > > > > > > > > > > > — > > > > > > > > > > > > yes, > > > > > > > > > > > > > > > it > > > > > > > > > > > > > > > > > uses POSIX, but there are real issues with > > the > > > > > > current > > > > > > > > > > > > implementation > > > > > > > > > > > > > > > > that > > > > > > > > > > > > > > > > > go beyond just kernel/protected mode > support. > > > > > > > > > > > > > > > > > 1. ble_npl_hw_enter_critical is not a real > > > > critical > > > > > > > > section > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Look at the NuttX port's implementation: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://github.com/apache/mynewt-nimble/blob/master/ > > > > > > > > > > > porting/npl/nuttx/src/os_atomic.c > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > static pthread_mutex_t s_mutex = > > > > > > > > > > > > > > > PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > uint32_t ble_npl_hw_enter_critical(void) > > > > > > > > > > > > > > > > > { > > > > > > > > > > > > > > > > > pthread_mutex_lock(&s_mutex); > > > > > > > > > > > > > > > > > return 0; > > > > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > This is a mutex, not a critical section. It > > > does > > > > > not > > > > > > > > > disable > > > > > > > > > > > > > > interrupts > > > > > > > > > > > > > > > > or > > > > > > > > > > > > > > > > > preemption — an ISR can still fire and > > corrupt > > > > data > > > > > > > that > > > > > > > > > the > > > > > > > > > > > > > > "critical > > > > > > > > > > > > > > > > > section" was supposed to protect. On top of > > > that, > > > > > > > using a > > > > > > > > > > mutex > > > > > > > > > > > > opens > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > door to ABBA deadlocks when combined with > any > > > > other > > > > > > > lock > > > > > > > > > held > > > > > > > > > > > > inside > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > critical region: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > - Thread A: enter_critical → > > lock(s_mutex) → > > > > try > > > > > > > > > > lock(mutex > > > > > > > > > > > > M) ← > > > > > > > > > > > > > > > > blocked > > > > > > > > > > > > > > > > > by B > > > > > > > > > > > > > > > > > - Thread B: lock(M) → enter_critical → > > > > > > > lock(s_mutex) ← > > > > > > > > > > > > blocked by > > > > > > > > > > > > > > A > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Compare this with the FreeRTOS port, which > > > > > correctly > > > > > > > uses > > > > > > > > > > > > > > > > > vPortEnterCritical() / vPortExitCritical() > > > (i.e., > > > > > > > > actually > > > > > > > > > > > > disabling > > > > > > > > > > > > > > > > > scheduling/preemption). The current NuttX > > port > > > > > simply > > > > > > > > does > > > > > > > > > > not > > > > > > > > > > > > meet > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > semantic contract that the NimBLE stack > > expects > > > > > from > > > > > > > > > > > > > > > > > ble_npl_hw_enter_critical. > > > > > > > > > > > > > > > > > 2. Time subsystem uses clock_gettime > instead > > of > > > > > > kernel > > > > > > > > tick > > > > > > > > > > > APIs > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://github.com/apache/mynewt-nimble/blob/master/ > > > > > > > > > > > porting/npl/nuttx/src/os_time.c > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ble_npl_time_get() is backed by > > > > > > > > > > clock_gettime(CLOCK_MONOTONIC, > > > > > > > > > > > > ...), > > > > > > > > > > > > > > > > which > > > > > > > > > > > > > > > > > involves a syscall and floating-point > > > arithmetic > > > > on > > > > > > > every > > > > > > > > > > call. > > > > > > > > > > > > In a > > > > > > > > > > > > > > > BLE > > > > > > > > > > > > > > > > > stack where timestamps and timing are on > the > > > hot > > > > > > path, > > > > > > > > this > > > > > > > > > > > adds > > > > > > > > > > > > > > > > measurable > > > > > > > > > > > > > > > > > overhead compared to accessing the kernel > > tick > > > > > > counter > > > > > > > > > > > directly. > > > > > > > > > > > > > > > > > 3. Others are already using the kernel > > > approach — > > > > > and > > > > > > > for > > > > > > > > > > good > > > > > > > > > > > > reason > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > A concrete example: Xiaomi's Bluetooth > stack > > > > > (zblue) > > > > > > > for > > > > > > > > > > > > > > openvela/NuttX > > > > > > > > > > > > > > > > > uses kernel APIs directly, bypassing POSIX > > for > > > > the > > > > > > > > > > > > > > performance-critical > > > > > > > > > > > > > > > > > paths: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://github.com/sprhawk/zblue-port-openvela/tree/yaotepai/port/kernel > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > This isn't an academic exercise — it's a > > > > production > > > > > > > > choice. > > > > > > > > > > > They > > > > > > > > > > > > > > > > recognized > > > > > > > > > > > > > > > > > that a BLE stack needs tight integration > with > > > the > > > > > OS > > > > > > > > timer > > > > > > > > > > > > subsystem, > > > > > > > > > > > > > > > > > direct access to critical section > primitives, > > > and > > > > > > > > efficient > > > > > > > > > > > event > > > > > > > > > > > > > > > > delivery, > > > > > > > > > > > > > > > > > none of which POSIX provides well in this > > > > context. > > > > > > > > > > > > > > > > > My question > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > If other organizations are already using a > > more > > > > > > > > performant, > > > > > > > > > > > > > > > > architecturally > > > > > > > > > > > > > > > > > correct kernel-level integration for their > > BLE > > > > > stacks > > > > > > > on > > > > > > > > > > NuttX, > > > > > > > > > > > > why > > > > > > > > > > > > > > > > should > > > > > > > > > > > > > > > > > we be told that we must use the slower, > less > > > > > correct > > > > > > > > POSIX > > > > > > > > > > > path? > > > > > > > > > > > > > > > NuttX's > > > > > > > > > > > > > > > > > POSIX compliance is valuable, but it > > shouldn't > > > > come > > > > > > at > > > > > > > > the > > > > > > > > > > cost > > > > > > > > > > > > of > > > > > > > > > > > > > > > > shipping > > > > > > > > > > > > > > > > > a BLE stack with a broken critical section > > > > > primitive. > > > > > > > > There > > > > > > > > > > > > should be > > > > > > > > > > > > > > > > room > > > > > > > > > > > > > > > > > for both approaches, and the decision > should > > be > > > > > > driven > > > > > > > by > > > > > > > > > > > > technical > > > > > > > > > > > > > > > > merit, > > > > > > > > > > > > > > > > > not by treating POSIX as the only > acceptable > > > > > answer. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > I don't object to moving the key bluetooth > > stack > > > to > > > > > > > kernel > > > > > > > > > > space > > > > > > > > > > > > like > > > > > > > > > > > > > > how > > > > > > > > > > > > > > > > the current bluetooth stack is done, > > > > > > > > > > > > > > > > what I object to is that the current state of > > > > > > > > > > > > > > > > https://github.com/apache/nuttx/pull/20686 > is > > > far > > > > to > > > > > > > move > > > > > > > > > > > entirely > > > > > > > > > > > > > > > > into kernel space. > > > > > > > > > > > > > > > > If I low my quality bar, I have requested my > > > > teammate > > > > > > to > > > > > > > > > > upstream > > > > > > > > > > > > our > > > > > > > > > > > > > > > > implementation: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://github.com/sprhawk/zblue-port-openvela/tree/yaotepai/port/kernel > > > > > > > > > > > > > > > > since much work needs to be done before it > can > > > > > achieve > > > > > > > the > > > > > > > > > > > quality > > > > > > > > > > > > > > > > upstream. > > > > > > > > > > > > > > > > BTW, many zephyr class BT features are > > developed > > > by > > > > > my > > > > > > > team > > > > > > > > > and > > > > > > > > > > > > > > upstream > > > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > Zeprhy community. > > > > > > > > > > > > > > > > If considering the quality, our version is > much > > > > > better > > > > > > > > since: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 1. Product on smart speaker last year > > > > > > > > > > > > > > > > 2. Pass Bluetooth SIG BT/BLE 6.2 > > certification > > > > at > > > > > > > > 2026.06 > > > > > > > > > > > > > > > > 3. Product on wear device by end of this > > year > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
