When I said “based on Carbon” I meant that VST 2.x actually uses a Carbon datatype to describe the window that the plugin will be using for its GUI/editor. It is not true that VST 2.x 64 bit hosts expect Cocoa - the VST 2.x specification doesn’t allow for this directly. Such hosts “expect” it because they cannot possibly use a Carbon GUI, not because the plugin API works that way. There are also several VST hosts running in 32 bit mode that at the very least prefer plugins to have a Cocoa GUI (and can in fact, use the OS to create one if it does exist, as per Apple’s own recommendations). And if you want to write a plugin GUI that will work on all AU and VST hosts on OS X 10.4 through 10.8, you’ve got problems … saying “no-one should have been coding with Carbon since OS X 10.2” is just dodging the point that both host (Logic) and plugin developers did in fact continue to do so. It wasn’t until 10.6 that Carbon really began to get edged out of the way.
The basic, single common factor between these sorts of issues and the ones on X Window all relate to identifying the low level data types used to describe a “native” window as well as input events from the user. On Windows, the window has remained as an HWND since … forevever. Ditto for the events. On OS X, people had to transition from Carbon to Cocoa, and Apple gave them more than a decade to do it. The big difference on X Window is not the notion of different low level data types, but their simultaneous existence. GtkWindow doesn’t supercede QtWindow or XWindow, it sits alongside them (alongside all the other toolkits). And this, as we’ve agreed before, is a total nightmare for any architecture that loads random binary blobs into an address space and then says “sure, pop up a window and draw in it, etc.” … “Window … I do not think that word means what you think it means” … etc.