Steinberg Media Technologies is pleased to announce the immediate release of the new VST 3 C API. The new API allows VST developers to easily create bindings to other programming languages, like Python, Rust and Kotlin, to write VST 3 plug-ins and hosts in their preferred languages.
The API is automatically generated from the C++ API via a Python script, which is also available as open source on GitHub. The new C API is licensed under the same Steinberg VST 3 license as the VST 3 SDK, or alternatively under the terms of the General Public License (GPL) version 3.
We’ve had Rust bindings for several years. The technical problem of generating the bindings was solved (although C bindings make life a bit easier) a long time ago. There’s no reason a similar strategy could have been used for Kotlin and Python.
The hurdle of language bindings is the license. We cannot redistribute the bindings under anything but the GPL - which is the biggest complaint I’ve gotten about the Rust bindings for the last 3 years.
+1 @mhilgendorf I think it makes sense for the VST3 SDK to be under strict licensing, but I don’t think it makes a lot of sense for the API itself to be under the same licensing. Please Steinberg, if you want people to embrace your technology as much as possible, relax the licensing on the API (only).
If if makes you feel better, @mhilgendorf and @pongasoft, the US Supreme Court made it very clear in Google V Oracle that header files are not copyrightable. Implementation is the only thing that can be copyrighted-- the contents of the VST C API contain zero implementation, only API declarations. Per supreme court:
Breyer’s analysis identified that APIs served as declaring code rather than implementation, and that in context of copyright, it served an “organization function” similar to the Dewey Decimal System, in which fair use is more applicable."
Furthermore, 1st District:
So long as the specific code used to implement a method is different, anyone is free under the Copyright Act to write his or her own code to carry out exactly the same function or specification of any methods used in the Java API. It does not matter that the declaration or method header lines are identical.
This use case is precisely identical, since we are not borrowing any implementation, and thus, the copyright is non-enforceable.
Excellent! Despite for bindings, the .h file describes very clearly the ABI. Very useful.
As, we’re speaking of the ABI (as in the information needed for plug-ins and hosts to interoperate), putting a file with the ABI description into the pubic domain would help people embrace the use of VST3. In EU (probably other countries) the ABI is not copyrightable, so putting a restrictive license on such a file only creates fear and doubt, in my humble opinion. From this stand-point, may I suggest releasing this file under a permissive license?
In any case, thank you the C API header, great job!
@Yvan, has anyone implemented the python bindings yet so I can write VSTs in Python? If not is there is a recommended path to accomplish this? I see there are several routes for creating python bindings for c libraries such as ctypes, CFFI, PyBind11, Cython, among others, and I’m not sure where to start. I’m trying to implement a VST that will convert midi CC to the VISCA protocol so I can control PTZ cameras right within my DAW.