My concept with GMPI (not everyone agreed) was that MIDI was not required
*in* the plugin.
  For example take your MIDI keyboard's "Modulation Wheel".  Imagine the
function that parses the MIDI bytes, decides what type of MIDI message it is
and typically converts that 7-bit controller to a nice 'float' scaled
between -1.0 -> +1.0.  Typically every single VST synth plugin has that
code.  The inefficiency is that 1000 Plugin developers had to create and
debug equivalent code.
 I decided the *host* should provide that routine. Written once, available
to every plugin developer.  The plugin simply exposes a port, and the
metadata says "map this port to MIDI modulation-wheel".
  The advantage is - very rich MIDI support is available to ALL plugins. Not
just the standard 7-bit controllers, I support CC, RPN, NRPN, SYSEX, Notes,
Aftertouch, Tempo, almost everything. The MIDI parsing code exists only in
one place so it's robust, and it saves plugin developers a lot of wasted
time duplicating existing code. Plugins are small and lightweight, but MORE
functional than the average VST plugin.
 
This is almost exactly what I proposed as an LV2 extension in this previous thread:
http://lists.lv2plug.in/pipermail/devel-lv2plug.in/2012-June/000270.html

but David seemed to be very against putting this sort of functionality in the hosting library.


Support libraries are the solution to this, naturally, but I have
learned that people have a powerful aversion to using *anything*, no
matter how completely unoffensive a dependency it is.  To address this,
LV2 will probably reluctantly grow an "SDK" that includes essentially
all my libraries soon, but I remain completely convinced that this is
awful, and the spec should be more timeless and have no ABI issues
contained in it whatsoever, and hate this idea with a passion.  

I strongly disagree.  That is to say, I don't think ABI issues are unimportant, but rather that I don't believe including more complex hosting functionality in a hosting library will cause this to happen.  None of the proposed changes would operate through any means other than LV2 extensions.  Adding additional functionality to a hosting library would neither change the requirements for plugins nor for hosts.  There would be no issues with backwards compatibility, and in fact this is a perfect example of how LV2's systems of optional/required features solves such issues.

 So long as you don't start including references to the SDK in the specification, neither plugins nor hosts have to worry at all about the SDK unless they want to.   I find it very strange that you are concerned about this: usually the fear is with these sorts of things that the implementation will differ from the specification, and actually end up becoming the de-facto standard (see the VP8 codec, for example).  But in this case it would be ridiculous to suggest that is going to happen.  Every one of the libraries you are talking about, real or hypothetical, will be written by you, or under your close guidance, i.e. with a close eye at all all times towards conformance with the standard.

The only real worry is that hosts will be unhappy of the "bloat" added to the library they are using.  If it really makes a difference for the library size, then the obvious solution is to separate the required functionality from the optional.  This is completely doable.  But at the very least, give host authors the choice between gaining the extra features, and satisfying their "powerful aversion to any dependency". But I'd bet anyways that if they truly did want to support these advanced features, most host authors would rather use the functionality in the library than have to write it on their own, and for some, it would change these features from "not worthwhile" to "worthwhile" to implement.  I mean, at the root of the issue is a tradeoff, between features and complexity.  If a host complains about the extra complexity that an optional feature incurs, then that's their problem, not ours.  You can't have your cake and eat it too, no matter what plugin specification you are using.

Nobody gives a shit about specifications, or implementation independence.  The
better part of a decade later there's still precisely one left alive:
mine.  Time to give up those ideals I suppose)

I wouldn't be so fast to give up on those ideals.  All this demonstrates is that so far, your implementations have satisfied everyone's needs.  It's just that the degrees of freedom in implementing an LV2 support library are too small at this point.  But that doesn't mean that it's not worth it to maintain this implementation independence, so that as complexity develops, alternatives can fill the necessary roles.  I mean, on the plugin side of things, we have lv2-c++-tools, which offers an alternative library for writing plugins (although the default in this case is no library).  Even on the host side of things, I was unsatisfied with the lilv c++ wrapper, so I wrote lolvmm.  I mean, sure, it's hardly anything, but the point is that if developers felt the same way about any other part of the hosting libraries, then we would see alternatives develop.

If I thought that lilv had it all wrong, then I would write my own host library that does it the way I think is right.  So when I make suggestions about additions to the hosting libraries, it is in the spirit of reducing duplicated effort, not because I think they are the sole "official standard of LV2".  (although the practical reality that changes to lilv will translate to widespread support much more quickly than an independent venture would does color my view of the situation).

But right now, with LV2 event controls and default midi binding on the horizon, depending on how the current hosting libraries handle it, it is the first time that it is plausible (at least for me) that it would be worth it to create some manner of alternative hosting library.  Because honestly, right now, what would an alternative implementation look like?  Code duplication!

Jeremy Salwen