Limitations¶
Security¶
Nothing on this machine is access-controlled. The network features were built for a hobby machine on a home network, and they assume everyone who can reach the device is welcome to use it.
| Remote desktop | No authentication. Anyone on the same network can open the address, watch the screen and send keyboard and mouse input — that is, operate the machine |
| BLE console and debug service | No pairing, no bonding, no encryption (deliberately, because pairing breaks Web Bluetooth on Windows). Anyone in radio range can read and write files, read the log, and start or stop apps |
| Remote debugger over TCP | No authentication. It listens on all interfaces |
| Wi-Fi credentials | Stored in plain text in /etc/wifi.toml on the device |
| Apps | An app you download runs with the same rights as any other. There is no sandbox between apps and the filesystem |
Use these features only on a network you trust, and at your own risk. Do not forward a port
to the device from the internet. Wi-Fi can be kept off at boot with wifi_auto_start in
Config, and on Retro BLE likewise with ble_auto_start; on Modern BLE always starts at
boot and cannot be stopped while the machine is on.
Differences from R2P2¶
Family mruby is based only on the core part of PicoRuby, and some gems used in PicoRuby's official R2P2 have been independently rewritten. As a result, there may be differences in the available classes and method behavior.
Differences Between PicoRuby and CRuby¶
PicoRuby is based on mruby, so some methods that are standard in CRuby may not be available.
Heap Size¶
Each Family mruby app runs as an independent Ruby VM, with its own heap and stack allocated on PSRAM.
| Item | Guideline / Limit |
|---|---|
| Standard app heap | 500 KB |
Heap with large_memory = 1 |
1000 KB |
| Number of concurrent apps | 3 |
You can check heap usage in the Monitor app.
Language support status¶
| Language | Status |
|---|---|
| Ruby (PicoRuby) | The main language. Everything documented here |
| BASIC | Feature-complete as of 2.0. Every known difference from Family BASIC V3 is catalogued. See BASIC and MicroPython |
| MicroPython | Usable, with real limits: one Python app at a time, built-in modules only, no open(), 256 KB heap. See BASIC and MicroPython |
| Lua | A concept implementation. Not suitable for building a substantial application |
Waiting inside an app¶
Prefer Machine.delay_ms, which is FreeRTOS vTaskDelay underneath:
Machine.delay_ms(500)
Better still, do not block at all: return the number of milliseconds until you want to be
called again from on_update, and let the message pump do the waiting. An app that blocks
processes no events while it does.
This was worse before 2.0
In 1.0 the tick that drives PicoRuby's task switching had to be disabled: calling it
from outside the VM corrupted the VM stack. That is fixed — ticks are now accumulated
by a signal source and applied at one point in the scheduler — and the Task feature
works. The Machine.delay_ms recommendation above is about not blocking, not about the
old corruption.
File System Limitations¶
| Item | Details |
|---|---|
| Maximum file size | Within LittleFS limits (a few MB recommended) |
| Maximum path length | FmrbConst::MAX_PATH_LEN |
| File names | ASCII recommended. Avoid Japanese characters and special symbols |
Dir#seek / Dir#tell |
Not supported (ENOSYS). Use rewind and count from the beginning |
Inter-App Message Size Limit¶
The payload for Pub/Sub publish / send_message is limited to 176 bytes after MessagePack encoding. If you exceed this limit, consider transferring data via files or splitting it across multiple messages.
Machine-specific limitations¶
Most limits apply to both machines. These do not.
Modern (M5Stack Tab5)¶
| microSD | The slot is not wired up in the firmware yet. Internal flash only |
| Video out | The built-in panel is the only output. No composite video |
| GROVE | One port, not two |
| Battery-backed clock | Present (RX8130), but set the time once from Set Clock |
Retro (narya-board)¶
| Wi-Fi and BLE | One radio, one at a time. Running the BLE console means Wi-Fi will not start, and vice versa |
| Touch | No touch panel. A USB mouse is the pointer |
| Remote desktop | Not available |
| Firmware | Two chips to flash, and both must be on the same version or the system will not boot |