ASIO::Modern license

Started by tildearrow, June 03, 2023, 22:30:55

Previous topic - Next topic


Hello there! I have been looking at the OpenMPT source code to find out how did it implement ASIO support while remaining open-source, and to my surprise I found no presence of the ASIO SDK.

After a while I stumbled upon a set of headers which apparently provide an interface to ASIO devices without requiring the official, proprietary SDK.
This gave me a glimmer of hope in my quest to find a free re-implementation of the SDK (because Steinberg's policies are not GPL-friendly), but these headers lack license information.
I attempted to search ASIO::Modern in this forum, the bug tracker and a search engine, but found nothing other than references to the OpenMPT code.

Therefore I would like to ask: what is the license of the ASIO::Modern headers in `include/asiomodern/`? Is it the same as OpenMPT's (BSD 3-clause), or something else?


OpenMPT has used the official ASIO SDK in the past, as do many other Open Source projects (PortAudio, RtAudio, Audacity, JACK, ..., just to name a few), which has always been some kind of a grey area.

The reasons for ASIO::Modern are mostly technical ones:
 *  The use of non-standard structure packing is problematic in standard-compliant code, however as this ends up being part of the ABI, ASIO::Modern cannot do too much about it, except for wrapping it in a cleaner abstraction layer.
 *  The official SDK has no/incomplete support for non-MSVC compilers on Windows.
 *  Building the official SDK with UNICODE defined (which is the recommended default on Windows since at least Windows NT 4, like, 27 years ago) is broken.
 *  Driver enumeration in the official SDK is just arguably awful and buggy code.
 *  The official SDK does not support using more than 1 ASIO device at the same time.

Tl;dr: The official ASIO SDK is arguably written by someone who does not really know what they are doing. It does not meet even the most minimal code quality standards.

Even if we would use the official SDK, we, by now, would need to heavily patch it, just to even make it work AT ALL, however that is not allowed.

ASIO::Modern is a re-implementation of the API and ABI. While it is not based on any SDK code (in particular not the sample conversion and driver enumeration, which is actual code logic in the SDK), it is somewhat based on the documentation and API/ABI definitions.

There is no explicit license for ASIO::Modern, so maybe, you may consider it BSD-3-Clause like the rest of OpenMPT. However, I would ask you to not use it, just to not draw additional attention to its existence. The licensing and policies of ASIO and VST have always been weird and alien to Open Source projects in the past, for absolutely no sane reason: If they want their proprietary standards to be widely adopted, an as-liberal-as-possible license would be appropriate.