Cabbage Logo
Back to Cabbage Site

Discussion about licenses (commercial use of Cabbage)

What kind of licenses are there in the included algorithms (such as those used by the examples)?

Can they be leveraged for producing commercial VST plug-ins out of Cabbage?

All of the examples are copyrighted to their authors. If you wish to port one of the examples as a commercial product you should contact the author first. FYI, all of the opcodes and processing algorithms included with Csound are LGPL, and can be freely used in commercial products. Cabbage is GPL but that shouldnā€™t stop you selling Cabbage based products, as long as you adhere to the conditions of the license.

Actually I think LGPL is not trivially compatible with audio plug-ins. Or have not heard proper workarounds for the following problem.

The reason is that plug-ins (VST, ā€¦) are always distributed in such way that the source is not available. LGPL wants the source of the LGPLā€™d code distributed, which is impossible other than by, for example, providing the LPGLā€™d code (e.g. as a .dll) in the .zip file the plug-in is distributed in.

I donā€™t know how Cabbageā€™s license relates to the license of the produced VST. The VST SDK is known to be incompatible with GPL code, since the VST SDK cannot be distributed (itā€™s proprietary), thus VSTs cannot adhere to the GPL. I donā€™t know how youā€™ve worked out that Cabbage can be GPL, but produce VSTs.

This should be clarified since to me Cabbage seems very suited for developing certain kinds of plug-ins in the style of ā€œSynthMakerā€ that benefit from a large library of pre-made stuff and a simple and fast to use ā€œscripting languageā€.

You should also clarify, how is Juce used in Cabbage. Since Juce is commercial software if producing commercial VSTs.

If it turns out that Juce is creating a problem, then I might recommend porting Cabbage to WDL-OL . Or I might attempt it myself.

I donā€™t, and never will distribute the VST SDK. To do so would violate the terms of their license. All my Cabbage code is available for anyone to view on Github, and is also available to download through a .zip file from the same site. I will admit that distributing pre-built versions of Cabbage is a grey area. But so far no representative of Steinberg has taken any issue with it. Iā€™ve not heard of any other open source developers that have had an issue with this. Iā€™m also using a version of their SDK that is no longer maintained by them. It has been mark obsolete. I find it highly unlikely that they will take issue with this project.

The reason I use JUCE is because I can use it as a GPL library. WDL-OL looks interesting, but is no where near as extensive as JUCE. For now Iā€™m more than happy to continue using JUCE as a GPL library.

Cabbage users are free to licence their Cabbage patches as they see fit. Their code does not belong to the Cabbage/Csound code base, so doesnā€™t have to adhere to the terms of the GPL. If however, a user wishes to contribute to Cabbage in the form of some low level C/C++ code, then it will need to be GPLā€™ed too. Users can publish or sell Cabbage instruments without ever needing to distribute binaries, so can remain exempt from any of kind of licensing issues.

And what about the license status of the VSTs exported from Cabbage?

Can they be distributed as such or are there other conditions than those imposed by the musical/DSP algorithm creators (if oneā€™s using a copyrighted algorithm).

This is where it gets interesting :wink: Technically speaking, VSTs exported with Cabbage are GPL, because they have been spawned from Cabbage. However, the underlying Csound/Cabbage code that the instrument is built with can be any license. Users who wish to publish plugins have two options. They can either distribute their instrument code with a Cabbage VST binary, or they can simply publish their instrument code and get their end users to export it as a VST plugin using Cabbage. Personally speaking, Iā€™ve no issue with users distributing Cabbage binaries with their instrument code commercially or otherwise. But as we discussed previously, this may be in breach of the VST SDK license.

All the processing algorithms used by Csound are compatible with the LGPL license, otherwise they could not be distributed with Csound. Therefore, Iā€™m pretty sure the underlying algorithms used in the examples are all available in the public domain. So I donā€™t think you need to ask permission from anyone to develop an FM synth per say. However, if you wish to adapt a UI, or UX element from one of the examples Iā€™d suggest you contact the author.

Both of those options seem to be asking for opening the source, which is not what a commercial plug-in developer would want to do. If they wish to protect their algorithms or e.g. avoid unlicensed distribution.

In what way do either of the two options Iā€™ve mentioned imply that you need to release your instrument code as open source? Cabbage is a framework for developing audio software. Users implement their software using a high level scripting language. The scripts you write can be licensed in any way you see fit. They are not bound in any way to any open source license.

This isnā€™t anything new in the world of software development. The vast majority of audio software in existence today was and is developed using GCC/G++. That compiler is GPL-ed, but it doesnā€™t stop companies from selling the software they create with it.

They can either distribute their instrument code with a Cabbage VST binary, or they can simply publish their instrument code and get their end users to export it as a VST plugin using Cabbage.

Snap, I just thought of this after I sent the last message. So basically we need a way to hide that code from users, and still abide by the GPL. Iā€™m open to suggestions? Surely there is a clever way to do this?

Iā€™ve just seen many plug-in and plug-in framework developers deviate from the GPL, because there are other licenses that are more trouble-free.

I donā€™t know whatā€™s the problem in allowing the closing of the source code, if the developer wants to close it. One can still enforce e.g. attributing the source that comes from other authors, but not displaying it.

Have a look at e.g. the WDL-OL license:

The problem is this, if I close the source code for Cabbage I have to pay a fee to use JUCE. Thatā€™s not currently viable. Itā€™s GPL versus paying $3000-$5,000. The WDL-OL license is great but for me the quality of the library is far more important than its license. As such WDL-OL doesnā€™t come close to JUCE. I would have to remove many features of Cabbage if I changed and it would also mean saying goodbye to all the Linux Cabbage users. Considering Iā€™m a Linux user myself there is no way I could support such a move.

The bottom line is that it wouldnā€™t be hard to hide the underlying Csound code from the end user if you didnā€™t want them to see it. The very first version of Cabbage (circa 2008) embedded the Csound code into the binary. It wasnā€™t to hide it from the end-user, but to make it easier to distribute binaries.

The WDL-OL camp knows that JUCE is a more advanced framework, but WDL-OL does have some architectural advantages over JUCE. E.g. the code is much more clearer and modular. So it could be expected that WDL-OL is at least speculatively trying to compete with the JUCE user base. Itā€™s just that it would take a lot more developer effort to add GUI designers and such quirks, but they have been discussed at the WDL-OL forums. Linux support also. Iā€™m personally using WDL-OL over JUCE, because of the modularity and openness and since I can cope without the extras that JUCE offers.

A fork perhaps?

In my experience forks are rarely successful if they canā€™t offer the same features as their original project, but Iā€™m happy for you to try. I guess the number one advantage of a fork over the current project would be that the ambiguity over GPL and VST would be eliminated? Considering this has never been an issue, Iā€™m not sure if it would be worth the hassle? I think a better idea would be to simply use WDL-OL and Csound to create your own plugins, rather than trying to recreate Cabbage using WDL-OL?

p.s. It seems to me that OL is using JUCE more these days than WDL?

I was thinking that it would be cool to use Cabbage for commercial plug-in development since it reminds of the fairly successful ReaJS for Reaper. ReaJS is a simple scripting language ā€œsimilar toā€ Cabbage that leverages lower level C++ DSP and itā€™s really good for creating plug-ins for Reaper. It does not pose much limitations and itā€™s much faster than writing C++.

I would love for Cabbage users to be able to sell their instruments without having to share their Csound/Cabbage code. Iā€™m sure it can be done. The code could for example be encrypted and saved as binary data itself that Cabbage loads on startup. Or it could simply be embedded into the exported binary?

So youā€™re thinking going around the GPL by having the user compile the VST by opening the plug-in in Cabbage and exporting?

I guess it could work, especially if one could provide some sort of runnable script for doing it automatically. I.e. that the user can run e.g. an install.exe or install.sh or something.

Iā€™m not trying to get ā€˜aroundā€™ the GPL. I just donā€™t think it should prevent users from selling what are essentially ā€˜add-onsā€™. Anyhow, I was thinking that when the end user exports their plugin for distribution, Cabbage could embed the code into it as binary data. From then on in the code would be embedded and hidden from any future users?

And the the usage of that code would be performed by the user having to download Cabbage (and export to VST from that, if he/she wanted to use the VST)?

One idea could be to make a VST (and perhaps even RTAS and AAX) plug-in version of Cabbage. So that one can load Cabbage into a VST host. Then all that was distributed was ā€œCabbage patchesā€. Thatā€™s how ReaJS works.

It does seem that Cabbage AU is in the pipeline already. So have you thought about Cabbage VST?

Not necessarily, but this would certainly take any culpability away from the end-user in terms of distributing binaries. But I imagine a Cabbage user could export a binary which in turn would embed the Csound code. Users could then distribute this binary if they wished.

I always thought it was more streamlined to go with the current approach, which is to simply export a VST plugin from Cabbage, but I see your point. I think many users would still like to be able to export unique VST plugins with Cabbage.

The AU implementation exists simply because I couldnā€™t figure out how to do the same thing with AUs as I do with VSTs. It drove me mad trying. In the end I decided that I could simply let users instantiate a Cabage AU and load whatever instruments they wanted. I guess if users were loading binaries instead of code it might work. But the problem is that VSTs canā€™t dynamically alter the number of parameters they have.