# Objective
- #23414 made `SystemSchedule::systems` pub, but this can lead to
breaking invariants that `Schedule` expects. For example this allows
mutating the access which is used to prevent race conditions in the
multithreaded executor. This could also allow replacing systems, but
without initializing the access as the `Schedule` is meant to keep track
of which systems are unitialized.
## Solution
- Make the fields of `SystemWithAccess` private to make it harder to
modify the access. This is potentially a breaking change as
`SystemWithAccess` is pub, but the type is not exposed in our public
api's for `Schedule` in 0.18.
- Make an unsafe accessor for the `systems` field and make the field
private again.
## Testing
- Only checked that this compiles
# Objective
- Audio wants a realtime-safe executor with minimal checking. This means
no command application or multithreading etc.
## Solution
- Make it possible to supply our own executor.
## Testing
- Tests are updated
- New custom executor example
Note: reviewing commits individually is probably easier.