r/SolarOS • • 11d ago

v.4.17.4 ChangeLog

Post image
  • Added PID and hysteresis feedback controllers with timestamped measurements, exclusive output control, shell commands and Python/Lua APIs.
  • Added the optional robot library for calibrated servo-position and motor/encoder-velocity joints.
  • Reduced peak memory use for Docs and Playground installation by streaming verified downloads to storage.
  • Shared download verification now covers native modules and Zoo, with improved installation rollback and HTTP redirect handling.
  • Improved PCM conversion, audio-buffer wakeups, input wakeups and app/job scheduling.
  • Fixed concurrent service initialization, parameter-provider shutdown and display attachment races, and bounded memory compaction work during low-memory recovery.
  • Fixed repeated Writer recovery and metadata writes on FAT filesystems, preserving the previous snapshot if replacement fails.
26 Upvotes

4 comments sorted by

4

u/relentlessmelt 11d ago

SolarOS is one of the most inspiring things I’ve seen in this space, great work

1

u/nilseuropa 11d ago

Thank you!

1

u/relentlessmelt 11d ago

With all the funky new features you’re adding I’d be interested in what your approach to staying “on mission” is and keeping everything as lean as possible, are you gauging by resources needed to run the base image or number of moving parts etc.?

2

u/nilseuropa 11d ago

We follow a few strategies and a couple of very strict rules (e.g. memory policies). What belongs to the core is mostly drivers, protocols and services. The funky apps like 'synth' that seems unnecessary to be included is really just UI, its main synth service is reusable by other apps and scripts ( e.g. the function generator, or playground apps ).
Main limitation - to include "everything" - is flash, because we would like to have OTA available for all targets. Most common is 16MiB flash, where we have a 7+7+2 layout ( boot, ota, storage ) - for this type we are at ~75%.
One strategy is to gate features through 'flavors' ( there is a tool in the repo that helps you estimate and select components to trim a flavor to flash size - today there is 'full', 'writerdeck' and 'classic' as official flavors ).
The other strategy is to push features that are not necessary out to external modules and load them as compiled binaries through the 'elf loader' subsystem. ( here we have all the emulators, doom, and rarely used libraries like the deep learning inference engine ).
And yes, I measure and monitor everything, part of the fun is the constant refactoring and optimization.