The idea has been floated a few times to remove the internal/embedded SuperCollider from Overtone (libscsynth), and only leave the option of starting or connecting to an external scsynth.
Sam has also pitched in
in a PR comment stating he's in favor, and I'm personally in favor as well. But before I start ripping it out I figured it would be good to bring it up here for deliberation.
Why? The embedded scsynth is one of the biggest sources of complexity in the project. We need to compile and package it ourselves for at least three operating systems/architectures, which requires access to Xcode and Visual Studio. That build process is undocumented, and there's no one left who understands it.
This has meant a number of accumulated issues, like no support for Mac M1/M2, or windows 64 bit. On Linux the extra plugins are missing, no ARM support for SBCs, etc.
To load libscsynth into the JVM we need JNA (or one of its alternatives), which is obscure and error prone. The code currently uses badigeon and tools.deps to unpack and figure out the path with native libraries, which massively blows up our dependencies. Transitively we're looking at 89(!) dependencies (see
https://clojars.org/overtone). Without these this reduces to about 10.
When it goes wrong it goes wrong spectacularly, crashing the JVM. For instance on Linux if you try to load overtone.live, but SuperCollider can't find a Jack server, then you get a JVM crash. That's not a very friendly user experience.
In theory it's nice that people don't have to think about SuperCollider, but it goes wrong often enough that it actually backfires. People want to try Overtone, it blows up in their face, and they decide it's not worth the trouble.
I think instead we should be more explicit, and help people figure out their supercollider setup. On most systems a simple install with the preferred package manager would be enough for us to find `scsynth` on the PATH and we can take it from there.
Removing it would allow us to immediately close a good few of the 100+ open issues, and focus our efforts on making the rest of Overtone better. So that's the proposal, remove all the JNA/libscsynth/internal stuff, default to trying to start and connect to an external scsynth, and if we don't find it on the PATH, then we print out a friendly message with a link to installation instructions.