speccy88 opened a new issue, #19217: URL: https://github.com/apache/nuttx/issues/19217
### Is your feature request related to a problem? Please describe. Hi NuttX maintainers, I wanted to ask whether there would be maintainer interest in a pull request adding [Berry](https://berry-lang.github.io/) as an optional NuttX `apps/system` built-in command. Berry is a small embedded scripting language written in ANSI C99. It includes a one-pass compiler, register-based VM, garbage collection, file support, and useful standard modules, while keeping a microcontroller-friendly footprint. I have a working prototype integrated as a normal NSH command: ```sh berry hello.be berry /scripts/blink.be ``` The integration is intentionally small: - New app lives under `apps/system/berry` - `Kconfig` exposes `CONFIG_SYSTEM_BERRY` - `Make.defs` adds it to `CONFIGURED_APPS` - `Makefile` compiles upstream Berry `src/*.c` - It also builds the default module table, default stdio/file port, and `default/berry.c` as the command entry point - The default Berry stdio/file port maps cleanly onto NuttX libc APIs, so very little NuttX-specific glue was needed Current prototype config: ```text CONFIG_SYSTEM_BERRY=y CONFIG_SYSTEM_BERRY_PROGNAME="berry" CONFIG_SYSTEM_BERRY_PRIORITY=100 CONFIG_SYSTEM_BERRY_STACKSIZE=12288 ``` Measured on an ESP32-C3 NuttX image, the current prototype contributes roughly: - `147,506` bytes text in Berry members in `libapps.a` - `0` data - `1,004` bytes BSS - `148,510` bytes total before final link placement - About `106,590` bytes of Berry-like symbols visible in the final ELF - 12 KB configured task stack, chosen conservatively - Static RAM cost is tiny: about 1 KB BSS, plus whatever heap the script actually uses The motivation is to give NuttX a compact “write a small script on-device and run it now” capability without requiring a Python-class runtime. Python is excellent, but on smaller NuttX boards it is a much larger commitment. Berry seems to hit a useful embedded middle ground between NSH scripts and large dynamic runtimes: a real language with compiler, VM, GC, modules, file I/O, and shell integration, but with a much smaller footprint and a simple porting surface. Potential use cases: - Board bring-up scripts - Hardware demos - Test loops - Small automation tasks - User-editable behavior on constrained devices - Simple scripts stored on `/data`, `/scripts`, SD card, etc. Before preparing this as a cleaned-up PR, I wanted to ask: 1. Would this be something NuttX maintainers are interested in accepting as an optional `apps/system/berry` feature? 2. Would you prefer this to live under `apps/system`, or somewhere else in `nuttx-apps`? 3. Are there specific expectations for importing/updating third-party embedded runtimes that I should follow before submitting the PR? If there is interest, I can prepare the PR with the Kconfig/Makefile integration, documentation, and a simple usage example. ### Describe the solution you'd like All of this as been discussed above. ### Describe alternatives you've considered _No response_ ### Verification - [x] I have verified before submitting the report. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
