Has anybody in the open source audio work considered the possibility that at any moment, PACE, the new owner of JUCE, could pull the rug on that project and seriously fragment the FOSS ecosystem?

@paul its crossed my mind. I believe one version of it is gpl3 but should they pull the plug, plugin developers will have to choose between open sourcing their products (to comply with gpl) or reimplementing. I can't imagine that would be a wise move (to pull the plug) but it is PACE we are talking about.

@xinniw Another direction is they could close source it or add enough proprietary components to it to cripple the functionality of the core project.

People say it can't be done with the GPL, but with a corporate owned project and enough lawyers, they could find a loophole.

Muse Group and Audacity has changed my outlook on what's possible here.

@xinniw The solution here is to be a good programmer and code in an escape hatch into your plugin.

If there's no way your plugin could exist without JUCE, did you really even make a plugin to begin with?

The trouble with JUCE is it has an overreaching scope. It's not just a wrapper for plugin architectures, but it also has lots of GUI and DSP components as well.

@paul great point. I sort of accidentally did this with a plugin I built earlier this year. I wanted to learn the DSP from scratch so I did all the important stuff off to the side in my own library that had no idea juce existed. If I have to, I could throw the ui away (which is juce) and still have all of my synth code untouched by the refactor. I think I'll do this all the time now, if I even use juce for the next one.

@xinniw Also make sure you have things set up so you can offline render your DSP code to a WAV file without any threading. I never see anyone mention this at all, but I can't tell you how useful it has been for me over the years. Just being able to pop a simple CLI C program with determinant behavior into Valgrind or GDB is a great thing to have in your back pocket.

@paul that's a great idea! GDB saved my butt once or twice but running it on the compiled plug in was tricky to set up. In theory, I should be able to make a CLI version as all the DSP logic is made of referentially transparent calls.

@xinniw oh yeah. I've never found shared objects and dynamically loaded code easy to debug or deal with. I've given up trying to make plugins, mine or otherwise, work. It was making me too grumpy. Now I just statically link everything into a single binary.


@xinniw since we're talking about plugins, I thought I'd mention the strategy I use in my music software ecosystems to get plugins using static linking.

the design pattern I use is to create a pseudo main function that takes in a loader callback. I can then build and link a new version of this program.

For example, here is Gest, my gesture sequencer, being loaded as a "plugin" inside of sndkit + LIL (the tiny scripting language that I use with sndkit):


· · Web · 0 · 0 · 1
Sign in to participate in the conversation

We are an instance for discussions around cultural freedom, experimental, new media art, net and computational culture, and things like that.

<svg xmlns="http://www.w3.org/2000/svg" id="hometownlogo" x="0px" y="0px" viewBox="25 40 50 20" width="100%" height="100%"><g><path d="M55.9,53.9H35.3c-0.7,0-1.3,0.6-1.3,1.3s0.6,1.3,1.3,1.3h20.6c0.7,0,1.3-0.6,1.3-1.3S56.6,53.9,55.9,53.9z"/><path d="M55.9,58.2H35.3c-0.7,0-1.3,0.6-1.3,1.3s0.6,1.3,1.3,1.3h20.6c0.7,0,1.3-0.6,1.3-1.3S56.6,58.2,55.9,58.2z"/><path d="M55.9,62.6H35.3c-0.7,0-1.3,0.6-1.3,1.3s0.6,1.3,1.3,1.3h20.6c0.7,0,1.3-0.6,1.3-1.3S56.6,62.6,55.9,62.6z"/><path d="M64.8,53.9c-0.7,0-1.3,0.6-1.3,1.3v8.8c0,0.7,0.6,1.3,1.3,1.3s1.3-0.6,1.3-1.3v-8.8C66,54.4,65.4,53.9,64.8,53.9z"/><path d="M60.4,53.9c-0.7,0-1.3,0.6-1.3,1.3v8.8c0,0.7,0.6,1.3,1.3,1.3s1.3-0.6,1.3-1.3v-8.8C61.6,54.4,61.1,53.9,60.4,53.9z"/><path d="M63.7,48.3c1.3-0.7,2-2.5,2-5.6c0-3.6-0.9-7.8-3.3-7.8s-3.3,4.2-3.3,7.8c0,3.1,0.7,4.9,2,5.6v2.4c0,0.7,0.6,1.3,1.3,1.3 s1.3-0.6,1.3-1.3V48.3z M62.4,37.8c0.4,0.8,0.8,2.5,0.8,4.9c0,2.5-0.5,3.4-0.8,3.4s-0.8-0.9-0.8-3.4C61.7,40.3,62.1,38.6,62.4,37.8 z"/><path d="M57,42.7c0-0.1-0.1-0.1-0.1-0.2l-3.2-4.1c-0.2-0.3-0.6-0.5-1-0.5h-1.6v-1.9c0-0.7-0.6-1.3-1.3-1.3s-1.3,0.6-1.3,1.3V38 h-3.9h-1.1h-5.2c-0.4,0-0.7,0.2-1,0.5l-3.2,4.1c0,0.1-0.1,0.1-0.1,0.2c0,0-0.1,0.1-0.1,0.1C34,43,34,43.2,34,43.3v7.4 c0,0.7,0.6,1.3,1.3,1.3h5.2h7.4h8c0.7,0,1.3-0.6,1.3-1.3v-7.4c0-0.2,0-0.3-0.1-0.4C57,42.8,57,42.8,57,42.7z M41.7,49.5h-5.2v-4.9 h10.2v4.9H41.7z M48.5,42.1l-1.2-1.6h4.8l1.2,1.6H48.5z M44.1,40.5l1.2,1.6h-7.5l1.2-1.6H44.1z M49.2,44.6h5.5v4.9h-5.5V44.6z"/></g></svg>